OSDN Git Service

RDMA: Use ib_gid_attr during GID modification
authorParav Pandit <parav@mellanox.com>
Sun, 1 Apr 2018 12:08:24 +0000 (15:08 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Wed, 4 Apr 2018 03:34:16 +0000 (21:34 -0600)
Now that ib_gid_attr contains device, port and index, simplify the
provider APIs add_gid() and del_gid() to use device, port and index
fields from the ib_gid_attr attributes structure.

Signed-off-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/cache.c
drivers/infiniband/hw/bnxt_re/ib_verbs.c
drivers/infiniband/hw/bnxt_re/ib_verbs.h
drivers/infiniband/hw/hns/hns_roce_main.c
drivers/infiniband/hw/mlx4/main.c
drivers/infiniband/hw/mlx5/main.c
drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
drivers/infiniband/sw/rxe/rxe_verbs.c
include/rdma/ib_verbs.h

index 045ca11..e337b08 100644 (file)
@@ -157,7 +157,7 @@ static void del_roce_gid(struct ib_device *device, u8 port_num,
                 table->data_vec[ix].gid.raw);
 
        if (rdma_cap_roce_gid_table(device, port_num))
-               device->del_gid(device, port_num, ix,
+               device->del_gid(&table->data_vec[ix].attr,
                                &table->data_vec[ix].context);
        dev_put(table->data_vec[ix].attr.ndev);
 }
@@ -186,8 +186,7 @@ static int add_roce_gid(struct ib_gid_table *table,
        }
 
        if (rdma_cap_roce_gid_table(attr->device, attr->port_num)) {
-               ret = attr->device->add_gid(attr->device, attr->port_num,
-                                           ix, gid, attr, &entry->context);
+               ret = attr->device->add_gid(gid, attr, &entry->context);
                if (ret) {
                        pr_err("%s GID add failed device=%s port=%d index=%d\n",
                               __func__, attr->device->name, attr->port_num,
index 63a0e08..a76e206 100644 (file)
@@ -314,12 +314,11 @@ int bnxt_re_query_gid(struct ib_device *ibdev, u8 port_num,
        return rc;
 }
 
-int bnxt_re_del_gid(struct ib_device *ibdev, u8 port_num,
-                   unsigned int index, void **context)
+int bnxt_re_del_gid(const struct ib_gid_attr *attr, void **context)
 {
        int rc = 0;
        struct bnxt_re_gid_ctx *ctx, **ctx_tbl;
-       struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev);
+       struct bnxt_re_dev *rdev = to_bnxt_re_dev(attr->device, ibdev);
        struct bnxt_qplib_sgid_tbl *sgid_tbl = &rdev->qplib_res.sgid_tbl;
        struct bnxt_qplib_gid *gid_to_del;
 
@@ -365,15 +364,14 @@ int bnxt_re_del_gid(struct ib_device *ibdev, u8 port_num,
        return rc;
 }
 
-int bnxt_re_add_gid(struct ib_device *ibdev, u8 port_num,
-                   unsigned int index, const union ib_gid *gid,
+int bnxt_re_add_gid(const union ib_gid *gid,
                    const struct ib_gid_attr *attr, void **context)
 {
        int rc;
        u32 tbl_idx = 0;
        u16 vlan_id = 0xFFFF;
        struct bnxt_re_gid_ctx *ctx, **ctx_tbl;
-       struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev);
+       struct bnxt_re_dev *rdev = to_bnxt_re_dev(attr->device, ibdev);
        struct bnxt_qplib_sgid_tbl *sgid_tbl = &rdev->qplib_res.sgid_tbl;
 
        if ((attr->ndev) && is_vlan_dev(attr->ndev))
index e62b7c2..5c6414c 100644 (file)
@@ -157,10 +157,8 @@ int bnxt_re_get_port_immutable(struct ib_device *ibdev, u8 port_num,
 void bnxt_re_query_fw_str(struct ib_device *ibdev, char *str);
 int bnxt_re_query_pkey(struct ib_device *ibdev, u8 port_num,
                       u16 index, u16 *pkey);
-int bnxt_re_del_gid(struct ib_device *ibdev, u8 port_num,
-                   unsigned int index, void **context);
-int bnxt_re_add_gid(struct ib_device *ibdev, u8 port_num,
-                   unsigned int index, const union ib_gid *gid,
+int bnxt_re_del_gid(const struct ib_gid_attr *attr, void **context);
+int bnxt_re_add_gid(const union ib_gid *gid,
                    const struct ib_gid_attr *attr, void **context);
 int bnxt_re_query_gid(struct ib_device *ibdev, u8 port_num,
                      int index, union ib_gid *gid);
index 76e2e5b..9d48bc0 100644 (file)
@@ -74,12 +74,11 @@ static int hns_roce_set_mac(struct hns_roce_dev *hr_dev, u8 port, u8 *addr)
        return hr_dev->hw->set_mac(hr_dev, phy_port, addr);
 }
 
-static int hns_roce_add_gid(struct ib_device *device, u8 port_num,
-                           unsigned int index, const union ib_gid *gid,
+static int hns_roce_add_gid(const union ib_gid *gid,
                            const struct ib_gid_attr *attr, void **context)
 {
-       struct hns_roce_dev *hr_dev = to_hr_dev(device);
-       u8 port = port_num - 1;
+       struct hns_roce_dev *hr_dev = to_hr_dev(attr->device);
+       u8 port = attr->port_num - 1;
        unsigned long flags;
        int ret;
 
@@ -88,21 +87,20 @@ static int hns_roce_add_gid(struct ib_device *device, u8 port_num,
 
        spin_lock_irqsave(&hr_dev->iboe.lock, flags);
 
-       ret = hr_dev->hw->set_gid(hr_dev, port, index, (union ib_gid *)gid,
-                                  attr);
+       ret = hr_dev->hw->set_gid(hr_dev, port, attr->index,
+                                 (union ib_gid *)gid, attr);
 
        spin_unlock_irqrestore(&hr_dev->iboe.lock, flags);
 
        return ret;
 }
 
-static int hns_roce_del_gid(struct ib_device *device, u8 port_num,
-                           unsigned int index, void **context)
+static int hns_roce_del_gid(const struct ib_gid_attr *attr, void **context)
 {
-       struct hns_roce_dev *hr_dev = to_hr_dev(device);
+       struct hns_roce_dev *hr_dev = to_hr_dev(attr->device);
        struct ib_gid_attr zattr = { };
        union ib_gid zgid = { {0} };
-       u8 port = port_num - 1;
+       u8 port = attr->port_num - 1;
        unsigned long flags;
        int ret;
 
@@ -111,7 +109,7 @@ static int hns_roce_del_gid(struct ib_device *device, u8 port_num,
 
        spin_lock_irqsave(&hr_dev->iboe.lock, flags);
 
-       ret = hr_dev->hw->set_gid(hr_dev, port, index, &zgid, &zattr);
+       ret = hr_dev->hw->set_gid(hr_dev, port, attr->index, &zgid, &zattr);
 
        spin_unlock_irqrestore(&hr_dev->iboe.lock, flags);
 
index a31a3ed..8eca09b 100644 (file)
@@ -246,14 +246,11 @@ static int mlx4_ib_update_gids(struct gid_entry *gids,
        return mlx4_ib_update_gids_v1(gids, ibdev, port_num);
 }
 
-static int mlx4_ib_add_gid(struct ib_device *device,
-                          u8 port_num,
-                          unsigned int index,
-                          const union ib_gid *gid,
+static int mlx4_ib_add_gid(const union ib_gid *gid,
                           const struct ib_gid_attr *attr,
                           void **context)
 {
-       struct mlx4_ib_dev *ibdev = to_mdev(device);
+       struct mlx4_ib_dev *ibdev = to_mdev(attr->device);
        struct mlx4_ib_iboe *iboe = &ibdev->iboe;
        struct mlx4_port_gid_table   *port_gid_table;
        int free = -1, found = -1;
@@ -262,16 +259,16 @@ static int mlx4_ib_add_gid(struct ib_device *device,
        int i;
        struct gid_entry *gids = NULL;
 
-       if (!rdma_cap_roce_gid_table(device, port_num))
+       if (!rdma_cap_roce_gid_table(attr->device, attr->port_num))
                return -EINVAL;
 
-       if (port_num > MLX4_MAX_PORTS)
+       if (attr->port_num > MLX4_MAX_PORTS)
                return -EINVAL;
 
        if (!context)
                return -EINVAL;
 
-       port_gid_table = &iboe->gids[port_num - 1];
+       port_gid_table = &iboe->gids[attr->port_num - 1];
        spin_lock_bh(&iboe->lock);
        for (i = 0; i < MLX4_MAX_PORT_GIDS; ++i) {
                if (!memcmp(&port_gid_table->gids[i].gid, gid, sizeof(*gid)) &&
@@ -318,33 +315,30 @@ static int mlx4_ib_add_gid(struct ib_device *device,
        spin_unlock_bh(&iboe->lock);
 
        if (!ret && hw_update) {
-               ret = mlx4_ib_update_gids(gids, ibdev, port_num);
+               ret = mlx4_ib_update_gids(gids, ibdev, attr->port_num);
                kfree(gids);
        }
 
        return ret;
 }
 
-static int mlx4_ib_del_gid(struct ib_device *device,
-                          u8 port_num,
-                          unsigned int index,
-                          void **context)
+static int mlx4_ib_del_gid(const struct ib_gid_attr *attr, void **context)
 {
        struct gid_cache_context *ctx = *context;
-       struct mlx4_ib_dev *ibdev = to_mdev(device);
+       struct mlx4_ib_dev *ibdev = to_mdev(attr->device);
        struct mlx4_ib_iboe *iboe = &ibdev->iboe;
        struct mlx4_port_gid_table   *port_gid_table;
        int ret = 0;
        int hw_update = 0;
        struct gid_entry *gids = NULL;
 
-       if (!rdma_cap_roce_gid_table(device, port_num))
+       if (!rdma_cap_roce_gid_table(attr->device, attr->port_num))
                return -EINVAL;
 
-       if (port_num > MLX4_MAX_PORTS)
+       if (attr->port_num > MLX4_MAX_PORTS)
                return -EINVAL;
 
-       port_gid_table = &iboe->gids[port_num - 1];
+       port_gid_table = &iboe->gids[attr->port_num - 1];
        spin_lock_bh(&iboe->lock);
        if (ctx) {
                ctx->refcount--;
@@ -376,7 +370,7 @@ static int mlx4_ib_del_gid(struct ib_device *device,
        spin_unlock_bh(&iboe->lock);
 
        if (!ret && hw_update) {
-               ret = mlx4_ib_update_gids(gids, ibdev, port_num);
+               ret = mlx4_ib_update_gids(gids, ibdev, attr->port_num);
                kfree(gids);
        }
        return ret;
index 9e6780e..bc9eabd 100644 (file)
@@ -502,18 +502,19 @@ static int set_roce_addr(struct mlx5_ib_dev *dev, u8 port_num,
                                      vlan_id, port_num);
 }
 
-static int mlx5_ib_add_gid(struct ib_device *device, u8 port_num,
-                          unsigned int index, const union ib_gid *gid,
+static int mlx5_ib_add_gid(const union ib_gid *gid,
                           const struct ib_gid_attr *attr,
                           __always_unused void **context)
 {
-       return set_roce_addr(to_mdev(device), port_num, index, gid, attr);
+       return set_roce_addr(to_mdev(attr->device), attr->port_num,
+                            attr->index, gid, attr);
 }
 
-static int mlx5_ib_del_gid(struct ib_device *device, u8 port_num,
-                          unsigned int index, __always_unused void **context)
+static int mlx5_ib_del_gid(const struct ib_gid_attr *attr,
+                          __always_unused void **context)
 {
-       return set_roce_addr(to_mdev(device), port_num, index, NULL, NULL);
+       return set_roce_addr(to_mdev(attr->device), attr->port_num,
+                            attr->index, NULL, NULL);
 }
 
 __be16 mlx5_get_roce_udp_sport(struct mlx5_ib_dev *dev, u8 port_num,
index 4834460..0be33a8 100644 (file)
@@ -62,17 +62,10 @@ static DEFINE_MUTEX(pvrdma_device_list_lock);
 static LIST_HEAD(pvrdma_device_list);
 static struct workqueue_struct *event_wq;
 
-static int pvrdma_add_gid(struct ib_device *ibdev,
-                         u8 port_num,
-                         unsigned int index,
-                         const union ib_gid *gid,
+static int pvrdma_add_gid(const union ib_gid *gid,
                          const struct ib_gid_attr *attr,
                          void **context);
-static int pvrdma_del_gid(struct ib_device *ibdev,
-                         u8 port_num,
-                         unsigned int index,
-                         void **context);
-
+static int pvrdma_del_gid(const struct ib_gid_attr *attr, void **context);
 
 static ssize_t show_hca(struct device *device, struct device_attribute *attr,
                        char *buf)
@@ -657,18 +650,15 @@ static int pvrdma_add_gid_at_index(struct pvrdma_dev *dev,
        return 0;
 }
 
-static int pvrdma_add_gid(struct ib_device *ibdev,
-                         u8 port_num,
-                         unsigned int index,
-                         const union ib_gid *gid,
+static int pvrdma_add_gid(const union ib_gid *gid,
                          const struct ib_gid_attr *attr,
                          void **context)
 {
-       struct pvrdma_dev *dev = to_vdev(ibdev);
+       struct pvrdma_dev *dev = to_vdev(attr->device);
 
        return pvrdma_add_gid_at_index(dev, gid,
                                       ib_gid_type_to_pvrdma(attr->gid_type),
-                                      index);
+                                      attr->index);
 }
 
 static int pvrdma_del_gid_at_index(struct pvrdma_dev *dev, int index)
@@ -698,17 +688,14 @@ static int pvrdma_del_gid_at_index(struct pvrdma_dev *dev, int index)
        return 0;
 }
 
-static int pvrdma_del_gid(struct ib_device *ibdev,
-                         u8 port_num,
-                         unsigned int index,
-                         void **context)
+static int pvrdma_del_gid(const struct ib_gid_attr *attr, void **context)
 {
-       struct pvrdma_dev *dev = to_vdev(ibdev);
+       struct pvrdma_dev *dev = to_vdev(attr->device);
 
        dev_dbg(&dev->pdev->dev, "removing gid at index %u from %s",
-               index, dev->netdev->name);
+               attr->index, dev->netdev->name);
 
-       return pvrdma_del_gid_at_index(dev, index);
+       return pvrdma_del_gid_at_index(dev, attr->index);
 }
 
 static void pvrdma_netdevice_event_handle(struct pvrdma_dev *dev,
index 0661c27..08f3e06 100644 (file)
@@ -77,19 +77,17 @@ out:
        return rc;
 }
 
-static int rxe_add_gid(struct ib_device *device, u8 port_num, unsigned int
-                      index, const union ib_gid *gid,
+static int rxe_add_gid(const union ib_gid *gid,
                       const struct ib_gid_attr *attr, void **context)
 {
-       if (index >= RXE_PORT_GID_TBL_LEN)
+       if (attr->index >= RXE_PORT_GID_TBL_LEN)
                return -EINVAL;
        return 0;
 }
 
-static int rxe_del_gid(struct ib_device *device, u8 port_num, unsigned int
-                      index, void **context)
+static int rxe_del_gid(const struct ib_gid_attr *attr, void **context)
 {
-       if (index >= RXE_PORT_GID_TBL_LEN)
+       if (attr->index >= RXE_PORT_GID_TBL_LEN)
                return -EINVAL;
        return 0;
 }
index dc2541f..1e3059c 100644 (file)
@@ -2151,34 +2151,29 @@ struct ib_device {
        int                        (*query_gid)(struct ib_device *device,
                                                u8 port_num, int index,
                                                union ib_gid *gid);
-       /* When calling add_gid, the HW vendor's driver should
-        * add the gid of device @device at gid index @index of
-        * port @port_num to be @gid. Meta-info of that gid (for example,
-        * the network device related to this gid is available
-        * at @attr. @context allows the HW vendor driver to store extra
-        * information together with a GID entry. The HW vendor may allocate
-        * memory to contain this information and store it in @context when a
-        * new GID entry is written to. Params are consistent until the next
-        * call of add_gid or delete_gid. The function should return 0 on
+       /* When calling add_gid, the HW vendor's driver should add the gid
+        * of device of port at gid index available at @attr. Meta-info of
+        * that gid (for example, the network device related to this gid) is
+        * available at @attr. @context allows the HW vendor driver to store
+        * extra information together with a GID entry. The HW vendor driver may
+        * allocate memory to contain this information and store it in @context
+        * when a new GID entry is written to. Params are consistent until the
+        * next call of add_gid or delete_gid. The function should return 0 on
         * success or error otherwise. The function could be called
-        * concurrently for different ports. This function is only called
-        * when roce_gid_table is used.
+        * concurrently for different ports. This function is only called when
+        * roce_gid_table is used.
         */
-       int                        (*add_gid)(struct ib_device *device,
-                                             u8 port_num,
-                                             unsigned int index,
-                                             const union ib_gid *gid,
+       int                        (*add_gid)(const union ib_gid *gid,
                                              const struct ib_gid_attr *attr,
                                              void **context);
        /* When calling del_gid, the HW vendor's driver should delete the
-        * gid of device @device at gid index @index of port @port_num.
+        * gid of device @device at gid index gid_index of port port_num
+        * available in @attr.
         * Upon the deletion of a GID entry, the HW vendor must free any
         * allocated memory. The caller will clear @context afterwards.
         * This function is only called when roce_gid_table is used.
         */
-       int                        (*del_gid)(struct ib_device *device,
-                                             u8 port_num,
-                                             unsigned int index,
+       int                        (*del_gid)(const struct ib_gid_attr *attr,
                                              void **context);
        int                        (*query_pkey)(struct ib_device *device,
                                                 u8 port_num, u16 index, u16 *pkey);