IB/rdmavt: Add ib core device attributes to rvt driver params list
authorDennis Dalessandro <dennis.dalessandro@intel.com>
Wed, 6 Jan 2016 17:52:19 +0000 (09:52 -0800)
committerDoug Ledford <dledford@redhat.com>
Fri, 11 Mar 2016 01:37:05 +0000 (20:37 -0500)
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>
drivers/infiniband/sw/rdmavt/pd.c
include/rdma/rdma_vt.h

index e6e153f13629ef512c829bc7bf3b010827ed47eb..f8dba88880e584b7ecbd7a656d9cab44298773c6 100644 (file)
@@ -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);
index 6bf5fd40081d531c5fe796b5a7ae1556fb0e8483..2990e03bdd9e65650b586d886c051e912d90cdce 100644 (file)
  * 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 */