On Tue, Feb 13, 2024 at 11:07:13AM +0100, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@xxxxxxxx> > > 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@xxxxxxxx> > --- > 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 >