staging/rdma/hfi1: Support query gid in rdmavt
authorDennis Dalessandro <dennis.dalessandro@intel.com>
Wed, 3 Feb 2016 22:36:40 +0000 (14:36 -0800)
committerDoug Ledford <dledford@redhat.com>
Fri, 11 Mar 2016 01:37:58 +0000 (20:37 -0500)
Query gid is in rdmavt, but still relies on the driver to maintain the
guid table. Add the necessary driver call back and remove the existing
verb handler.

Reviewed-by: Harish Chegondi <harish.chegondi@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/staging/rdma/hfi1/verbs.c

index 8f351bc157dff9afe8a6810f3f9d279f13333fdb..a85fd81505c7760798a3159c9c620bf54089ea43 100644 (file)
@@ -1345,28 +1345,20 @@ static int modify_port(struct ib_device *ibdev, u8 port,
        return ret;
 }
 
-static int query_gid(struct ib_device *ibdev, u8 port,
-                    int index, union ib_gid *gid)
+static int hfi1_get_guid_be(struct rvt_dev_info *rdi, struct rvt_ibport *rvp,
+                           int guid_index, __be64 *guid)
 {
-       struct hfi1_devdata *dd = dd_from_ibdev(ibdev);
-       int ret = 0;
+       struct hfi1_ibport *ibp = container_of(rvp, struct hfi1_ibport, rvp);
+       struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
 
-       if (!port || port > dd->num_pports)
-               ret = -EINVAL;
-       else {
-               struct hfi1_ibport *ibp = to_iport(ibdev, port);
-               struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
-
-               gid->global.subnet_prefix = ibp->rvp.gid_prefix;
-               if (index == 0)
-                       gid->global.interface_id = cpu_to_be64(ppd->guid);
-               else if (index < HFI1_GUIDS_PER_PORT)
-                       gid->global.interface_id = ibp->guids[index - 1];
-               else
-                       ret = -EINVAL;
-       }
+       if (guid_index == 0)
+               *guid = cpu_to_be64(ppd->guid);
+       else if (guid_index < HFI1_GUIDS_PER_PORT)
+               *guid = ibp->guids[guid_index - 1];
+       else
+               return -EINVAL;
 
-       return ret;
+       return 0;
 }
 
 /*
@@ -1538,7 +1530,6 @@ int hfi1_register_ib_device(struct hfi1_devdata *dd)
        ibdev->modify_device = modify_device;
        ibdev->query_port = query_port;
        ibdev->modify_port = modify_port;
-       ibdev->query_gid = query_gid;
 
        /* keep process mad in the driver */
        ibdev->process_mad = hfi1_process_mad;
@@ -1555,6 +1546,7 @@ int hfi1_register_ib_device(struct hfi1_devdata *dd)
        dd->verbs_dev.rdi.driver_f.get_pci_dev = get_pci_dev;
        dd->verbs_dev.rdi.driver_f.check_ah = hfi1_check_ah;
        dd->verbs_dev.rdi.driver_f.notify_new_ah = hfi1_notify_new_ah;
+       dd->verbs_dev.rdi.driver_f.get_guid_be = hfi1_get_guid_be;
        /*
         * Fill in rvt info device attributes.
         */