refcount_t is better for reference counters since its
implementation can prevent overflows.
So convert atomic_t ref counters to refcount_t.

Signed-off-by: Chuhong Yuan <hsleste...@gmail.com>
---
 drivers/net/ethernet/broadcom/cnic.c    | 26 ++++++++++++-------------
 drivers/net/ethernet/broadcom/cnic_if.h |  6 +++---
 2 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/cnic.c 
b/drivers/net/ethernet/broadcom/cnic.c
index 57dc3cbff36e..215777d63cda 100644
--- a/drivers/net/ethernet/broadcom/cnic.c
+++ b/drivers/net/ethernet/broadcom/cnic.c
@@ -141,22 +141,22 @@ static int cnic_uio_close(struct uio_info *uinfo, struct 
inode *inode)
 
 static inline void cnic_hold(struct cnic_dev *dev)
 {
-       atomic_inc(&dev->ref_count);
+       refcount_inc(&dev->ref_count);
 }
 
 static inline void cnic_put(struct cnic_dev *dev)
 {
-       atomic_dec(&dev->ref_count);
+       refcount_dec(&dev->ref_count);
 }
 
 static inline void csk_hold(struct cnic_sock *csk)
 {
-       atomic_inc(&csk->ref_count);
+       refcount_inc(&csk->ref_count);
 }
 
 static inline void csk_put(struct cnic_sock *csk)
 {
-       atomic_dec(&csk->ref_count);
+       refcount_dec(&csk->ref_count);
 }
 
 static struct cnic_dev *cnic_from_netdev(struct net_device *netdev)
@@ -177,12 +177,12 @@ static struct cnic_dev *cnic_from_netdev(struct 
net_device *netdev)
 
 static inline void ulp_get(struct cnic_ulp_ops *ulp_ops)
 {
-       atomic_inc(&ulp_ops->ref_count);
+       refcount_inc(&ulp_ops->ref_count);
 }
 
 static inline void ulp_put(struct cnic_ulp_ops *ulp_ops)
 {
-       atomic_dec(&ulp_ops->ref_count);
+       refcount_dec(&ulp_ops->ref_count);
 }
 
 static void cnic_ctx_wr(struct cnic_dev *dev, u32 cid_addr, u32 off, u32 val)
@@ -494,7 +494,7 @@ int cnic_register_driver(int ulp_type, struct cnic_ulp_ops 
*ulp_ops)
        }
        read_unlock(&cnic_dev_lock);
 
-       atomic_set(&ulp_ops->ref_count, 0);
+       refcount_set(&ulp_ops->ref_count, 0);
        rcu_assign_pointer(cnic_ulp_tbl[ulp_type], ulp_ops);
        mutex_unlock(&cnic_lock);
 
@@ -545,12 +545,12 @@ int cnic_unregister_driver(int ulp_type)
 
        mutex_unlock(&cnic_lock);
        synchronize_rcu();
-       while ((atomic_read(&ulp_ops->ref_count) != 0) && (i < 20)) {
+       while ((refcount_read(&ulp_ops->ref_count) != 0) && (i < 20)) {
                msleep(100);
                i++;
        }
 
-       if (atomic_read(&ulp_ops->ref_count) != 0)
+       if (refcount_read(&ulp_ops->ref_count) != 0)
                pr_warn("%s: Failed waiting for ref count to go to zero\n",
                        __func__);
        return 0;
@@ -3596,7 +3596,7 @@ static int cnic_cm_create(struct cnic_dev *dev, int 
ulp_type, u32 cid,
        }
 
        csk1 = &cp->csk_tbl[l5_cid];
-       if (atomic_read(&csk1->ref_count))
+       if (refcount_read(&csk1->ref_count))
                return -EAGAIN;
 
        if (test_and_set_bit(SK_F_INUSE, &csk1->flags))
@@ -3651,7 +3651,7 @@ static int cnic_cm_destroy(struct cnic_sock *csk)
        csk_hold(csk);
        clear_bit(SK_F_INUSE, &csk->flags);
        smp_mb__after_atomic();
-       while (atomic_read(&csk->ref_count) != 1)
+       while (refcount_read(&csk->ref_count) != 1)
                msleep(1);
        cnic_cm_cleanup(csk);
 
@@ -5432,11 +5432,11 @@ static void cnic_free_dev(struct cnic_dev *dev)
 {
        int i = 0;
 
-       while ((atomic_read(&dev->ref_count) != 0) && i < 10) {
+       while ((refcount_read(&dev->ref_count) != 0) && i < 10) {
                msleep(100);
                i++;
        }
-       if (atomic_read(&dev->ref_count) != 0)
+       if (refcount_read(&dev->ref_count) != 0)
                netdev_err(dev->netdev, "Failed waiting for ref count to go to 
zero\n");
 
        netdev_info(dev->netdev, "Removed CNIC device\n");
diff --git a/drivers/net/ethernet/broadcom/cnic_if.h 
b/drivers/net/ethernet/broadcom/cnic_if.h
index 789e5c7e9311..5232a05ac7ba 100644
--- a/drivers/net/ethernet/broadcom/cnic_if.h
+++ b/drivers/net/ethernet/broadcom/cnic_if.h
@@ -300,7 +300,7 @@ struct cnic_sock {
 #define SK_F_CLOSING           7
 #define SK_F_HW_ERR            8
 
-       atomic_t ref_count;
+       refcount_t ref_count;
        u32 state;
        struct kwqe kwqe1;
        struct kwqe kwqe2;
@@ -335,7 +335,7 @@ struct cnic_dev {
 #define CNIC_F_CNIC_UP         1
 #define CNIC_F_BNX2_CLASS      3
 #define CNIC_F_BNX2X_CLASS     4
-       atomic_t        ref_count;
+       refcount_t      ref_count;
        u8              mac_addr[ETH_ALEN];
 
        int             max_iscsi_conn;
@@ -378,7 +378,7 @@ struct cnic_ulp_ops {
                                  char *data, u16 data_size);
        int (*cnic_get_stats)(void *ulp_ctx);
        struct module *owner;
-       atomic_t ref_count;
+       refcount_t ref_count;
 };
 
 int cnic_register_driver(int ulp_type, struct cnic_ulp_ops *ulp_ops);
-- 
2.20.1

Reply via email to