diff options
| -rw-r--r-- | drivers/scsi/qedi/qedi_main.c | 23 | 
1 files changed, 11 insertions, 12 deletions
diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c index 92775a8b74b1..997e3052a706 100644 --- a/drivers/scsi/qedi/qedi_main.c +++ b/drivers/scsi/qedi/qedi_main.c @@ -151,6 +151,11 @@ static int qedi_uio_close(struct uio_info *uinfo, struct inode *inode)  static void __qedi_free_uio_rings(struct qedi_uio_dev *udev)  { +	if (udev->uctrl) { +		free_page((unsigned long)udev->uctrl); +		udev->uctrl = NULL; +	} +  	if (udev->ll2_ring) {  		free_page((unsigned long)udev->ll2_ring);  		udev->ll2_ring = NULL; @@ -169,7 +174,6 @@ static void __qedi_free_uio(struct qedi_uio_dev *udev)  	__qedi_free_uio_rings(udev);  	pci_dev_put(udev->pdev); -	kfree(udev->uctrl);  	kfree(udev);  } @@ -208,6 +212,11 @@ static int __qedi_alloc_uio_rings(struct qedi_uio_dev *udev)  	if (udev->ll2_ring || udev->ll2_buf)  		return rc; +	/* Memory for control area.  */ +	udev->uctrl = (void *)get_zeroed_page(GFP_KERNEL); +	if (!udev->uctrl) +		return -ENOMEM; +  	/* Allocating memory for LL2 ring  */  	udev->ll2_ring_size = QEDI_PAGE_SIZE;  	udev->ll2_ring = (void *)get_zeroed_page(GFP_KERNEL | __GFP_COMP); @@ -237,7 +246,6 @@ exit_alloc_ring:  static int qedi_alloc_uio_rings(struct qedi_ctx *qedi)  {  	struct qedi_uio_dev *udev = NULL; -	struct qedi_uio_ctrl *uctrl = NULL;  	int rc = 0;  	list_for_each_entry(udev, &qedi_udev_list, list) { @@ -258,21 +266,14 @@ static int qedi_alloc_uio_rings(struct qedi_ctx *qedi)  		goto err_udev;  	} -	uctrl = kzalloc(sizeof(*uctrl), GFP_KERNEL); -	if (!uctrl) { -		rc = -ENOMEM; -		goto err_uctrl; -	} -  	udev->uio_dev = -1;  	udev->qedi = qedi;  	udev->pdev = qedi->pdev; -	udev->uctrl = uctrl;  	rc = __qedi_alloc_uio_rings(udev);  	if (rc) -		goto err_uio_rings; +		goto err_uctrl;  	list_add(&udev->list, &qedi_udev_list); @@ -283,8 +284,6 @@ static int qedi_alloc_uio_rings(struct qedi_ctx *qedi)  	udev->rx_pkt = udev->ll2_buf + LL2_SINGLE_BUF_SIZE;  	return 0; - err_uio_rings: -	kfree(uctrl);   err_uctrl:  	kfree(udev);   err_udev:  | 
