cnic: Don't take cnic_dev_lock in cnic_alloc_uio_rings()
authorMichael Chan <mchan@broadcom.com>
Tue, 3 Jun 2014 06:08:47 +0000 (23:08 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 3 Jun 2014 06:16:41 +0000 (23:16 -0700)
We are allocating memory with GFP_KERNEL under spinlock.  Since this is
the only call manipulating the cnic_udev_list and it is always under
rtnl_lock, cnic_dev_lock can be safely removed.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/cnic.c

index a0aae722ffcfe2734549d4b97262aa1543a72d17..8da1060f03f023d9b0cfabd59579c01beaab85ad 100644 (file)
@@ -1039,21 +1039,17 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)
        struct cnic_local *cp = dev->cnic_priv;
        struct cnic_uio_dev *udev;
 
-       read_lock(&cnic_dev_lock);
        list_for_each_entry(udev, &cnic_udev_list, list) {
                if (udev->pdev == dev->pcidev) {
                        udev->dev = dev;
                        if (__cnic_alloc_uio_rings(udev, pages)) {
                                udev->dev = NULL;
-                               read_unlock(&cnic_dev_lock);
                                return -ENOMEM;
                        }
                        cp->udev = udev;
-                       read_unlock(&cnic_dev_lock);
                        return 0;
                }
        }
-       read_unlock(&cnic_dev_lock);
 
        udev = kzalloc(sizeof(struct cnic_uio_dev), GFP_ATOMIC);
        if (!udev)
@@ -1067,9 +1063,7 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)
        if (__cnic_alloc_uio_rings(udev, pages))
                goto err_udev;
 
-       write_lock(&cnic_dev_lock);
        list_add(&udev->list, &cnic_udev_list);
-       write_unlock(&cnic_dev_lock);
 
        pci_dev_get(udev->pdev);