These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / infiniband / core / multicast.c
index fa17b55..bb6685f 100644 (file)
@@ -43,7 +43,7 @@
 #include "sa.h"
 
 static void mcast_add_one(struct ib_device *device);
-static void mcast_remove_one(struct ib_device *device);
+static void mcast_remove_one(struct ib_device *device, void *client_data);
 
 static struct ib_client mcast_client = {
        .name   = "ib_multicast",
@@ -729,7 +729,8 @@ int ib_init_ah_from_mcmember(struct ib_device *device, u8 port_num,
        u16 gid_index;
        u8 p;
 
-       ret = ib_find_cached_gid(device, &rec->port_gid, &p, &gid_index);
+       ret = ib_find_cached_gid(device, &rec->port_gid,
+                                NULL, &p, &gid_index);
        if (ret)
                return ret;
 
@@ -780,8 +781,7 @@ static void mcast_event_handler(struct ib_event_handler *handler,
        int index;
 
        dev = container_of(handler, struct mcast_device, event_handler);
-       if (rdma_port_get_link_layer(dev->device, event->element.port_num) !=
-           IB_LINK_LAYER_INFINIBAND)
+       if (!rdma_cap_ib_mcast(dev->device, event->element.port_num))
                return;
 
        index = event->element.port_num - dev->start_port;
@@ -808,24 +808,16 @@ static void mcast_add_one(struct ib_device *device)
        int i;
        int count = 0;
 
-       if (rdma_node_get_transport(device->node_type) != RDMA_TRANSPORT_IB)
-               return;
-
        dev = kmalloc(sizeof *dev + device->phys_port_cnt * sizeof *port,
                      GFP_KERNEL);
        if (!dev)
                return;
 
-       if (device->node_type == RDMA_NODE_IB_SWITCH)
-               dev->start_port = dev->end_port = 0;
-       else {
-               dev->start_port = 1;
-               dev->end_port = device->phys_port_cnt;
-       }
+       dev->start_port = rdma_start_port(device);
+       dev->end_port = rdma_end_port(device);
 
        for (i = 0; i <= dev->end_port - dev->start_port; i++) {
-               if (rdma_port_get_link_layer(device, dev->start_port + i) !=
-                   IB_LINK_LAYER_INFINIBAND)
+               if (!rdma_cap_ib_mcast(device, dev->start_port + i))
                        continue;
                port = &dev->port[i];
                port->dev = dev;
@@ -849,13 +841,12 @@ static void mcast_add_one(struct ib_device *device)
        ib_register_event_handler(&dev->event_handler);
 }
 
-static void mcast_remove_one(struct ib_device *device)
+static void mcast_remove_one(struct ib_device *device, void *client_data)
 {
-       struct mcast_device *dev;
+       struct mcast_device *dev = client_data;
        struct mcast_port *port;
        int i;
 
-       dev = ib_get_client_data(device, &mcast_client);
        if (!dev)
                return;
 
@@ -863,8 +854,7 @@ static void mcast_remove_one(struct ib_device *device)
        flush_workqueue(mcast_wq);
 
        for (i = 0; i <= dev->end_port - dev->start_port; i++) {
-               if (rdma_port_get_link_layer(device, dev->start_port + i) ==
-                   IB_LINK_LAYER_INFINIBAND) {
+               if (rdma_cap_ib_mcast(device, dev->start_port + i)) {
                        port = &dev->port[i];
                        deref_port(port);
                        wait_for_completion(&port->comp);