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>
diff --git a/drivers/infiniband/sw/rdmavt/pd.c b/drivers/infiniband/sw/rdmavt/pd.c
index e6e153f..f8dba88 100644
--- a/drivers/infiniband/sw/rdmavt/pd.c
+++ b/drivers/infiniband/sw/rdmavt/pd.c
@@ -69,7 +69,7 @@
*/
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 6bf5fd4..2990e03 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_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 */