114 path =
zalloc (
sizeof ( *path ) );
118 memcpy ( &path->
av, av, sizeof ( path->
av ) );
127 sa->sa_hdr.comp_mask[1] =
130 sizeof (
sa->sa_data.path_record.dgid ) );
131 memcpy ( &
sa->sa_data.path_record.sgid, &ibdev->
gid,
132 sizeof (
sa->sa_data.path_record.sgid ) );
138 goto err_create_madx;
167 #define IB_NUM_CACHED_PATHS 4 195 if ( ! cached->
path )
225 memset ( cached, 0,
sizeof ( *cached ) );
252 unsigned int cache_idx;
280 memset ( cached, 0,
sizeof ( *cached ) );
284 if ( ! cached->
path ) {
285 DBGC ( ibdev,
"IBDEV %s could not create path\n",
#define IB_SA_CLASS_VERSION
#define IB_MGMT_METHOD_GET
struct arbelprm_rc_send_wqe rc
Infiniband management interfaces.
char name[IBDEV_NAME_LEN]
Name of this Infiniband device.
union ib_gid gid
Port GID (comprising GID prefix and port GUID)
struct ib_path * path
Path.
static struct ib_path_operations ib_cached_path_op
Cached path transaction completion operations.
#define ENOENT
No such file or directory.
struct ib_mad_interface * gsi
General services interface.
struct ib_device * ibdev
Infiniband device.
void(* complete)(struct ib_device *ibdev, struct ib_path *path, int rc, struct ib_address_vector *av)
Handle path transaction completion.
static unsigned int ib_path_cache_idx
Oldest path cache entry index.
An Infiniband management interface.
unsigned int gid_present
GID is present.
An Infiniband Global Identifier.
static __always_inline void ib_path_set_ownerdata(struct ib_path *path, void *priv)
Set Infiniband path owner-private data.
struct ib_mad_transaction * madx
Management transaction.
#define IB_NUM_CACHED_PATHS
Number of path cache entries.
#define ENOMEM
Not enough space.
static struct ib_cached_path ib_path_cache[IB_NUM_CACHED_PATHS]
Path cache.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
Infiniband path operations.
An Infiniband management transaction.
static void ib_cached_path_complete(struct ib_device *ibdev, struct ib_path *path, int rc, struct ib_address_vector *av __unused)
Handle cached path transaction completion.
#define __unused
Declare a variable or data structure as unused.
static struct ib_mad_transaction_operations ib_path_op
Path transaction completion operations.
static __always_inline void * ib_path_get_ownerdata(struct ib_path *path)
Get Infiniband path owner-private data.
struct ib_mad_transaction * ib_create_madx(struct ib_device *ibdev, struct ib_mad_interface *mi, union ib_mad *mad, struct ib_address_vector *av, struct ib_mad_transaction_operations *op)
Create management transaction.
static void ib_path_complete(struct ib_device *ibdev, struct ib_mad_interface *mi, struct ib_mad_transaction *madx, int rc, union ib_mad *mad, struct ib_address_vector *av __unused)
Handle path transaction completion.
static __always_inline void ib_madx_set_ownerdata(struct ib_mad_transaction *madx, void *priv)
Set Infiniband management transaction owner-private data.
uint8_t rate_selector__rate
struct ib_address_vector av
Address vector.
struct ib_path * ib_create_path(struct ib_device *ibdev, struct ib_address_vector *av, struct ib_path_operations *op)
Create path.
#define IB_SA_ATTR_PATH_REC
#define IB_GID_ARGS(gid)
Infiniband Global Identifier debug message arguments.
static struct ib_cached_path * ib_find_path_cache_entry(struct ib_device *ibdev, union ib_gid *dgid)
Find path cache entry.
char * strerror(int errno)
Retrieve string representation of error number.
static void(* free)(struct refcnt *refcnt))
void * zalloc(size_t size)
Allocate cleared memory.
struct ib_path_record path_record
int ib_resolve_path(struct ib_device *ibdev, struct ib_address_vector *av)
Resolve path.
static __always_inline void * ib_madx_get_ownerdata(struct ib_mad_transaction *madx)
Get Infiniband management transaction owner-private data.
unsigned int sl
Service level.
static uint16_t struct vmbus_xfer_pages_operations * op
#define IB_MGMT_CLASS_SUBN_ADM
#define IB_MGMT_STATUS_OK
union ib_gid gid
GID, if present.
#define IB_GID_FMT
Infiniband Global Identifier debug message format.
struct ib_path_operations * op
Path operations.
An Infiniband Address Vector.
unsigned int lid
Local ID.
void(* complete)(struct ib_device *ibdev, struct ib_mad_interface *mi, struct ib_mad_transaction *madx, int rc, union ib_mad *mad, struct ib_address_vector *av)
Handle transaction completion.
Infiniband management transaction operations.
void ib_destroy_path(struct ib_device *ibdev, struct ib_path *path)
Destroy path.
#define ENETUNREACH
Network unreachable.
#define IB_SA_PATH_REC_DGID
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
#define NULL
NULL pointer (VOID *)
A subnet administration MAD.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
#define IB_SA_PATH_REC_SGID
void ib_destroy_madx(struct ib_device *ibdev __unused, struct ib_mad_interface *mi __unused, struct ib_mad_transaction *madx)
Destroy management transaction.
void * memset(void *dest, int character, size_t len) __nonnull