OSDN Git Service

net/smc: Use the bitmap API when applicable
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Thu, 30 Dec 2021 10:40:40 +0000 (11:40 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 30 Dec 2021 13:32:39 +0000 (13:32 +0000)
Using the bitmap API is less verbose than hand writing them.
It also improves the semantic.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/smc/smc_wr.c

index 600ab58..1b09012 100644 (file)
@@ -54,11 +54,7 @@ struct smc_wr_tx_pend {      /* control data for a pending send request */
 /* returns true if at least one tx work request is pending on the given link */
 static inline bool smc_wr_is_tx_pend(struct smc_link *link)
 {
-       if (find_first_bit(link->wr_tx_mask, link->wr_tx_cnt) !=
-                                                       link->wr_tx_cnt) {
-               return true;
-       }
-       return false;
+       return !bitmap_empty(link->wr_tx_mask, link->wr_tx_cnt);
 }
 
 /* wait till all pending tx work requests on the given link are completed */
@@ -674,9 +670,7 @@ void smc_wr_free_link(struct smc_link *lnk)
        smc_wr_wakeup_tx_wait(lnk);
 
        if (smc_wr_tx_wait_no_pending_sends(lnk))
-               memset(lnk->wr_tx_mask, 0,
-                      BITS_TO_LONGS(SMC_WR_BUF_CNT) *
-                                               sizeof(*lnk->wr_tx_mask));
+               bitmap_zero(lnk->wr_tx_mask, SMC_WR_BUF_CNT);
        wait_event(lnk->wr_reg_wait, (!atomic_read(&lnk->wr_reg_refcnt)));
        wait_event(lnk->wr_tx_wait, (!atomic_read(&lnk->wr_tx_refcnt)));
 
@@ -729,7 +723,7 @@ void smc_wr_free_link_mem(struct smc_link *lnk)
        lnk->wr_tx_compl = NULL;
        kfree(lnk->wr_tx_pends);
        lnk->wr_tx_pends = NULL;
-       kfree(lnk->wr_tx_mask);
+       bitmap_free(lnk->wr_tx_mask);
        lnk->wr_tx_mask = NULL;
        kfree(lnk->wr_tx_sges);
        lnk->wr_tx_sges = NULL;
@@ -805,9 +799,7 @@ int smc_wr_alloc_link_mem(struct smc_link *link)
                                   GFP_KERNEL);
        if (!link->wr_rx_sges)
                goto no_mem_wr_tx_sges;
-       link->wr_tx_mask = kcalloc(BITS_TO_LONGS(SMC_WR_BUF_CNT),
-                                  sizeof(*link->wr_tx_mask),
-                                  GFP_KERNEL);
+       link->wr_tx_mask = bitmap_zalloc(SMC_WR_BUF_CNT, GFP_KERNEL);
        if (!link->wr_tx_mask)
                goto no_mem_wr_rx_sges;
        link->wr_tx_pends = kcalloc(SMC_WR_BUF_CNT,
@@ -920,8 +912,7 @@ int smc_wr_create_link(struct smc_link *lnk)
                goto dma_unmap;
        }
        smc_wr_init_sge(lnk);
-       memset(lnk->wr_tx_mask, 0,
-              BITS_TO_LONGS(SMC_WR_BUF_CNT) * sizeof(*lnk->wr_tx_mask));
+       bitmap_zero(lnk->wr_tx_mask, SMC_WR_BUF_CNT);
        init_waitqueue_head(&lnk->wr_tx_wait);
        atomic_set(&lnk->wr_tx_refcnt, 0);
        init_waitqueue_head(&lnk->wr_reg_wait);