]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c
IB/core: Use rdma_ah_attr accessor functions
[karo-tx-linux.git] / drivers / infiniband / hw / vmw_pvrdma / pvrdma_verbs.c
index ae5a03bb39d148bc7cb550e214fdbee80f99de33..6b11e574b21c3b3889eb450deeb8f15102e9633b 100644 (file)
@@ -526,14 +526,17 @@ struct ib_ah *pvrdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
        struct pvrdma_dev *dev = to_vdev(pd->device);
        struct pvrdma_ah *ah;
        enum rdma_link_layer ll;
+       const struct ib_global_route *grh;
+       u8 port_num = rdma_ah_get_port_num(ah_attr);
 
-       if (!(ah_attr->ah_flags & IB_AH_GRH))
+       if (!(rdma_ah_get_ah_flags(ah_attr) & IB_AH_GRH))
                return ERR_PTR(-EINVAL);
-
-       ll = rdma_port_get_link_layer(pd->device, ah_attr->port_num);
+       ll = rdma_port_get_link_layer(pd->device,
+                                     rdma_ah_get_port_num(ah_attr));
+       grh = rdma_ah_read_grh(ah_attr);
 
        if (ll != IB_LINK_LAYER_ETHERNET ||
-           rdma_is_multicast_addr((struct in6_addr *)ah_attr->grh.dgid.raw))
+           rdma_is_multicast_addr((struct in6_addr *)grh->dgid.raw))
                return ERR_PTR(-EINVAL);
 
        if (!atomic_add_unless(&dev->num_ahs, 1, dev->dsr->caps.max_ah))
@@ -545,15 +548,15 @@ struct ib_ah *pvrdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
                return ERR_PTR(-ENOMEM);
        }
 
-       ah->av.port_pd = to_vpd(pd)->pd_handle | (ah_attr->port_num << 24);
-       ah->av.src_path_bits = ah_attr->src_path_bits;
+       ah->av.port_pd = to_vpd(pd)->pd_handle | (port_num << 24);
+       ah->av.src_path_bits = rdma_ah_get_path_bits(ah_attr);
        ah->av.src_path_bits |= 0x80;
-       ah->av.gid_index = ah_attr->grh.sgid_index;
-       ah->av.hop_limit = ah_attr->grh.hop_limit;
-       ah->av.sl_tclass_flowlabel = (ah_attr->grh.traffic_class << 20) |
-                                     ah_attr->grh.flow_label;
-       memcpy(ah->av.dgid, ah_attr->grh.dgid.raw, 16);
-       memcpy(ah->av.dmac, ah_attr->dmac, 6);
+       ah->av.gid_index = grh->sgid_index;
+       ah->av.hop_limit = grh->hop_limit;
+       ah->av.sl_tclass_flowlabel = (grh->traffic_class << 20) |
+                                     grh->flow_label;
+       memcpy(ah->av.dgid, grh->dgid.raw, 16);
+       memcpy(ah->av.dmac, ah_attr->dmac, ETH_ALEN);
 
        ah->ibah.device = pd->device;
        ah->ibah.pd = pd;