Commit c06c0462 authored by Michael Chan's avatar Michael Chan Committed by David S. Miller
Browse files

cnic: Add cnic_free_uio()



to free all UIO related structures.

Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fdf24086
Loading
Loading
Loading
Loading
+27 −10
Original line number Diff line number Diff line
@@ -770,20 +770,15 @@ static void cnic_free_context(struct cnic_dev *dev)
	}
}

static void cnic_free_resc(struct cnic_dev *dev)
static void __cnic_free_uio(struct cnic_dev *dev)
{
	struct cnic_local *cp = dev->cnic_priv;
	int i = 0;

	if (cp->cnic_uinfo) {
		while (cp->uio_dev != -1 && i < 15) {
			msleep(100);
			i++;
		}
	if (cp->cnic_uinfo)
		uio_unregister_device(cp->cnic_uinfo);

	kfree(cp->cnic_uinfo);
	cp->cnic_uinfo = NULL;
	}

	if (cp->l2_buf) {
		dma_free_coherent(&dev->pcidev->dev, cp->l2_buf_size,
@@ -796,6 +791,28 @@ static void cnic_free_resc(struct cnic_dev *dev)
				  cp->l2_ring, cp->l2_ring_map);
		cp->l2_ring = NULL;
	}
}

static void cnic_free_uio(struct cnic_dev *dev)
{
	if (!dev)
		return;

	__cnic_free_uio(dev);
}

static void cnic_free_resc(struct cnic_dev *dev)
{
	struct cnic_local *cp = dev->cnic_priv;
	int i = 0;

	if (cp->cnic_uinfo) {
		while (cp->uio_dev != -1 && i < 15) {
			msleep(100);
			i++;
		}
		cnic_free_uio(dev);
	}

	cnic_free_context(dev);
	kfree(cp->ctx_arr);