-/*
- * GPL HEADER START
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 only,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License version 2 for more details (a copy is included
- * in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU General Public License
- * version 2 along with this program; If not, see
- * http://www.gnu.org/licenses/gpl-2.0.html
- *
- * GPL HEADER END
- */
-/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+// SPDX-License-Identifier: GPL-2.0
+
+/* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
* Copyright (c) 2012, 2017, Intel Corporation.
*/
-/*
- * This file is part of Lustre, http://www.lustre.org/
- */
+
+/* This file is part of Lustre, http://www.lustre.org/ */
#ifndef __UAPI_LNET_TYPES_H__
#define __UAPI_LNET_TYPES_H__
+#include <linux/types.h>
#include <linux/string.h>
#include <asm/byteorder.h>
+#ifndef __KERNEL__
+#include <stdbool.h>
+#endif
/** \addtogroup lnet
* @{ */
#define LNET_RESERVED_PORTAL 0
/** wildcard NID that matches any end-point address */
-#define LNET_NID_ANY ((lnet_nid_t) -1)
+#define LNET_NID_ANY (~(lnet_nid_t) 0)
/** wildcard PID that matches any lnet_pid_t */
-#define LNET_PID_ANY ((lnet_pid_t) -1)
+#define LNET_PID_ANY (~(lnet_pid_t) 0)
static inline int LNET_NID_IS_ANY(const struct lnet_nid *nid)
{
return (nid >> 32) & 0xffffffff;
}
-static inline lnet_nid_t LNET_MKNID(__u32 net, __u32 addr)
-{
- return (((__u64)net) << 32) | addr;
-}
-
static inline __u32 LNET_NETNUM(__u32 net)
{
return net & 0xffff;
return (type << 16) | num;
}
+static inline lnet_nid_t LNET_MKNID(__u32 net, __u32 addr)
+{
+ return (((__u64)net) << 32) | addr;
+}
+
/** The lolnd NID (i.e. myself) */
#define LNET_NID_LO_0 LNET_MKNID(LNET_MKNET(LOLND, 0), 0)
#define LNET_NET_ANY LNET_NIDNET(LNET_NID_ANY)
-static inline int nid_is_nid4(const struct lnet_nid *nid)
+static inline bool nid_is_nid4(const struct lnet_nid *nid)
{
return NID_ADDR_BYTES(nid) == 4;
}
+/* check for address set */
+static inline bool nid_addr_is_set(const struct lnet_nid *nid)
+{
+ __u8 *addr = (__u8 *)(&nid->nid_addr[0]);
+ int i;
+
+ for (i = 0; i < NID_ADDR_BYTES(nid); i++)
+ if (addr[i])
+ return true;
+
+ return false;
+}
+
/* LOLND may not be defined yet, so we cannot use an inline */
#define nid_is_lo0(__nid) \
((__nid)->nid_type == LOLND && \
static inline __u32 LNET_NID_NET(const struct lnet_nid *nid)
{
- return LNET_MKNET(nid->nid_type, __be16_to_cpu(nid->nid_num));
+ if (LNET_NID_IS_ANY(nid))
+ return LNET_NET_ANY;
+ else
+ return LNET_MKNET(nid->nid_type, __be16_to_cpu(nid->nid_num));
}
static inline void lnet_nid4_to_nid(lnet_nid_t nid4, struct lnet_nid *nid)
{
if (nid4 == LNET_NID_ANY) {
- /* equal to setting to LNET_ANY_NID */
- memset(nid, 0xff, sizeof(*nid));
+ *nid = LNET_ANY_NID;
return;
}
/** \addtogroup lnet_md
* @{ */
+struct lnet_hdr_nid16 {
+ char _bytes[sizeof(struct lnet_hdr)];
+} __attribute__((packed));
+
/**
* Event queue handler function type.
*
#define LNET_MD_NO_TRACK_RESPONSE (1 << 11)
/** See struct lnet_md::options. */
#define LNET_MD_GNILND (1 << 12)
+/** Special page mapping handling */
+#define LNET_MD_GPU_ADDR (1 << 13)
/** Infinite threshold on MD operations. See struct lnet_md::threshold */
#define LNET_MD_THRESH_INF (-1)