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.marcinis...@intel.com>
Reviewed-by: Ira Weiny <ira.we...@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessan...@intel.com>
---
 drivers/infiniband/sw/rdmavt/vt.c |    6 +++++-
 include/rdma/rdma_vt.h            |   22 +++++++++++++++-------
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/drivers/infiniband/sw/rdmavt/vt.c 
b/drivers/infiniband/sw/rdmavt/vt.c
index a1667ea..4bd0e20 100644
--- a/drivers/infiniband/sw/rdmavt/vt.c
+++ b/drivers/infiniband/sw/rdmavt/vt.c
@@ -287,8 +287,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);
 
diff --git a/include/rdma/rdma_vt.h b/include/rdma/rdma_vt.h
index 8d3a41a..8e3520b 100644
--- a/include/rdma/rdma_vt.h
+++ b/include/rdma/rdma_vt.h
@@ -386,6 +386,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;
@@ -413,13 +426,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;

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to