Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd311f1e authored by Intiyaz Basha's avatar Intiyaz Basha Committed by David S. Miller
Browse files

liquidio: Moved common function delete_glists to lio_core.c



Moved common function delete_glists to lio_core.c
and renamed it to lio_delete_glists

Signed-off-by: default avatarIntiyaz Basha <intiyaz.basha@cavium.com>
Acked-by: default avatarDerek Chickles <derek.chickles@cavium.com>
Signed-off-by: default avatarFelix Manlunas <felix.manlunas@cavium.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 85a0cd81
Loading
Loading
Loading
Loading
+41 −0
Original line number Diff line number Diff line
@@ -61,6 +61,47 @@ void lio_if_cfg_callback(struct octeon_device *oct,
	wake_up_interruptible(&ctx->wc);
}

/**
 * \brief Delete gather lists
 * @param lio per-network private data
 */
void lio_delete_glists(struct lio *lio)
{
	struct octnic_gather *g;
	int i;

	kfree(lio->glist_lock);
	lio->glist_lock = NULL;

	if (!lio->glist)
		return;

	for (i = 0; i < lio->linfo.num_txpciq; i++) {
		do {
			g = (struct octnic_gather *)
			    lio_list_delete_head(&lio->glist[i]);
			kfree(g);
		} while (g);

		if (lio->glists_virt_base && lio->glists_virt_base[i] &&
		    lio->glists_dma_base && lio->glists_dma_base[i]) {
			lio_dma_free(lio->oct_dev,
				     lio->glist_entry_size * lio->tx_qsize,
				     lio->glists_virt_base[i],
				     lio->glists_dma_base[i]);
		}
	}

	kfree(lio->glists_virt_base);
	lio->glists_virt_base = NULL;

	kfree(lio->glists_dma_base);
	lio->glists_dma_base = NULL;

	kfree(lio->glist);
	lio->glist = NULL;
}

int liquidio_set_feature(struct net_device *netdev, int cmd, u16 param1)
{
	struct lio *lio = GET_LIO(netdev);
+4 −46
Original line number Diff line number Diff line
@@ -541,48 +541,6 @@ static inline int check_txq_status(struct lio *lio)
	return ret_val;
}

/**
 * \brief Delete gather lists
 * @param lio per-network private data
 */
static void delete_glists(struct lio *lio)
{
	struct octnic_gather *g;
	int i;

	kfree(lio->glist_lock);
	lio->glist_lock = NULL;

	if (!lio->glist)
		return;

	for (i = 0; i < lio->linfo.num_txpciq; i++) {
		do {
			g = (struct octnic_gather *)
				lio_list_delete_head(&lio->glist[i]);
			if (g)
				kfree(g);
		} while (g);

		if (lio->glists_virt_base && lio->glists_virt_base[i] &&
		    lio->glists_dma_base && lio->glists_dma_base[i]) {
			lio_dma_free(lio->oct_dev,
				     lio->glist_entry_size * lio->tx_qsize,
				     lio->glists_virt_base[i],
				     lio->glists_dma_base[i]);
		}
	}

	kfree(lio->glists_virt_base);
	lio->glists_virt_base = NULL;

	kfree(lio->glists_dma_base);
	lio->glists_dma_base = NULL;

	kfree(lio->glist);
	lio->glist = NULL;
}

/**
 * \brief Setup gather lists
 * @param lio per-network private data
@@ -617,7 +575,7 @@ static int setup_glists(struct octeon_device *oct, struct lio *lio, int num_iqs)
				       GFP_KERNEL);

	if (!lio->glists_virt_base || !lio->glists_dma_base) {
		delete_glists(lio);
		lio_delete_glists(lio);
		return -ENOMEM;
	}

@@ -634,7 +592,7 @@ static int setup_glists(struct octeon_device *oct, struct lio *lio, int num_iqs)
				      &lio->glists_dma_base[i]);

		if (!lio->glists_virt_base[i]) {
			delete_glists(lio);
			lio_delete_glists(lio);
			return -ENOMEM;
		}

@@ -656,7 +614,7 @@ static int setup_glists(struct octeon_device *oct, struct lio *lio, int num_iqs)
		}

		if (j != lio->tx_qsize) {
			delete_glists(lio);
			lio_delete_glists(lio);
			return -ENOMEM;
		}
	}
@@ -1452,7 +1410,7 @@ static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx)

	cleanup_rx_oom_poll_fn(netdev);

	delete_glists(lio);
	lio_delete_glists(lio);

	free_netdev(netdev);

+4 −45
Original line number Diff line number Diff line
@@ -284,47 +284,6 @@ static struct pci_driver liquidio_vf_pci_driver = {
	.err_handler	= &liquidio_vf_err_handler,    /* For AER */
};

/**
 * \brief Delete gather lists
 * @param lio per-network private data
 */
static void delete_glists(struct lio *lio)
{
	struct octnic_gather *g;
	int i;

	kfree(lio->glist_lock);
	lio->glist_lock = NULL;

	if (!lio->glist)
		return;

	for (i = 0; i < lio->linfo.num_txpciq; i++) {
		do {
			g = (struct octnic_gather *)
			    lio_list_delete_head(&lio->glist[i]);
			kfree(g);
		} while (g);

		if (lio->glists_virt_base && lio->glists_virt_base[i] &&
		    lio->glists_dma_base && lio->glists_dma_base[i]) {
			lio_dma_free(lio->oct_dev,
				     lio->glist_entry_size * lio->tx_qsize,
				     lio->glists_virt_base[i],
				     lio->glists_dma_base[i]);
		}
	}

	kfree(lio->glists_virt_base);
	lio->glists_virt_base = NULL;

	kfree(lio->glists_dma_base);
	lio->glists_dma_base = NULL;

	kfree(lio->glist);
	lio->glist = NULL;
}

/**
 * \brief Setup gather lists
 * @param lio per-network private data
@@ -359,7 +318,7 @@ static int setup_glists(struct lio *lio, int num_iqs)
				       GFP_KERNEL);

	if (!lio->glists_virt_base || !lio->glists_dma_base) {
		delete_glists(lio);
		lio_delete_glists(lio);
		return -ENOMEM;
	}

@@ -374,7 +333,7 @@ static int setup_glists(struct lio *lio, int num_iqs)
				      &lio->glists_dma_base[i]);

		if (!lio->glists_virt_base[i]) {
			delete_glists(lio);
			lio_delete_glists(lio);
			return -ENOMEM;
		}

@@ -393,7 +352,7 @@ static int setup_glists(struct lio *lio, int num_iqs)
		}

		if (j != lio->tx_qsize) {
			delete_glists(lio);
			lio_delete_glists(lio);
			return -ENOMEM;
		}
	}
@@ -837,7 +796,7 @@ static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx)

	cleanup_link_status_change_wq(netdev);

	delete_glists(lio);
	lio_delete_glists(lio);

	free_netdev(netdev);

+2 −0
Original line number Diff line number Diff line
@@ -203,6 +203,8 @@ void lio_if_cfg_callback(struct octeon_device *oct,
			 u32 status __attribute__((unused)),
			 void *buf);

void lio_delete_glists(struct lio *lio);

/**
 * \brief Net device change_mtu
 * @param netdev network device