Message ID | 20240213100728.458348-1-arnd@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | RDMA/srpt: fix function pointer cast warnings | expand |
On 2/13/24 02:07, Arnd Bergmann wrote: > Change srpt_qp_event() to use the correct prototype and adjust the > argument inside of it. Reviewed-by: Bart Van Assche <bvanassche@acm.org>
On Tue, Feb 13, 2024 at 11:07:13AM +0100, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > clang-16 notices that srpt_qp_event() gets called through an incompatible > pointer here: > > drivers/infiniband/ulp/srpt/ib_srpt.c:1815:5: error: cast from 'void (*)(struct ib_event *, struct srpt_rdma_ch *)' to 'void (*)(struct ib_event *, void *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict] > 1815 | = (void(*)(struct ib_event *, void*))srpt_qp_event; > > Change srpt_qp_event() to use the correct prototype and adjust the > argument inside of it. > > Fixes: a42d985bd5b2 ("ib_srpt: Initial SRP Target merge for v3.3-rc1") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > drivers/infiniband/ulp/srpt/ib_srpt.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) This patch generates the following warnings, fixed and applied. ➜ kernel git:(wip/leon-for-rc) mkt ci f17a855457db (HEAD -> build) RDMA/srpt: fix function pointer cast warnings drivers/infiniband/ulp/srpt/ib_srpt.c:220: warning: Function parameter or struct member 'ptr' not described in 'srpt_qp_event' drivers/infiniband/ulp/srpt/ib_srpt.c:220: warning: Excess function parameter 'ch' description in 'srpt_qp_event' drivers/infiniband/ulp/srpt/ib_srpt.c:220: warning: Function parameter or struct member 'ptr' not described in 'srpt_qp_event' drivers/infiniband/ulp/srpt/ib_srpt.c:220: warning: Excess function parameter 'ch' description in 'srpt_qp_event' > > diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c > index 0875f197118f..942b311b6296 100644 > --- a/drivers/infiniband/ulp/srpt/ib_srpt.c > +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c > @@ -216,8 +216,10 @@ static const char *get_ch_state_name(enum rdma_ch_state s) > * @event: Description of the event that occurred. > * @ch: SRPT RDMA channel. > */ > -static void srpt_qp_event(struct ib_event *event, struct srpt_rdma_ch *ch) > +static void srpt_qp_event(struct ib_event *event, void *ptr) > { > + struct srpt_rdma_ch *ch = ptr; > + > pr_debug("QP event %d on ch=%p sess_name=%s-%d state=%s\n", > event->event, ch, ch->sess_name, ch->qp->qp_num, > get_ch_state_name(ch->state)); > @@ -1811,8 +1813,7 @@ static int srpt_create_ch_ib(struct srpt_rdma_ch *ch) > ch->cq_size = ch->rq_size + sq_size; > > qp_init->qp_context = (void *)ch; > - qp_init->event_handler > - = (void(*)(struct ib_event *, void*))srpt_qp_event; > + qp_init->event_handler = srpt_qp_event; > qp_init->send_cq = ch->cq; > qp_init->recv_cq = ch->cq; > qp_init->sq_sig_type = IB_SIGNAL_REQ_WR; > -- > 2.39.2 >
On Tue, 13 Feb 2024 11:07:13 +0100, Arnd Bergmann wrote: > clang-16 notices that srpt_qp_event() gets called through an incompatible > pointer here: > > drivers/infiniband/ulp/srpt/ib_srpt.c:1815:5: error: cast from 'void (*)(struct ib_event *, struct srpt_rdma_ch *)' to 'void (*)(struct ib_event *, void *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict] > 1815 | = (void(*)(struct ib_event *, void*))srpt_qp_event; > > Change srpt_qp_event() to use the correct prototype and adjust the > argument inside of it. > > [...] Applied, thanks! [1/1] RDMA/srpt: fix function pointer cast warnings https://git.kernel.org/rdma/rdma/c/eb5c7465c32401 Best regards,
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c index 0875f197118f..942b311b6296 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c @@ -216,8 +216,10 @@ static const char *get_ch_state_name(enum rdma_ch_state s) * @event: Description of the event that occurred. * @ch: SRPT RDMA channel. */ -static void srpt_qp_event(struct ib_event *event, struct srpt_rdma_ch *ch) +static void srpt_qp_event(struct ib_event *event, void *ptr) { + struct srpt_rdma_ch *ch = ptr; + pr_debug("QP event %d on ch=%p sess_name=%s-%d state=%s\n", event->event, ch, ch->sess_name, ch->qp->qp_num, get_ch_state_name(ch->state)); @@ -1811,8 +1813,7 @@ static int srpt_create_ch_ib(struct srpt_rdma_ch *ch) ch->cq_size = ch->rq_size + sq_size; qp_init->qp_context = (void *)ch; - qp_init->event_handler - = (void(*)(struct ib_event *, void*))srpt_qp_event; + qp_init->event_handler = srpt_qp_event; qp_init->send_cq = ch->cq; qp_init->recv_cq = ch->cq; qp_init->sq_sig_type = IB_SIGNAL_REQ_WR;