> -----Original Message----- > From: Guoqing Jiang <guoqing.jiang@xxxxxxxxx> > Sent: Monday, October 9, 2023 9:18 AM > To: Bernard Metzler <BMT@xxxxxxxxxxxxxx>; jgg@xxxxxxxx; leon@xxxxxxxxxx > Cc: linux-rdma@xxxxxxxxxxxxxxx > Subject: [EXTERNAL] [PATCH 16/19] RDMA/siw: Remove siw_sk_assign_cm_upcalls > > Let's move it into siw_sk_save_upcalls, then we only need to > get sk_callback_lock once. Also rename siw_sk_save_upcalls > to better align with the new code. > > Signed-off-by: Guoqing Jiang <guoqing.jiang@xxxxxxxxx> > --- > drivers/infiniband/sw/siw/siw_cm.c | 19 ++++++------------- > 1 file changed, 6 insertions(+), 13 deletions(-) > > diff --git a/drivers/infiniband/sw/siw/siw_cm.c > b/drivers/infiniband/sw/siw/siw_cm.c > index c3aa5533e75d..6866ec80473c 100644 > --- a/drivers/infiniband/sw/siw/siw_cm.c > +++ b/drivers/infiniband/sw/siw/siw_cm.c > @@ -39,17 +39,7 @@ static void siw_cm_llp_error_report(struct sock *s); > static int siw_cm_upcall(struct siw_cep *cep, enum iw_cm_event_type > reason, > int status); > > -static void siw_sk_assign_cm_upcalls(struct sock *sk) > -{ > - write_lock_bh(&sk->sk_callback_lock); > - sk->sk_state_change = siw_cm_llp_state_change; > - sk->sk_data_ready = siw_cm_llp_data_ready; > - sk->sk_write_space = siw_cm_llp_write_space; > - sk->sk_error_report = siw_cm_llp_error_report; > - write_unlock_bh(&sk->sk_callback_lock); > -} > - > -static void siw_sk_save_upcalls(struct sock *sk) To simplify, I'd suggest doing it the other way around, so having siw_sk_assign_cm_upcalls() including the functionality of siw_sk_save_upcalls() first. There is another function siw_sk_assign_rtr_upcalls(), which re-assigns the upcalls for special handling of an explicit RTR->RTS handshake if requested later during connection setup. > +static void siw_sk_save_and_assign_upcalls(struct sock *sk) > { > struct siw_cep *cep = sk_to_cep(sk); > > @@ -58,6 +48,10 @@ static void siw_sk_save_upcalls(struct sock *sk) > cep->sk_data_ready = sk->sk_data_ready; > cep->sk_write_space = sk->sk_write_space; > cep->sk_error_report = sk->sk_error_report; > + sk->sk_state_change = siw_cm_llp_state_change; > + sk->sk_data_ready = siw_cm_llp_data_ready; > + sk->sk_write_space = siw_cm_llp_write_space; > + sk->sk_error_report = siw_cm_llp_error_report; > write_unlock_bh(&sk->sk_callback_lock); > } > > @@ -156,8 +150,7 @@ static void siw_cep_socket_assoc(struct siw_cep *cep, > struct socket *s) > siw_cep_get(cep); > s->sk->sk_user_data = cep; > > - siw_sk_save_upcalls(s->sk); > - siw_sk_assign_cm_upcalls(s->sk); > + siw_sk_save_and_assign_upcalls(s->sk); > } > > static struct siw_cep *siw_cep_alloc(struct siw_device *sdev) > -- > 2.35.3