RDMA, core and ULPs: Declare ib_post_send() and ib_post_recv() arguments const
Since neither ib_post_send() nor ib_post_recv() modify the data structure their second argument points at, declare that argument const. This change makes it necessary to declare the 'bad_wr' argument const too and also to modify all ULPs that call ib_post_send(), ib_post_recv() or ib_post_srq_recv(). This patch does not change any functionality but makes it possible for the compiler to verify whether the ib_post_(send|recv|srq_recv) really do not modify the posted work request. To make this possible, only one cast had to be introduce that casts away constness, namely in rpcrdma_post_recvs(). The only way I can think of to avoid that cast is to introduce an additional loop in that function or to change the data type of bad_wr from struct ib_recv_wr ** into int (an index that refers to an element in the work request list). However, both approaches would require even more extensive changes than this patch. Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> Reviewed-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Tento commit je obsažen v:

odevzdal
Jason Gunthorpe

rodič
7bb1fafc2f
revize
d34ac5cd3a
@@ -2166,8 +2166,8 @@ static void ocrdma_ring_sq_db(struct ocrdma_qp *qp)
|
||||
iowrite32(val, qp->sq_db);
|
||||
}
|
||||
|
||||
int ocrdma_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
|
||||
struct ib_send_wr **bad_wr)
|
||||
int ocrdma_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr,
|
||||
const struct ib_send_wr **bad_wr)
|
||||
{
|
||||
int status = 0;
|
||||
struct ocrdma_qp *qp = get_ocrdma_qp(ibqp);
|
||||
@@ -2278,8 +2278,8 @@ static void ocrdma_ring_rq_db(struct ocrdma_qp *qp)
|
||||
iowrite32(val, qp->rq_db);
|
||||
}
|
||||
|
||||
static void ocrdma_build_rqe(struct ocrdma_hdr_wqe *rqe, struct ib_recv_wr *wr,
|
||||
u16 tag)
|
||||
static void ocrdma_build_rqe(struct ocrdma_hdr_wqe *rqe,
|
||||
const struct ib_recv_wr *wr, u16 tag)
|
||||
{
|
||||
u32 wqe_size = 0;
|
||||
struct ocrdma_sge *sge;
|
||||
@@ -2299,8 +2299,8 @@ static void ocrdma_build_rqe(struct ocrdma_hdr_wqe *rqe, struct ib_recv_wr *wr,
|
||||
ocrdma_cpu_to_le32(rqe, wqe_size);
|
||||
}
|
||||
|
||||
int ocrdma_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *wr,
|
||||
struct ib_recv_wr **bad_wr)
|
||||
int ocrdma_post_recv(struct ib_qp *ibqp, const struct ib_recv_wr *wr,
|
||||
const struct ib_recv_wr **bad_wr)
|
||||
{
|
||||
int status = 0;
|
||||
unsigned long flags;
|
||||
@@ -2369,8 +2369,8 @@ static void ocrdma_ring_srq_db(struct ocrdma_srq *srq)
|
||||
iowrite32(val, srq->db + OCRDMA_DB_GEN2_SRQ_OFFSET);
|
||||
}
|
||||
|
||||
int ocrdma_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
|
||||
struct ib_recv_wr **bad_wr)
|
||||
int ocrdma_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr,
|
||||
const struct ib_recv_wr **bad_wr)
|
||||
{
|
||||
int status = 0;
|
||||
unsigned long flags;
|
||||
|
@@ -43,10 +43,10 @@
|
||||
#ifndef __OCRDMA_VERBS_H__
|
||||
#define __OCRDMA_VERBS_H__
|
||||
|
||||
int ocrdma_post_send(struct ib_qp *, struct ib_send_wr *,
|
||||
struct ib_send_wr **bad_wr);
|
||||
int ocrdma_post_recv(struct ib_qp *, struct ib_recv_wr *,
|
||||
struct ib_recv_wr **bad_wr);
|
||||
int ocrdma_post_send(struct ib_qp *, const struct ib_send_wr *,
|
||||
const struct ib_send_wr **bad_wr);
|
||||
int ocrdma_post_recv(struct ib_qp *, const struct ib_recv_wr *,
|
||||
const struct ib_recv_wr **bad_wr);
|
||||
|
||||
int ocrdma_poll_cq(struct ib_cq *, int num_entries, struct ib_wc *wc);
|
||||
int ocrdma_arm_cq(struct ib_cq *, enum ib_cq_notify_flags flags);
|
||||
@@ -100,8 +100,8 @@ int ocrdma_modify_srq(struct ib_srq *, struct ib_srq_attr *,
|
||||
enum ib_srq_attr_mask, struct ib_udata *);
|
||||
int ocrdma_query_srq(struct ib_srq *, struct ib_srq_attr *);
|
||||
int ocrdma_destroy_srq(struct ib_srq *);
|
||||
int ocrdma_post_srq_recv(struct ib_srq *, struct ib_recv_wr *,
|
||||
struct ib_recv_wr **bad_recv_wr);
|
||||
int ocrdma_post_srq_recv(struct ib_srq *, const struct ib_recv_wr *,
|
||||
const struct ib_recv_wr **bad_recv_wr);
|
||||
|
||||
int ocrdma_dereg_mr(struct ib_mr *);
|
||||
struct ib_mr *ocrdma_get_dma_mr(struct ib_pd *, int acc);
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele