Message ID | 20231203193307.542794-30-yury.norov@gmail.com (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | bitops: add atomic find_bit() operations | expand |
On 03.12.23 20:33, Yury Norov wrote: > The function opencodes find_and_set_bit() with a for_each() loop. Use > it, and make the whole function a simple almost one-liner. > > While here, drop explicit initialization of *idx, because it's already > initialized by the caller in case of ENOLINK, or set properly with > ->wr_tx_mask, if nothing is found, in case of EBUSY. > > CC: Tony Lu <tonylu@linux.alibaba.com> > CC: Alexandra Winter <wintera@linux.ibm.com> > Signed-off-by: Yury Norov <yury.norov@gmail.com> > --- Reviewed-by: Alexandra Winter <wintera@linux.ibm.com> Thanks a lot for the great helper function! I guess the top-level maintainers will figure out, how this series best finds its way upstream.
On Mon, Dec 04, 2023 at 10:40:20AM +0100, Alexandra Winter wrote: > > > On 03.12.23 20:33, Yury Norov wrote: > > The function opencodes find_and_set_bit() with a for_each() loop. Use > > it, and make the whole function a simple almost one-liner. > > > > While here, drop explicit initialization of *idx, because it's already > > initialized by the caller in case of ENOLINK, or set properly with > > ->wr_tx_mask, if nothing is found, in case of EBUSY. > > > > CC: Tony Lu <tonylu@linux.alibaba.com> > > CC: Alexandra Winter <wintera@linux.ibm.com> > > Signed-off-by: Yury Norov <yury.norov@gmail.com> > > --- > > Reviewed-by: Alexandra Winter <wintera@linux.ibm.com> > > > Thanks a lot for the great helper function! > I guess the top-level maintainers will figure out, how this series best finds its way upstream. Thanks, Alexandra. :) People in this thread say just pick their subsystem patch together with #1. So, I'm going to send v3 with some minor tweaks, and if everything is OK, will pull all this in my bitmap-for-next branch. Thanks, Yury
diff --git a/net/smc/smc_wr.c b/net/smc/smc_wr.c index 0021065a600a..b6f0cfc52788 100644 --- a/net/smc/smc_wr.c +++ b/net/smc/smc_wr.c @@ -170,15 +170,11 @@ void smc_wr_tx_cq_handler(struct ib_cq *ib_cq, void *cq_context) static inline int smc_wr_tx_get_free_slot_index(struct smc_link *link, u32 *idx) { - *idx = link->wr_tx_cnt; if (!smc_link_sendable(link)) return -ENOLINK; - for_each_clear_bit(*idx, link->wr_tx_mask, link->wr_tx_cnt) { - if (!test_and_set_bit(*idx, link->wr_tx_mask)) - return 0; - } - *idx = link->wr_tx_cnt; - return -EBUSY; + + *idx = find_and_set_bit(link->wr_tx_mask, link->wr_tx_cnt); + return *idx < link->wr_tx_cnt ? 0 : -EBUSY; } /**
The function opencodes find_and_set_bit() with a for_each() loop. Use it, and make the whole function a simple almost one-liner. While here, drop explicit initialization of *idx, because it's already initialized by the caller in case of ENOLINK, or set properly with ->wr_tx_mask, if nothing is found, in case of EBUSY. CC: Tony Lu <tonylu@linux.alibaba.com> CC: Alexandra Winter <wintera@linux.ibm.com> Signed-off-by: Yury Norov <yury.norov@gmail.com> --- net/smc/smc_wr.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)