diff options
Diffstat (limited to 'drivers/net/cnic.c')
-rw-r--r-- | drivers/net/cnic.c | 10 |
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 | ||
975 | static int cnic_init_uio(struct cnic_dev *dev) | 981 | static int cnic_init_uio(struct cnic_dev *dev) |