The driver is relying on zero'ed allocated memory and does not
explicitly call atomic_set() to initialize the ref counts to 0.  Add
these atomic_set() calls so that it will be more straight forward
to convert atomic ref counts to refcount_t.

Reported-by: Chuhong Yuan <hsleste...@gmail.com>
Cc: Rasesh Mody <rm...@marvell.com>
Cc: <gr-linux-nic-...@marvell.com>
Signed-off-by: Michael Chan <michael.c...@broadcom.com>
---
 drivers/net/ethernet/broadcom/cnic.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/ethernet/broadcom/cnic.c 
b/drivers/net/ethernet/broadcom/cnic.c
index 57dc3cb..155599d 100644
--- a/drivers/net/ethernet/broadcom/cnic.c
+++ b/drivers/net/ethernet/broadcom/cnic.c
@@ -4096,12 +4096,16 @@ static int cnic_cm_alloc_mem(struct cnic_dev *dev)
 {
        struct cnic_local *cp = dev->cnic_priv;
        u32 port_id;
+       int i;
 
        cp->csk_tbl = kvcalloc(MAX_CM_SK_TBL_SZ, sizeof(struct cnic_sock),
                               GFP_KERNEL);
        if (!cp->csk_tbl)
                return -ENOMEM;
 
+       for (i = 0; i < MAX_CM_SK_TBL_SZ; i++)
+               atomic_set(&cp->csk_tbl[i].ref_count, 0);
+
        port_id = prandom_u32();
        port_id %= CNIC_LOCAL_PORT_RANGE;
        if (cnic_init_id_tbl(&cp->csk_port_tbl, CNIC_LOCAL_PORT_RANGE,
@@ -5480,6 +5484,7 @@ static struct cnic_dev *cnic_alloc_dev(struct net_device 
*dev,
        cdev->unregister_device = cnic_unregister_device;
        cdev->iscsi_nl_msg_recv = cnic_iscsi_nl_msg_recv;
        cdev->get_fc_npiv_tbl = cnic_get_fc_npiv_tbl;
+       atomic_set(&cdev->ref_count, 0);
 
        cp = cdev->cnic_priv;
        cp->dev = cdev;
-- 
2.5.1

Reply via email to