summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDennis Dalessandro <dennis.dalessandro@intel.com>2016-01-06 18:52:19 +0100
committerDoug Ledford <dledford@redhat.com>2016-03-11 02:37:05 +0100
commitb1070a7a4d304e680eb6c1158d76645cf5a923f1 (patch)
tree11adfa647735a45ad269ed32c6bb059a5054c3c0
parentIB/rdmavt: Add protection domain to rdmavt. (diff)
downloadlinux-b1070a7a4d304e680eb6c1158d76645cf5a923f1.tar.xz
linux-b1070a7a4d304e680eb6c1158d76645cf5a923f1.zip
IB/rdmavt: Add ib core device attributes to rvt driver params list
Instead of trying to handle each parameter separately, add ib_device_attr to rvt_driver_params. This means drivers will fill this in and pass to the rvt registration function. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r--drivers/infiniband/sw/rdmavt/pd.c2
-rw-r--r--include/rdma/rdma_vt.h57
2 files changed, 56 insertions, 3 deletions
diff --git a/drivers/infiniband/sw/rdmavt/pd.c b/drivers/infiniband/sw/rdmavt/pd.c
index e6e153f13629..f8dba88880e5 100644
--- a/drivers/infiniband/sw/rdmavt/pd.c
+++ b/drivers/infiniband/sw/rdmavt/pd.c
@@ -69,7 +69,7 @@ struct ib_pd *rvt_alloc_pd(struct ib_device *ibdev,
*/
spin_lock(&dev->n_pds_lock);
- if (dev->n_pds_allocated == dev->dparms.max_pds) {
+ if (dev->n_pds_allocated == dev->dparms.props.max_pd) {
spin_unlock(&dev->n_pds_lock);
kfree(pd);
ret = ERR_PTR(-ENOMEM);
diff --git a/include/rdma/rdma_vt.h b/include/rdma/rdma_vt.h
index 6bf5fd40081d..2990e03bdd9e 100644
--- a/include/rdma/rdma_vt.h
+++ b/include/rdma/rdma_vt.h
@@ -59,7 +59,45 @@
* Things that are driver specific, module parameters in hfi1 and qib
*/
struct rvt_driver_params {
- int max_pds;
+ /*
+ * driver required fields:
+ * node_guid
+ * phys_port_cnt
+ * dma_device
+ * owner
+ * driver optional fields (rvt will provide generic value if blank):
+ * name
+ * node_desc
+ * rvt fields, driver value ignored:
+ * uverbs_abi_ver
+ * node_type
+ * num_comp_vectors
+ * uverbs_cmd_mask
+ */
+ struct ib_device_attr props;
+
+ /*
+ * Drivers will need to support a number of notifications to rvt in
+ * accordance with certain events. This structure should contain a mask
+ * of the supported events. Such events that the rvt may need to know
+ * about include:
+ * port errors
+ * port active
+ * lid change
+ * sm change
+ * client reregister
+ * pkey change
+ *
+ * There may also be other events that the rvt layers needs to know
+ * about this is not an exhaustive list. Some events though rvt does not
+ * need to rely on the driver for such as completion queue error.
+ */
+ int rvt_signal_supported;
+
+ /*
+ * Anything driver specific that is not covered by props
+ * For instance special module parameters. Goes here.
+ */
};
/* Protection domain */
@@ -69,10 +107,25 @@ struct rvt_pd {
};
struct rvt_dev_info {
+ /*
+ * Prior to calling for registration the driver will be responsible for
+ * allocating space for this structure.
+ *
+ * The driver will also be responsible for filling in certain members of
+ * dparms.props
+ */
+
struct ib_device ibdev;
- /* Driver specific */
+ /* Driver specific properties */
struct rvt_driver_params dparms;
+
+ /*
+ * The work to create port files in /sys/class Infiniband is different
+ * depending on the driver. This should not be extracted away and
+ * instead drivers are responsible for setting the correct callback for
+ * this.
+ */
int (*port_callback)(struct ib_device *, u8, struct kobject *);
/* Internal use */