Skip to content

Commit b090c4e

Browse files
gal-pressmanjgunthorpe
authored andcommitted
RDMA: Mark if create address handle is in a sleepable context
Introduce a 'flags' field to create address handle callback and add a flag that marks whether the callback is executed in an atomic context or not. This will allow drivers to wait for completion instead of polling for it when it is allowed. Signed-off-by: Gal Pressman <[email protected]> Signed-off-by: Jason Gunthorpe <[email protected]>
1 parent 5dabcd0 commit b090c4e

File tree

30 files changed

+52
-27
lines changed

30 files changed

+52
-27
lines changed

drivers/infiniband/core/cm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ static int cm_alloc_msg(struct cm_id_private *cm_id_priv,
343343
ret = -ENODEV;
344344
goto out;
345345
}
346-
ah = rdma_create_ah(mad_agent->qp->pd, &av->ah_attr);
346+
ah = rdma_create_ah(mad_agent->qp->pd, &av->ah_attr, 0);
347347
if (IS_ERR(ah)) {
348348
ret = PTR_ERR(ah);
349349
goto out;

drivers/infiniband/core/sa_query.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2276,7 +2276,8 @@ static void update_sm_ah(struct work_struct *work)
22762276
cpu_to_be64(IB_SA_WELL_KNOWN_GUID));
22772277
}
22782278

2279-
new_ah->ah = rdma_create_ah(port->agent->qp->pd, &ah_attr);
2279+
new_ah->ah = rdma_create_ah(port->agent->qp->pd, &ah_attr,
2280+
RDMA_CREATE_AH_SLEEPABLE);
22802281
if (IS_ERR(new_ah->ah)) {
22812282
pr_warn("Couldn't create new SM AH\n");
22822283
kfree(new_ah);

drivers/infiniband/core/verbs.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -487,14 +487,17 @@ rdma_update_sgid_attr(struct rdma_ah_attr *ah_attr,
487487

488488
static struct ib_ah *_rdma_create_ah(struct ib_pd *pd,
489489
struct rdma_ah_attr *ah_attr,
490+
u32 flags,
490491
struct ib_udata *udata)
491492
{
492493
struct ib_ah *ah;
493494

495+
might_sleep_if(flags & RDMA_CREATE_AH_SLEEPABLE);
496+
494497
if (!pd->device->ops.create_ah)
495498
return ERR_PTR(-EOPNOTSUPP);
496499

497-
ah = pd->device->ops.create_ah(pd, ah_attr, udata);
500+
ah = pd->device->ops.create_ah(pd, ah_attr, flags, udata);
498501

499502
if (!IS_ERR(ah)) {
500503
ah->device = pd->device;
@@ -514,12 +517,14 @@ static struct ib_ah *_rdma_create_ah(struct ib_pd *pd,
514517
* given address vector.
515518
* @pd: The protection domain associated with the address handle.
516519
* @ah_attr: The attributes of the address vector.
520+
* @flags: Create address handle flags (see enum rdma_create_ah_flags).
517521
*
518522
* It returns 0 on success and returns appropriate error code on error.
519523
* The address handle is used to reference a local or global destination
520524
* in all UD QP post sends.
521525
*/
522-
struct ib_ah *rdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr)
526+
struct ib_ah *rdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
527+
u32 flags)
523528
{
524529
const struct ib_gid_attr *old_sgid_attr;
525530
struct ib_ah *ah;
@@ -529,7 +534,7 @@ struct ib_ah *rdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr)
529534
if (ret)
530535
return ERR_PTR(ret);
531536

532-
ah = _rdma_create_ah(pd, ah_attr, NULL);
537+
ah = _rdma_create_ah(pd, ah_attr, flags, NULL);
533538

534539
rdma_unfill_sgid_attr(ah_attr, old_sgid_attr);
535540
return ah;
@@ -569,7 +574,7 @@ struct ib_ah *rdma_create_user_ah(struct ib_pd *pd,
569574
}
570575
}
571576

572-
ah = _rdma_create_ah(pd, ah_attr, udata);
577+
ah = _rdma_create_ah(pd, ah_attr, RDMA_CREATE_AH_SLEEPABLE, udata);
573578

574579
out:
575580
rdma_unfill_sgid_attr(ah_attr, old_sgid_attr);
@@ -881,7 +886,7 @@ struct ib_ah *ib_create_ah_from_wc(struct ib_pd *pd, const struct ib_wc *wc,
881886
if (ret)
882887
return ERR_PTR(ret);
883888

884-
ah = rdma_create_ah(pd, &ah_attr);
889+
ah = rdma_create_ah(pd, &ah_attr, RDMA_CREATE_AH_SLEEPABLE);
885890

886891
rdma_destroy_ah_attr(&ah_attr);
887892
return ah;

drivers/infiniband/hw/bnxt_re/ib_verbs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,7 @@ int bnxt_re_destroy_ah(struct ib_ah *ib_ah)
664664

665665
struct ib_ah *bnxt_re_create_ah(struct ib_pd *ib_pd,
666666
struct rdma_ah_attr *ah_attr,
667+
u32 flags,
667668
struct ib_udata *udata)
668669
{
669670
struct bnxt_re_pd *pd = container_of(ib_pd, struct bnxt_re_pd, ib_pd);

drivers/infiniband/hw/bnxt_re/ib_verbs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ struct ib_pd *bnxt_re_alloc_pd(struct ib_device *ibdev,
169169
int bnxt_re_dealloc_pd(struct ib_pd *pd);
170170
struct ib_ah *bnxt_re_create_ah(struct ib_pd *pd,
171171
struct rdma_ah_attr *ah_attr,
172+
u32 flags,
172173
struct ib_udata *udata);
173174
int bnxt_re_modify_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
174175
int bnxt_re_query_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);

drivers/infiniband/hw/hfi1/mad.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ static struct ib_ah *hfi1_create_qp0_ah(struct hfi1_ibport *ibp, u32 dlid)
305305
rcu_read_lock();
306306
qp0 = rcu_dereference(ibp->rvp.qp[0]);
307307
if (qp0)
308-
ah = rdma_create_ah(qp0->ibqp.pd, &attr);
308+
ah = rdma_create_ah(qp0->ibqp.pd, &attr, 0);
309309
rcu_read_unlock();
310310
return ah;
311311
}

drivers/infiniband/hw/hns/hns_roce_ah.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141

4242
struct ib_ah *hns_roce_create_ah(struct ib_pd *ibpd,
4343
struct rdma_ah_attr *ah_attr,
44+
u32 flags,
4445
struct ib_udata *udata)
4546
{
4647
struct hns_roce_dev *hr_dev = to_hr_dev(ibpd->device);

drivers/infiniband/hw/hns/hns_roce_device.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,6 +1056,7 @@ void hns_roce_bitmap_free_range(struct hns_roce_bitmap *bitmap,
10561056

10571057
struct ib_ah *hns_roce_create_ah(struct ib_pd *pd,
10581058
struct rdma_ah_attr *ah_attr,
1059+
u32 flags,
10591060
struct ib_udata *udata);
10601061
int hns_roce_query_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr);
10611062
int hns_roce_destroy_ah(struct ib_ah *ah);

drivers/infiniband/hw/mlx4/ah.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd,
144144
}
145145

146146
struct ib_ah *mlx4_ib_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
147-
struct ib_udata *udata)
147+
u32 flags, struct ib_udata *udata)
148148

149149
{
150150
struct mlx4_ib_ah *ah;
@@ -189,7 +189,7 @@ struct ib_ah *mlx4_ib_create_ah_slave(struct ib_pd *pd,
189189

190190
slave_attr.grh.sgid_attr = NULL;
191191
slave_attr.grh.sgid_index = slave_sgid_index;
192-
ah = mlx4_ib_create_ah(pd, &slave_attr, NULL);
192+
ah = mlx4_ib_create_ah(pd, &slave_attr, 0, NULL);
193193
if (IS_ERR(ah))
194194
return ah;
195195

drivers/infiniband/hw/mlx4/mad.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ static void update_sm_ah(struct mlx4_ib_dev *dev, u8 port_num, u16 lid, u8 sl)
202202
rdma_ah_set_port_num(&ah_attr, port_num);
203203

204204
new_ah = rdma_create_ah(dev->send_agent[port_num - 1][0]->qp->pd,
205-
&ah_attr);
205+
&ah_attr, 0);
206206
if (IS_ERR(new_ah))
207207
return;
208208

@@ -567,7 +567,7 @@ int mlx4_ib_send_to_slave(struct mlx4_ib_dev *dev, int slave, u8 port,
567567
return -EINVAL;
568568
rdma_ah_set_grh(&attr, &dgid, 0, 0, 0, 0);
569569
}
570-
ah = rdma_create_ah(tun_ctx->pd, &attr);
570+
ah = rdma_create_ah(tun_ctx->pd, &attr, 0);
571571
if (IS_ERR(ah))
572572
return -ENOMEM;
573573

drivers/infiniband/hw/mlx4/mlx4_ib.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -754,7 +754,7 @@ void __mlx4_ib_cq_clean(struct mlx4_ib_cq *cq, u32 qpn, struct mlx4_ib_srq *srq)
754754
void mlx4_ib_cq_clean(struct mlx4_ib_cq *cq, u32 qpn, struct mlx4_ib_srq *srq);
755755

756756
struct ib_ah *mlx4_ib_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
757-
struct ib_udata *udata);
757+
u32 flags, struct ib_udata *udata);
758758
struct ib_ah *mlx4_ib_create_ah_slave(struct ib_pd *pd,
759759
struct rdma_ah_attr *ah_attr,
760760
int slave_sgid_index, u8 *s_mac,

drivers/infiniband/hw/mlx5/ah.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ static struct ib_ah *create_ib_ah(struct mlx5_ib_dev *dev,
7272
}
7373

7474
struct ib_ah *mlx5_ib_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
75-
struct ib_udata *udata)
75+
u32 flags, struct ib_udata *udata)
7676

7777
{
7878
struct mlx5_ib_ah *ah;

drivers/infiniband/hw/mlx5/mlx5_ib.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,7 @@ int mlx5_MAD_IFC(struct mlx5_ib_dev *dev, int ignore_mkey, int ignore_bkey,
10421042
u8 port, const struct ib_wc *in_wc, const struct ib_grh *in_grh,
10431043
const void *in_mad, void *response_mad);
10441044
struct ib_ah *mlx5_ib_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
1045-
struct ib_udata *udata);
1045+
u32 flags, struct ib_udata *udata);
10461046
int mlx5_ib_query_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr);
10471047
int mlx5_ib_destroy_ah(struct ib_ah *ah);
10481048
struct ib_srq *mlx5_ib_create_srq(struct ib_pd *pd,

drivers/infiniband/hw/mthca/mthca_mad.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ static void update_sm_ah(struct mthca_dev *dev,
8989
rdma_ah_set_port_num(&ah_attr, port_num);
9090

9191
new_ah = rdma_create_ah(dev->send_agent[port_num - 1][0]->qp->pd,
92-
&ah_attr);
92+
&ah_attr, 0);
9393
if (IS_ERR(new_ah))
9494
return;
9595

drivers/infiniband/hw/mthca/mthca_provider.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,7 @@ static int mthca_dealloc_pd(struct ib_pd *pd)
412412

413413
static struct ib_ah *mthca_ah_create(struct ib_pd *pd,
414414
struct rdma_ah_attr *ah_attr,
415+
u32 flags,
415416
struct ib_udata *udata)
416417

417418
{

drivers/infiniband/hw/ocrdma/ocrdma_ah.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ static inline int set_av_attr(struct ocrdma_dev *dev, struct ocrdma_ah *ah,
157157
}
158158

159159
struct ib_ah *ocrdma_create_ah(struct ib_pd *ibpd, struct rdma_ah_attr *attr,
160-
struct ib_udata *udata)
160+
u32 flags, struct ib_udata *udata)
161161
{
162162
u32 *ahid_addr;
163163
int status;

drivers/infiniband/hw/ocrdma/ocrdma_ah.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ enum {
5252
};
5353

5454
struct ib_ah *ocrdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
55-
struct ib_udata *udata);
55+
u32 flags, struct ib_udata *udata);
5656
int ocrdma_destroy_ah(struct ib_ah *ah);
5757
int ocrdma_query_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
5858

drivers/infiniband/hw/qedr/verbs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2615,7 +2615,7 @@ int qedr_destroy_qp(struct ib_qp *ibqp)
26152615
}
26162616

26172617
struct ib_ah *qedr_create_ah(struct ib_pd *ibpd, struct rdma_ah_attr *attr,
2618-
struct ib_udata *udata)
2618+
u32 flags, struct ib_udata *udata)
26192619
{
26202620
struct qedr_ah *ah;
26212621

drivers/infiniband/hw/qedr/verbs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ int qedr_destroy_srq(struct ib_srq *ibsrq);
7676
int qedr_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr,
7777
const struct ib_recv_wr **bad_recv_wr);
7878
struct ib_ah *qedr_create_ah(struct ib_pd *ibpd, struct rdma_ah_attr *attr,
79-
struct ib_udata *udata);
79+
u32 flags, struct ib_udata *udata);
8080
int qedr_destroy_ah(struct ib_ah *ibah);
8181

8282
int qedr_dereg_mr(struct ib_mr *);

drivers/infiniband/hw/qib/qib_verbs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1362,7 +1362,7 @@ struct ib_ah *qib_create_qp0_ah(struct qib_ibport *ibp, u16 dlid)
13621362
rcu_read_lock();
13631363
qp0 = rcu_dereference(ibp->rvp.qp[0]);
13641364
if (qp0)
1365-
ah = rdma_create_ah(qp0->ibqp.pd, &attr);
1365+
ah = rdma_create_ah(qp0->ibqp.pd, &attr, 0);
13661366
rcu_read_unlock();
13671367
return ah;
13681368
}

drivers/infiniband/hw/usnic/usnic_ib_verbs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,7 @@ int usnic_ib_mmap(struct ib_ucontext *context,
760760
/* In ib callbacks section - Start of stub funcs */
761761
struct ib_ah *usnic_ib_create_ah(struct ib_pd *pd,
762762
struct rdma_ah_attr *ah_attr,
763+
u32 flags,
763764
struct ib_udata *udata)
764765

765766
{

drivers/infiniband/hw/usnic/usnic_ib_verbs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ int usnic_ib_mmap(struct ib_ucontext *context,
7777
struct vm_area_struct *vma);
7878
struct ib_ah *usnic_ib_create_ah(struct ib_pd *pd,
7979
struct rdma_ah_attr *ah_attr,
80+
u32 flags,
8081
struct ib_udata *udata);
8182

8283
int usnic_ib_destroy_ah(struct ib_ah *ah);

drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,11 +533,12 @@ int pvrdma_dealloc_pd(struct ib_pd *pd)
533533
* @pd: the protection domain
534534
* @ah_attr: the attributes of the AH
535535
* @udata: user data blob
536+
* @flags: create address handle flags (see enum rdma_create_ah_flags)
536537
*
537538
* @return: the ib_ah pointer on success, otherwise errno.
538539
*/
539540
struct ib_ah *pvrdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
540-
struct ib_udata *udata)
541+
u32 flags, struct ib_udata *udata)
541542
{
542543
struct pvrdma_dev *dev = to_vdev(pd->device);
543544
struct pvrdma_ah *ah;

drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ int pvrdma_destroy_cq(struct ib_cq *cq);
420420
int pvrdma_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc);
421421
int pvrdma_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify_flags flags);
422422
struct ib_ah *pvrdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
423-
struct ib_udata *udata);
423+
u32 flags, struct ib_udata *udata);
424424
int pvrdma_destroy_ah(struct ib_ah *ah);
425425

426426
struct ib_srq *pvrdma_create_srq(struct ib_pd *pd,

drivers/infiniband/sw/rdmavt/ah.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ EXPORT_SYMBOL(rvt_check_ah);
9191
* rvt_create_ah - create an address handle
9292
* @pd: the protection domain
9393
* @ah_attr: the attributes of the AH
94+
* @create_flags: create address handle flags (see enum rdma_create_ah_flags)
9495
* @udata: pointer to user's input output buffer information.
9596
*
9697
* This may be called from interrupt context.
@@ -99,6 +100,7 @@ EXPORT_SYMBOL(rvt_check_ah);
99100
*/
100101
struct ib_ah *rvt_create_ah(struct ib_pd *pd,
101102
struct rdma_ah_attr *ah_attr,
103+
u32 create_flags,
102104
struct ib_udata *udata)
103105
{
104106
struct rvt_ah *ah;

drivers/infiniband/sw/rdmavt/ah.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252

5353
struct ib_ah *rvt_create_ah(struct ib_pd *pd,
5454
struct rdma_ah_attr *ah_attr,
55+
u32 create_flags,
5556
struct ib_udata *udata);
5657
int rvt_destroy_ah(struct ib_ah *ibah);
5758
int rvt_modify_ah(struct ib_ah *ibah, struct rdma_ah_attr *ah_attr);

drivers/infiniband/sw/rxe/rxe_verbs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ static void rxe_init_av(struct rxe_dev *rxe, struct rdma_ah_attr *attr,
219219

220220
static struct ib_ah *rxe_create_ah(struct ib_pd *ibpd,
221221
struct rdma_ah_attr *attr,
222+
u32 flags,
222223
struct ib_udata *udata)
223224

224225
{

drivers/infiniband/ulp/ipoib/ipoib_ib.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ struct ipoib_ah *ipoib_create_ah(struct net_device *dev,
6666
ah->last_send = 0;
6767
kref_init(&ah->ref);
6868

69-
vah = rdma_create_ah(pd, attr);
69+
vah = rdma_create_ah(pd, attr, RDMA_CREATE_AH_SLEEPABLE);
7070
if (IS_ERR(vah)) {
7171
kfree(ah);
7272
ah = (struct ipoib_ah *)vah;

drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -777,7 +777,7 @@ void opa_vnic_vema_send_trap(struct opa_vnic_adapter *adapter,
777777
}
778778

779779
rdma_ah_set_dlid(&ah_attr, trap_lid);
780-
ah = rdma_create_ah(port->mad_agent->qp->pd, &ah_attr);
780+
ah = rdma_create_ah(port->mad_agent->qp->pd, &ah_attr, 0);
781781
if (IS_ERR(ah)) {
782782
c_err("%s:Couldn't create new AH = %p\n", __func__, ah);
783783
c_err("%s:dlid = %d, sl = %d, port = %d\n", __func__,

include/rdma/ib_verbs.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2377,7 +2377,7 @@ struct ib_device_ops {
23772377
struct ib_udata *udata);
23782378
int (*dealloc_pd)(struct ib_pd *pd);
23792379
struct ib_ah *(*create_ah)(struct ib_pd *pd,
2380-
struct rdma_ah_attr *ah_attr,
2380+
struct rdma_ah_attr *ah_attr, u32 flags,
23812381
struct ib_udata *udata);
23822382
int (*modify_ah)(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
23832383
int (*query_ah)(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
@@ -3151,15 +3151,22 @@ struct ib_pd *__ib_alloc_pd(struct ib_device *device, unsigned int flags,
31513151
__ib_alloc_pd((device), (flags), KBUILD_MODNAME)
31523152
void ib_dealloc_pd(struct ib_pd *pd);
31533153

3154+
enum rdma_create_ah_flags {
3155+
/* In a sleepable context */
3156+
RDMA_CREATE_AH_SLEEPABLE = BIT(0),
3157+
};
3158+
31543159
/**
31553160
* rdma_create_ah - Creates an address handle for the given address vector.
31563161
* @pd: The protection domain associated with the address handle.
31573162
* @ah_attr: The attributes of the address vector.
3163+
* @flags: Create address handle flags (see enum rdma_create_ah_flags).
31583164
*
31593165
* The address handle is used to reference a local or global destination
31603166
* in all UD QP post sends.
31613167
*/
3162-
struct ib_ah *rdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr);
3168+
struct ib_ah *rdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
3169+
u32 flags);
31633170

31643171
/**
31653172
* rdma_create_user_ah - Creates an address handle for the given address vector.

0 commit comments

Comments
 (0)