aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/cnic.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/cnic.c')
-rw-r--r--drivers/net/cnic.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/cnic.c b/drivers/net/cnic.c
index 6dfa56440ac0..aa5016ad9e19 100644
--- a/drivers/net/cnic.c
+++ b/drivers/net/cnic.c
@@ -951,7 +951,7 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)
951 &udev->l2_ring_map, 951 &udev->l2_ring_map,
952 GFP_KERNEL | __GFP_COMP); 952 GFP_KERNEL | __GFP_COMP);
953 if (!udev->l2_ring) 953 if (!udev->l2_ring)
954 return -ENOMEM; 954 goto err_udev;
955 955
956 udev->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size; 956 udev->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size;
957 udev->l2_buf_size = PAGE_ALIGN(udev->l2_buf_size); 957 udev->l2_buf_size = PAGE_ALIGN(udev->l2_buf_size);
@@ -959,7 +959,7 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)
959 &udev->l2_buf_map, 959 &udev->l2_buf_map,
960 GFP_KERNEL | __GFP_COMP); 960 GFP_KERNEL | __GFP_COMP);
961 if (!udev->l2_buf) 961 if (!udev->l2_buf)
962 return -ENOMEM; 962 goto err_dma;
963 963
964 write_lock(&cnic_dev_lock); 964 write_lock(&cnic_dev_lock);
965 list_add(&udev->list, &cnic_udev_list); 965 list_add(&udev->list, &cnic_udev_list);
@@ -970,6 +970,12 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)
970 cp->udev = udev; 970 cp->udev = udev;
971 971
972 return 0; 972 return 0;
973 err_dma:
974 dma_free_coherent(&udev->pdev->dev, udev->l2_ring_size,
975 udev->l2_ring, udev->l2_ring_map);
976 err_udev:
977 kfree(udev);
978 return -ENOMEM;
973} 979}
974 980
975static int cnic_init_uio(struct cnic_dev *dev) 981static int cnic_init_uio(struct cnic_dev *dev)