Commit fa5d010c authored by Maor Gottlieb's avatar Maor Gottlieb Committed by Jason Gunthorpe

RDMA: Group create AH arguments in struct

Following patch adds additional argument to the create AH function, so it
make sense to group ah_attr and flags arguments in struct.

Link: https://lore.kernel.org/r/20200430192146.12863-13-maorg@mellanox.comSigned-off-by: default avatarMaor Gottlieb <maorg@mellanox.com>
Acked-by: default avatarDevesh Sharma <devesh.sharma@broadcom.com>
Acked-by: default avatarGal Pressman <galpress@amazon.com>
Acked-by: default avatarWeihang Li <liweihang@huawei.com>
Reviewed-by: default avatarJason Gunthorpe <jgg@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 451c9fc7
...@@ -502,6 +502,7 @@ static struct ib_ah *_rdma_create_ah(struct ib_pd *pd, ...@@ -502,6 +502,7 @@ static struct ib_ah *_rdma_create_ah(struct ib_pd *pd,
u32 flags, u32 flags,
struct ib_udata *udata) struct ib_udata *udata)
{ {
struct rdma_ah_init_attr init_attr = {};
struct ib_device *device = pd->device; struct ib_device *device = pd->device;
struct ib_ah *ah; struct ib_ah *ah;
int ret; int ret;
...@@ -521,8 +522,10 @@ static struct ib_ah *_rdma_create_ah(struct ib_pd *pd, ...@@ -521,8 +522,10 @@ static struct ib_ah *_rdma_create_ah(struct ib_pd *pd,
ah->pd = pd; ah->pd = pd;
ah->type = ah_attr->type; ah->type = ah_attr->type;
ah->sgid_attr = rdma_update_sgid_attr(ah_attr, NULL); ah->sgid_attr = rdma_update_sgid_attr(ah_attr, NULL);
init_attr.ah_attr = ah_attr;
init_attr.flags = flags;
ret = device->ops.create_ah(ah, ah_attr, flags, udata); ret = device->ops.create_ah(ah, &init_attr, udata);
if (ret) { if (ret) {
kfree(ah); kfree(ah);
return ERR_PTR(ret); return ERR_PTR(ret);
......
...@@ -631,11 +631,12 @@ static u8 bnxt_re_stack_to_dev_nw_type(enum rdma_network_type ntype) ...@@ -631,11 +631,12 @@ static u8 bnxt_re_stack_to_dev_nw_type(enum rdma_network_type ntype)
return nw_type; return nw_type;
} }
int bnxt_re_create_ah(struct ib_ah *ib_ah, struct rdma_ah_attr *ah_attr, int bnxt_re_create_ah(struct ib_ah *ib_ah, struct rdma_ah_init_attr *init_attr,
u32 flags, struct ib_udata *udata) struct ib_udata *udata)
{ {
struct ib_pd *ib_pd = ib_ah->pd; struct ib_pd *ib_pd = ib_ah->pd;
struct bnxt_re_pd *pd = container_of(ib_pd, struct bnxt_re_pd, ib_pd); struct bnxt_re_pd *pd = container_of(ib_pd, struct bnxt_re_pd, ib_pd);
struct rdma_ah_attr *ah_attr = init_attr->ah_attr;
const struct ib_global_route *grh = rdma_ah_read_grh(ah_attr); const struct ib_global_route *grh = rdma_ah_read_grh(ah_attr);
struct bnxt_re_dev *rdev = pd->rdev; struct bnxt_re_dev *rdev = pd->rdev;
const struct ib_gid_attr *sgid_attr; const struct ib_gid_attr *sgid_attr;
...@@ -673,7 +674,8 @@ int bnxt_re_create_ah(struct ib_ah *ib_ah, struct rdma_ah_attr *ah_attr, ...@@ -673,7 +674,8 @@ int bnxt_re_create_ah(struct ib_ah *ib_ah, struct rdma_ah_attr *ah_attr,
memcpy(ah->qplib_ah.dmac, ah_attr->roce.dmac, ETH_ALEN); memcpy(ah->qplib_ah.dmac, ah_attr->roce.dmac, ETH_ALEN);
rc = bnxt_qplib_create_ah(&rdev->qplib_res, &ah->qplib_ah, rc = bnxt_qplib_create_ah(&rdev->qplib_res, &ah->qplib_ah,
!(flags & RDMA_CREATE_AH_SLEEPABLE)); !(init_attr->flags &
RDMA_CREATE_AH_SLEEPABLE));
if (rc) { if (rc) {
ibdev_err(&rdev->ibdev, "Failed to allocate HW AH"); ibdev_err(&rdev->ibdev, "Failed to allocate HW AH");
return rc; return rc;
......
...@@ -170,7 +170,7 @@ enum rdma_link_layer bnxt_re_get_link_layer(struct ib_device *ibdev, ...@@ -170,7 +170,7 @@ enum rdma_link_layer bnxt_re_get_link_layer(struct ib_device *ibdev,
u8 port_num); u8 port_num);
int bnxt_re_alloc_pd(struct ib_pd *pd, struct ib_udata *udata); int bnxt_re_alloc_pd(struct ib_pd *pd, struct ib_udata *udata);
void bnxt_re_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata); void bnxt_re_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata);
int bnxt_re_create_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, u32 flags, int bnxt_re_create_ah(struct ib_ah *ah, struct rdma_ah_init_attr *init_attr,
struct ib_udata *udata); struct ib_udata *udata);
int bnxt_re_modify_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr); int bnxt_re_modify_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
int bnxt_re_query_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr); int bnxt_re_query_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
......
...@@ -153,8 +153,7 @@ int efa_mmap(struct ib_ucontext *ibucontext, ...@@ -153,8 +153,7 @@ int efa_mmap(struct ib_ucontext *ibucontext,
struct vm_area_struct *vma); struct vm_area_struct *vma);
void efa_mmap_free(struct rdma_user_mmap_entry *rdma_entry); void efa_mmap_free(struct rdma_user_mmap_entry *rdma_entry);
int efa_create_ah(struct ib_ah *ibah, int efa_create_ah(struct ib_ah *ibah,
struct rdma_ah_attr *ah_attr, struct rdma_ah_init_attr *init_attr,
u32 flags,
struct ib_udata *udata); struct ib_udata *udata);
void efa_destroy_ah(struct ib_ah *ibah, u32 flags); void efa_destroy_ah(struct ib_ah *ibah, u32 flags);
int efa_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int efa_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr,
......
...@@ -1639,10 +1639,10 @@ static int efa_ah_destroy(struct efa_dev *dev, struct efa_ah *ah) ...@@ -1639,10 +1639,10 @@ static int efa_ah_destroy(struct efa_dev *dev, struct efa_ah *ah)
} }
int efa_create_ah(struct ib_ah *ibah, int efa_create_ah(struct ib_ah *ibah,
struct rdma_ah_attr *ah_attr, struct rdma_ah_init_attr *init_attr,
u32 flags,
struct ib_udata *udata) struct ib_udata *udata)
{ {
struct rdma_ah_attr *ah_attr = init_attr->ah_attr;
struct efa_dev *dev = to_edev(ibah->device); struct efa_dev *dev = to_edev(ibah->device);
struct efa_com_create_ah_params params = {}; struct efa_com_create_ah_params params = {};
struct efa_ibv_create_ah_resp resp = {}; struct efa_ibv_create_ah_resp resp = {};
...@@ -1650,7 +1650,7 @@ int efa_create_ah(struct ib_ah *ibah, ...@@ -1650,7 +1650,7 @@ int efa_create_ah(struct ib_ah *ibah,
struct efa_ah *ah = to_eah(ibah); struct efa_ah *ah = to_eah(ibah);
int err; int err;
if (!(flags & RDMA_CREATE_AH_SLEEPABLE)) { if (!(init_attr->flags & RDMA_CREATE_AH_SLEEPABLE)) {
ibdev_dbg(&dev->ibdev, ibdev_dbg(&dev->ibdev,
"Create address handle is not supported in atomic context\n"); "Create address handle is not supported in atomic context\n");
err = -EOPNOTSUPP; err = -EOPNOTSUPP;
......
...@@ -39,13 +39,14 @@ ...@@ -39,13 +39,14 @@
#define HNS_ROCE_VLAN_SL_BIT_MASK 7 #define HNS_ROCE_VLAN_SL_BIT_MASK 7
#define HNS_ROCE_VLAN_SL_SHIFT 13 #define HNS_ROCE_VLAN_SL_SHIFT 13
int hns_roce_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr, int hns_roce_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,
u32 flags, struct ib_udata *udata) struct ib_udata *udata)
{ {
struct hns_roce_dev *hr_dev = to_hr_dev(ibah->device); struct hns_roce_dev *hr_dev = to_hr_dev(ibah->device);
const struct ib_gid_attr *gid_attr; const struct ib_gid_attr *gid_attr;
struct device *dev = hr_dev->dev; struct device *dev = hr_dev->dev;
struct hns_roce_ah *ah = to_hr_ah(ibah); struct hns_roce_ah *ah = to_hr_ah(ibah);
struct rdma_ah_attr *ah_attr = init_attr->ah_attr;
const struct ib_global_route *grh = rdma_ah_read_grh(ah_attr); const struct ib_global_route *grh = rdma_ah_read_grh(ah_attr);
u16 vlan_id = 0xffff; u16 vlan_id = 0xffff;
bool vlan_en = false; bool vlan_en = false;
......
...@@ -1208,8 +1208,8 @@ void hns_roce_bitmap_free_range(struct hns_roce_bitmap *bitmap, ...@@ -1208,8 +1208,8 @@ void hns_roce_bitmap_free_range(struct hns_roce_bitmap *bitmap,
unsigned long obj, int cnt, unsigned long obj, int cnt,
int rr); int rr);
int hns_roce_create_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, int hns_roce_create_ah(struct ib_ah *ah, struct rdma_ah_init_attr *init_attr,
u32 flags, struct ib_udata *udata); struct ib_udata *udata);
int hns_roce_query_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr); int hns_roce_query_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr);
void hns_roce_destroy_ah(struct ib_ah *ah, u32 flags); void hns_roce_destroy_ah(struct ib_ah *ah, u32 flags);
......
...@@ -141,10 +141,11 @@ static int create_iboe_ah(struct ib_ah *ib_ah, struct rdma_ah_attr *ah_attr) ...@@ -141,10 +141,11 @@ static int create_iboe_ah(struct ib_ah *ib_ah, struct rdma_ah_attr *ah_attr)
return 0; return 0;
} }
int mlx4_ib_create_ah(struct ib_ah *ib_ah, struct rdma_ah_attr *ah_attr, int mlx4_ib_create_ah(struct ib_ah *ib_ah, struct rdma_ah_init_attr *init_attr,
u32 flags, struct ib_udata *udata) struct ib_udata *udata)
{ {
struct rdma_ah_attr *ah_attr = init_attr->ah_attr;
if (ah_attr->type == RDMA_AH_ATTR_TYPE_ROCE) { if (ah_attr->type == RDMA_AH_ATTR_TYPE_ROCE) {
if (!(rdma_ah_get_ah_flags(ah_attr) & IB_AH_GRH)) if (!(rdma_ah_get_ah_flags(ah_attr) & IB_AH_GRH))
return -EINVAL; return -EINVAL;
...@@ -167,12 +168,14 @@ int mlx4_ib_create_ah_slave(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, ...@@ -167,12 +168,14 @@ int mlx4_ib_create_ah_slave(struct ib_ah *ah, struct rdma_ah_attr *ah_attr,
int slave_sgid_index, u8 *s_mac, u16 vlan_tag) int slave_sgid_index, u8 *s_mac, u16 vlan_tag)
{ {
struct rdma_ah_attr slave_attr = *ah_attr; struct rdma_ah_attr slave_attr = *ah_attr;
struct rdma_ah_init_attr init_attr = {};
struct mlx4_ib_ah *mah = to_mah(ah); struct mlx4_ib_ah *mah = to_mah(ah);
int ret; int ret;
slave_attr.grh.sgid_attr = NULL; slave_attr.grh.sgid_attr = NULL;
slave_attr.grh.sgid_index = slave_sgid_index; slave_attr.grh.sgid_index = slave_sgid_index;
ret = mlx4_ib_create_ah(ah, &slave_attr, 0, NULL); init_attr.ah_attr = &slave_attr;
ret = mlx4_ib_create_ah(ah, &init_attr, NULL);
if (ret) if (ret)
return ret; return ret;
......
...@@ -752,7 +752,7 @@ int mlx4_ib_arm_cq(struct ib_cq *cq, enum ib_cq_notify_flags flags); ...@@ -752,7 +752,7 @@ int mlx4_ib_arm_cq(struct ib_cq *cq, enum ib_cq_notify_flags flags);
void __mlx4_ib_cq_clean(struct mlx4_ib_cq *cq, u32 qpn, struct mlx4_ib_srq *srq); void __mlx4_ib_cq_clean(struct mlx4_ib_cq *cq, u32 qpn, struct mlx4_ib_srq *srq);
void mlx4_ib_cq_clean(struct mlx4_ib_cq *cq, u32 qpn, struct mlx4_ib_srq *srq); void mlx4_ib_cq_clean(struct mlx4_ib_cq *cq, u32 qpn, struct mlx4_ib_srq *srq);
int mlx4_ib_create_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, u32 flags, int mlx4_ib_create_ah(struct ib_ah *ah, struct rdma_ah_init_attr *init_attr,
struct ib_udata *udata); struct ib_udata *udata);
int mlx4_ib_create_ah_slave(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, int mlx4_ib_create_ah_slave(struct ib_ah *ah, struct rdma_ah_attr *ah_attr,
int slave_sgid_index, u8 *s_mac, u16 vlan_tag); int slave_sgid_index, u8 *s_mac, u16 vlan_tag);
......
...@@ -68,10 +68,11 @@ static void create_ib_ah(struct mlx5_ib_dev *dev, struct mlx5_ib_ah *ah, ...@@ -68,10 +68,11 @@ static void create_ib_ah(struct mlx5_ib_dev *dev, struct mlx5_ib_ah *ah,
} }
} }
int mlx5_ib_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr, int mlx5_ib_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,
u32 flags, struct ib_udata *udata) struct ib_udata *udata)
{ {
struct rdma_ah_attr *ah_attr = init_attr->ah_attr;
struct mlx5_ib_ah *ah = to_mah(ibah); struct mlx5_ib_ah *ah = to_mah(ibah);
struct mlx5_ib_dev *dev = to_mdev(ibah->device); struct mlx5_ib_dev *dev = to_mdev(ibah->device);
enum rdma_ah_attr_type ah_type = ah_attr->type; enum rdma_ah_attr_type ah_type = ah_attr->type;
......
...@@ -1153,7 +1153,7 @@ void mlx5_ib_db_unmap_user(struct mlx5_ib_ucontext *context, struct mlx5_db *db) ...@@ -1153,7 +1153,7 @@ void mlx5_ib_db_unmap_user(struct mlx5_ib_ucontext *context, struct mlx5_db *db)
void __mlx5_ib_cq_clean(struct mlx5_ib_cq *cq, u32 qpn, struct mlx5_ib_srq *srq); void __mlx5_ib_cq_clean(struct mlx5_ib_cq *cq, u32 qpn, struct mlx5_ib_srq *srq);
void mlx5_ib_cq_clean(struct mlx5_ib_cq *cq, u32 qpn, struct mlx5_ib_srq *srq); void mlx5_ib_cq_clean(struct mlx5_ib_cq *cq, u32 qpn, struct mlx5_ib_srq *srq);
void mlx5_ib_free_srq_wqe(struct mlx5_ib_srq *srq, int wqe_index); void mlx5_ib_free_srq_wqe(struct mlx5_ib_srq *srq, int wqe_index);
int mlx5_ib_create_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, u32 flags, int mlx5_ib_create_ah(struct ib_ah *ah, struct rdma_ah_init_attr *init_attr,
struct ib_udata *udata); struct ib_udata *udata);
int mlx5_ib_query_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr); int mlx5_ib_query_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr);
void mlx5_ib_destroy_ah(struct ib_ah *ah, u32 flags); void mlx5_ib_destroy_ah(struct ib_ah *ah, u32 flags);
......
...@@ -388,14 +388,15 @@ static void mthca_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata) ...@@ -388,14 +388,15 @@ static void mthca_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata)
mthca_pd_free(to_mdev(pd->device), to_mpd(pd)); mthca_pd_free(to_mdev(pd->device), to_mpd(pd));
} }
static int mthca_ah_create(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr, static int mthca_ah_create(struct ib_ah *ibah,
u32 flags, struct ib_udata *udata) struct rdma_ah_init_attr *init_attr,
struct ib_udata *udata)
{ {
struct mthca_ah *ah = to_mah(ibah); struct mthca_ah *ah = to_mah(ibah);
return mthca_create_ah(to_mdev(ibah->device), to_mpd(ibah->pd), ah_attr, return mthca_create_ah(to_mdev(ibah->device), to_mpd(ibah->pd),
ah); init_attr->ah_attr, ah);
} }
static void mthca_ah_destroy(struct ib_ah *ah, u32 flags) static void mthca_ah_destroy(struct ib_ah *ah, u32 flags)
......
...@@ -155,7 +155,7 @@ static inline int set_av_attr(struct ocrdma_dev *dev, struct ocrdma_ah *ah, ...@@ -155,7 +155,7 @@ static inline int set_av_attr(struct ocrdma_dev *dev, struct ocrdma_ah *ah,
return status; return status;
} }
int ocrdma_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *attr, u32 flags, int ocrdma_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,
struct ib_udata *udata) struct ib_udata *udata)
{ {
u32 *ahid_addr; u32 *ahid_addr;
...@@ -165,6 +165,7 @@ int ocrdma_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *attr, u32 flags, ...@@ -165,6 +165,7 @@ int ocrdma_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *attr, u32 flags,
u16 vlan_tag = 0xffff; u16 vlan_tag = 0xffff;
const struct ib_gid_attr *sgid_attr; const struct ib_gid_attr *sgid_attr;
struct ocrdma_pd *pd = get_ocrdma_pd(ibah->pd); struct ocrdma_pd *pd = get_ocrdma_pd(ibah->pd);
struct rdma_ah_attr *attr = init_attr->ah_attr;
struct ocrdma_dev *dev = get_ocrdma_dev(ibah->device); struct ocrdma_dev *dev = get_ocrdma_dev(ibah->device);
if ((attr->type != RDMA_AH_ATTR_TYPE_ROCE) || if ((attr->type != RDMA_AH_ATTR_TYPE_ROCE) ||
......
...@@ -51,7 +51,7 @@ enum { ...@@ -51,7 +51,7 @@ enum {
OCRDMA_AH_L3_TYPE_SHIFT = 0x1D /* 29 bits */ OCRDMA_AH_L3_TYPE_SHIFT = 0x1D /* 29 bits */
}; };
int ocrdma_create_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, u32 flags, int ocrdma_create_ah(struct ib_ah *ah, struct rdma_ah_init_attr *init_attr,
struct ib_udata *udata); struct ib_udata *udata);
void ocrdma_destroy_ah(struct ib_ah *ah, u32 flags); void ocrdma_destroy_ah(struct ib_ah *ah, u32 flags);
int ocrdma_query_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr); int ocrdma_query_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
......
...@@ -2750,12 +2750,12 @@ int qedr_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata) ...@@ -2750,12 +2750,12 @@ int qedr_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata)
return 0; return 0;
} }
int qedr_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *attr, u32 flags, int qedr_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,
struct ib_udata *udata) struct ib_udata *udata)
{ {
struct qedr_ah *ah = get_qedr_ah(ibah); struct qedr_ah *ah = get_qedr_ah(ibah);
rdma_copy_ah_attr(&ah->attr, attr); rdma_copy_ah_attr(&ah->attr, init_attr->ah_attr);
return 0; return 0;
} }
......
...@@ -70,7 +70,7 @@ int qedr_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr); ...@@ -70,7 +70,7 @@ int qedr_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr);
void qedr_destroy_srq(struct ib_srq *ibsrq, struct ib_udata *udata); void qedr_destroy_srq(struct ib_srq *ibsrq, struct ib_udata *udata);
int qedr_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr, int qedr_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr,
const struct ib_recv_wr **bad_recv_wr); const struct ib_recv_wr **bad_recv_wr);
int qedr_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *attr, u32 flags, int qedr_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,
struct ib_udata *udata); struct ib_udata *udata);
void qedr_destroy_ah(struct ib_ah *ibah, u32 flags); void qedr_destroy_ah(struct ib_ah *ibah, u32 flags);
......
...@@ -509,9 +509,10 @@ void pvrdma_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata) ...@@ -509,9 +509,10 @@ void pvrdma_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata)
* *
* @return: 0 on success, otherwise errno. * @return: 0 on success, otherwise errno.
*/ */
int pvrdma_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr, int pvrdma_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,
u32 flags, struct ib_udata *udata) struct ib_udata *udata)
{ {
struct rdma_ah_attr *ah_attr = init_attr->ah_attr;
struct pvrdma_dev *dev = to_vdev(ibah->device); struct pvrdma_dev *dev = to_vdev(ibah->device);
struct pvrdma_ah *ah = to_vah(ibah); struct pvrdma_ah *ah = to_vah(ibah);
const struct ib_global_route *grh; const struct ib_global_route *grh;
......
...@@ -414,7 +414,7 @@ int pvrdma_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr, ...@@ -414,7 +414,7 @@ int pvrdma_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
void pvrdma_destroy_cq(struct ib_cq *cq, struct ib_udata *udata); void pvrdma_destroy_cq(struct ib_cq *cq, struct ib_udata *udata);
int pvrdma_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc); int pvrdma_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc);
int pvrdma_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify_flags flags); int pvrdma_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify_flags flags);
int pvrdma_create_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, u32 flags, int pvrdma_create_ah(struct ib_ah *ah, struct rdma_ah_init_attr *init_attr,
struct ib_udata *udata); struct ib_udata *udata);
void pvrdma_destroy_ah(struct ib_ah *ah, u32 flags); void pvrdma_destroy_ah(struct ib_ah *ah, u32 flags);
......
...@@ -98,14 +98,14 @@ EXPORT_SYMBOL(rvt_check_ah); ...@@ -98,14 +98,14 @@ EXPORT_SYMBOL(rvt_check_ah);
* *
* Return: 0 on success * Return: 0 on success
*/ */
int rvt_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr, int rvt_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,
u32 create_flags, struct ib_udata *udata) struct ib_udata *udata)
{ {
struct rvt_ah *ah = ibah_to_rvtah(ibah); struct rvt_ah *ah = ibah_to_rvtah(ibah);
struct rvt_dev_info *dev = ib_to_rvt(ibah->device); struct rvt_dev_info *dev = ib_to_rvt(ibah->device);
unsigned long flags; unsigned long flags;
if (rvt_check_ah(ibah->device, ah_attr)) if (rvt_check_ah(ibah->device, init_attr->ah_attr))
return -EINVAL; return -EINVAL;
spin_lock_irqsave(&dev->n_ahs_lock, flags); spin_lock_irqsave(&dev->n_ahs_lock, flags);
...@@ -117,10 +117,11 @@ int rvt_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr, ...@@ -117,10 +117,11 @@ int rvt_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr,
dev->n_ahs_allocated++; dev->n_ahs_allocated++;
spin_unlock_irqrestore(&dev->n_ahs_lock, flags); spin_unlock_irqrestore(&dev->n_ahs_lock, flags);
rdma_copy_ah_attr(&ah->attr, ah_attr); rdma_copy_ah_attr(&ah->attr, init_attr->ah_attr);
if (dev->driver_f.notify_new_ah) if (dev->driver_f.notify_new_ah)
dev->driver_f.notify_new_ah(ibah->device, ah_attr, ah); dev->driver_f.notify_new_ah(ibah->device,
init_attr->ah_attr, ah);
return 0; return 0;
} }
......
...@@ -50,8 +50,8 @@ ...@@ -50,8 +50,8 @@
#include <rdma/rdma_vt.h> #include <rdma/rdma_vt.h>
int rvt_create_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, int rvt_create_ah(struct ib_ah *ah, struct rdma_ah_init_attr *init_attr,
u32 create_flags, struct ib_udata *udata); struct ib_udata *udata);
void rvt_destroy_ah(struct ib_ah *ibah, u32 destroy_flags); void rvt_destroy_ah(struct ib_ah *ibah, u32 destroy_flags);
int rvt_modify_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr); int rvt_modify_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr);
int rvt_query_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr); int rvt_query_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr);
......
...@@ -195,15 +195,16 @@ static void rxe_dealloc_pd(struct ib_pd *ibpd, struct ib_udata *udata) ...@@ -195,15 +195,16 @@ static void rxe_dealloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
rxe_drop_ref(pd); rxe_drop_ref(pd);
} }
static int rxe_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *attr, static int rxe_create_ah(struct ib_ah *ibah,
u32 flags, struct ib_udata *udata) struct rdma_ah_init_attr *init_attr,
struct ib_udata *udata)
{ {
int err; int err;
struct rxe_dev *rxe = to_rdev(ibah->device); struct rxe_dev *rxe = to_rdev(ibah->device);
struct rxe_ah *ah = to_rah(ibah); struct rxe_ah *ah = to_rah(ibah);
err = rxe_av_chk_attr(rxe, attr); err = rxe_av_chk_attr(rxe, init_attr->ah_attr);
if (err) if (err)
return err; return err;
...@@ -211,7 +212,7 @@ static int rxe_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *attr, ...@@ -211,7 +212,7 @@ static int rxe_create_ah(struct ib_ah *ibah, struct rdma_ah_attr *attr,
if (err) if (err)
return err; return err;
rxe_init_av(attr, &ah->av); rxe_init_av(init_attr->ah_attr, &ah->av);
return 0; return 0;
} }
......
...@@ -880,6 +880,11 @@ struct ib_mr_status { ...@@ -880,6 +880,11 @@ struct ib_mr_status {
*/ */
__attribute_const__ enum ib_rate mult_to_ib_rate(int mult); __attribute_const__ enum ib_rate mult_to_ib_rate(int mult);
struct rdma_ah_init_attr {
struct rdma_ah_attr *ah_attr;
u32 flags;
};
enum rdma_ah_attr_type { enum rdma_ah_attr_type {
RDMA_AH_ATTR_TYPE_UNDEFINED, RDMA_AH_ATTR_TYPE_UNDEFINED,
RDMA_AH_ATTR_TYPE_IB, RDMA_AH_ATTR_TYPE_IB,
...@@ -2403,8 +2408,8 @@ struct ib_device_ops { ...@@ -2403,8 +2408,8 @@ struct ib_device_ops {
void (*disassociate_ucontext)(struct ib_ucontext *ibcontext); void (*disassociate_ucontext)(struct ib_ucontext *ibcontext);
int (*alloc_pd)(struct ib_pd *pd, struct ib_udata *udata); int (*alloc_pd)(struct ib_pd *pd, struct ib_udata *udata);
void (*dealloc_pd)(struct ib_pd *pd, struct ib_udata *udata); void (*dealloc_pd)(struct ib_pd *pd, struct ib_udata *udata);
int (*create_ah)(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, int (*create_ah)(struct ib_ah *ah, struct rdma_ah_init_attr *attr,
u32 flags, struct ib_udata *udata); struct ib_udata *udata);
int (*modify_ah)(struct ib_ah *ah, struct rdma_ah_attr *ah_attr); int (*modify_ah)(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
int (*query_ah)(struct ib_ah *ah, struct rdma_ah_attr *ah_attr); int (*query_ah)(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
void (*destroy_ah)(struct ib_ah *ah, u32 flags); void (*destroy_ah)(struct ib_ah *ah, u32 flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment