IB/rdmavt: Move driver helper functions to a common structure
authorDennis Dalessandro <dennis.dalessandro@intel.com>
Wed, 6 Jan 2016 18:02:52 +0000 (10:02 -0800)
committerDoug Ledford <dledford@redhat.com>
Fri, 11 Mar 2016 01:37:11 +0000 (20:37 -0500)
Drivers are going to need to provide multiple functions for rdmavt to
call in to. We already have one, so go ahead and push this into a
data structure designated for driver supplied functions.

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/vt.c
include/rdma/rdma_vt.h

index 367bc45..b4ce97e 100644 (file)
@@ -280,8 +280,12 @@ int rvt_register_device(struct rvt_dev_info *rdi)
        spin_lock_init(&rdi->n_pds_lock);
        rdi->n_pds_allocated = 0;
 
+       /* Validate that drivers have provided the right functions */
+       if (!rdi->driver_f.port_callback)
+               return -EINVAL;
+
        /* We are now good to announce we exist */
-       return ib_register_device(&rdi->ibdev, rdi->port_callback);
+       return ib_register_device(&rdi->ibdev, rdi->driver_f.port_callback);
 }
 EXPORT_SYMBOL(rvt_register_device);
 
index 9baa7f0..e0beedc 100644 (file)
@@ -383,6 +383,19 @@ struct rvt_driver_params {
         */
 };
 
+/*
+ * Functions that drivers are required to support
+ */
+struct rvt_driver_provided {
+       /*
+        * 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 *);
+};
+
 /* Protection domain */
 struct rvt_pd {
        struct ib_pd ibpd;
@@ -407,13 +420,8 @@ struct rvt_dev_info {
 
        /* PKey Table goes here */
 
-       /*
-        * 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 *);
+       /* Driver specific helper functions */
+       struct rvt_driver_provided driver_f;
 
        /* Internal use */
        int n_pds_allocated;