path: root/drivers/infiniband/hw/ipath
diff options
authorIra Weiny <ira.weiny@intel.com>2015-05-13 20:02:58 -0400
committerDoug Ledford <dledford@redhat.com>2015-05-20 12:38:13 -0400
commit7738613e7cb419179545910744b1777d87edac5c (patch)
treefb2f63a6dd2b81c536cff96e2e60ca3c2173e82d /drivers/infiniband/hw/ipath
parentIB/user_mad: Fix buggy usage of port index (diff)
IB/core: Add per port immutable struct to ib_device
As of commit 5eb620c81ce3 "IB/core: Add helpers for uncached GID and P_Key searches"; pkey_tbl_len and gid_tbl_len are immutable data which are stored in the ib_device. The per port core capability flags to be added later are also immutable data to be stored in the ib_device object. In preparation for this create a structure for per port immutable data and place the pkey and gid table lengths within this structure. "get_port_immutable" is added as a mandatory device function to allow the drivers to fill in this data. Signed-off-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/hw/ipath')
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c
index 34b94c3ae674..49b774b6f7e8 100644
--- a/drivers/infiniband/hw/ipath/ipath_verbs.c
+++ b/drivers/infiniband/hw/ipath/ipath_verbs.c
@@ -1986,6 +1986,22 @@ static int disable_timer(struct ipath_devdata *dd)
return 0;
+static int ipath_port_immutable(struct ib_device *ibdev, u8 port_num,
+ struct ib_port_immutable *immutable)
+ struct ib_port_attr attr;
+ int err;
+ err = ipath_query_port(ibdev, port_num, &attr);
+ if (err)
+ return err;
+ immutable->pkey_tbl_len = attr.pkey_tbl_len;
+ immutable->gid_tbl_len = attr.gid_tbl_len;
+ return 0;
* ipath_register_ib_device - register our device with the infiniband core
* @dd: the device data structure
@@ -2186,6 +2202,7 @@ int ipath_register_ib_device(struct ipath_devdata *dd)
dev->process_mad = ipath_process_mad;
dev->mmap = ipath_mmap;
dev->dma_ops = &ipath_dma_mapping_ops;
+ dev->get_port_immutable = ipath_port_immutable;
snprintf(dev->node_desc, sizeof(dev->node_desc),
IPATH_IDSTR " %s", init_utsname()->nodename);