DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v2 1/6] test: remove useless memset
@ 2015-04-07 21:20 Stephen Hemminger
  2015-04-07 21:20 ` [dpdk-dev] [PATCH v2 2/6] test: remove useless check of NULL before rte_free Stephen Hemminger
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Stephen Hemminger @ 2015-04-07 21:20 UTC (permalink / raw)
  To: dev

Remove useless memset, since dev_private is created by rte_zmalloc
it must already be zero.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 app/test/virtual_pmd.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c
index f163562..39ecf80 100644
--- a/app/test/virtual_pmd.c
+++ b/app/test/virtual_pmd.c
@@ -565,8 +565,6 @@ virtual_ethdev_create(const char *name, struct ether_addr *mac_addr,
 	if (dev_private == NULL)
 		goto err;
 
-	memset(dev_private, 0, sizeof(*dev_private));
-
 	snprintf(name_buf, sizeof(name_buf), "%s_rxQ", name);
 	dev_private->rx_queue = rte_ring_create(name_buf, MAX_PKT_BURST, socket_id,
 			0);
-- 
2.1.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dpdk-dev] [PATCH v2 2/6] test: remove useless check of NULL before rte_free
  2015-04-07 21:20 [dpdk-dev] [PATCH v2 1/6] test: remove useless memset Stephen Hemminger
@ 2015-04-07 21:20 ` Stephen Hemminger
  2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 3/6] examples: get rid of unneeded null checks " Stephen Hemminger
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2015-04-07 21:20 UTC (permalink / raw)
  To: dev

rte_free like Glibc free allows rte_free(NULL) as null operation.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 app/test/test_hash_perf.c |  2 +-
 app/test/virtual_pmd.c    | 18 ++++++------------
 2 files changed, 7 insertions(+), 13 deletions(-)

diff --git a/app/test/test_hash_perf.c b/app/test/test_hash_perf.c
index bd531ec..6eabb21 100644
--- a/app/test/test_hash_perf.c
+++ b/app/test/test_hash_perf.c
@@ -387,7 +387,7 @@ struct tbl_perf_test_params tbl_perf_params[] =
 	if (cond) {							\
 		printf("ERROR line %d: " str "\n", __LINE__, ##__VA_ARGS__); \
 		if (handle) rte_fbk_hash_free(handle);			\
-		if (keys) rte_free(keys);				\
+		rte_free(keys);						\
 		return -1;						\
 	}								\
 } while(0)
diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c
index 39ecf80..1f4da96 100644
--- a/app/test/virtual_pmd.c
+++ b/app/test/virtual_pmd.c
@@ -635,18 +635,12 @@ virtual_ethdev_create(const char *name, struct ether_addr *mac_addr,
 	return eth_dev->data->port_id;
 
 err:
-	if (pci_dev)
-		rte_free(pci_dev);
-	if (pci_drv)
-		rte_free(pci_drv);
-	if (eth_drv)
-		rte_free(eth_drv);
-	if (dev_ops)
-		rte_free(dev_ops);
-	if (id_table)
-		rte_free(id_table);
-	if (dev_private)
-		rte_free(dev_private);
+	rte_free(pci_dev);
+	rte_free(pci_drv);
+	rte_free(eth_drv);
+	rte_free(dev_ops);
+	rte_free(id_table);
+	rte_free(dev_private);
 
 	return -1;
 }
-- 
2.1.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dpdk-dev] [PATCH v2 3/6] examples: get rid of unneeded null checks before rte_free
  2015-04-07 21:20 [dpdk-dev] [PATCH v2 1/6] test: remove useless memset Stephen Hemminger
  2015-04-07 21:20 ` [dpdk-dev] [PATCH v2 2/6] test: remove useless check of NULL before rte_free Stephen Hemminger
@ 2015-04-07 21:21 ` Stephen Hemminger
  2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 4/6] pmd: remove unnecessary if() " Stephen Hemminger
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2015-04-07 21:21 UTC (permalink / raw)
  To: dev

rte_free handles getting passed a NULL pointer.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 examples/vhost/main.c                       | 3 +--
 examples/vhost_xen/vhost_monitor.c          | 7 +++----
 examples/vm_power_manager/channel_manager.c | 6 ++----
 3 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/examples/vhost/main.c b/examples/vhost/main.c
index c3fcb80..ad10f82 100644
--- a/examples/vhost/main.c
+++ b/examples/vhost/main.c
@@ -2747,8 +2747,7 @@ new_device (struct virtio_net *dev)
 		RTE_LOG(INFO, VHOST_DATA, "(%"PRIu64") Failed to add device to data core\n", dev->device_fh);
 		vdev->ready = DEVICE_SAFE_REMOVE;
 		destroy_device(dev);
-		if (vdev->regions_hpa)
-			rte_free(vdev->regions_hpa);
+		rte_free(vdev->regions_hpa);
 		rte_free(vdev);
 		return -1;
 	}
diff --git a/examples/vhost_xen/vhost_monitor.c b/examples/vhost_xen/vhost_monitor.c
index 9d99962..6455993 100644
--- a/examples/vhost_xen/vhost_monitor.c
+++ b/examples/vhost_xen/vhost_monitor.c
@@ -298,10 +298,9 @@ virtio_net_config_ll *new_device(unsigned int virtio_idx, struct xen_guest *gues
 err:
 	if (new_ll_dev)
 		free(new_ll_dev);
-	if (virtqueue_rx)
-		rte_free(virtqueue_rx);
-	if (virtqueue_tx)
-		rte_free(virtqueue_tx);
+	rte_free(virtqueue_rx);
+	rte_free(virtqueue_tx);
+
 	return NULL;
 }
 
diff --git a/examples/vm_power_manager/channel_manager.c b/examples/vm_power_manager/channel_manager.c
index 04344ae..7d892e2 100644
--- a/examples/vm_power_manager/channel_manager.c
+++ b/examples/vm_power_manager/channel_manager.c
@@ -800,9 +800,7 @@ channel_manager_exit(void)
 		rte_free(vm_info);
 	}
 
-	if (global_cpumaps != NULL)
-		rte_free(global_cpumaps);
-	if (global_vircpuinfo != NULL)
-		rte_free(global_vircpuinfo);
+	rte_free(global_cpumaps);
+	rte_free(global_vircpuinfo);
 	disconnect_hypervisor();
 }
-- 
2.1.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dpdk-dev] [PATCH v2 4/6] pmd: remove unnecessary if() before rte_free
  2015-04-07 21:20 [dpdk-dev] [PATCH v2 1/6] test: remove useless memset Stephen Hemminger
  2015-04-07 21:20 ` [dpdk-dev] [PATCH v2 2/6] test: remove useless check of NULL before rte_free Stephen Hemminger
  2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 3/6] examples: get rid of unneeded null checks " Stephen Hemminger
@ 2015-04-07 21:21 ` Stephen Hemminger
  2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 5/6] test: put dev_ops in private Stephen Hemminger
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2015-04-07 21:21 UTC (permalink / raw)
  To: dev

Since rte_free accept NULL and does nothing, better to save
space and remove these useless checks.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 lib/librte_pmd_af_packet/rte_eth_af_packet.c | 14 ++++++--------
 lib/librte_pmd_bond/rte_eth_bond_api.c       | 13 +++++--------
 lib/librte_pmd_enic/enic_main.c              |  3 +--
 lib/librte_pmd_mlx4/mlx4.c                   | 15 +++++++--------
 lib/librte_pmd_null/rte_eth_null.c           | 13 +++++--------
 lib/librte_pmd_pcap/rte_eth_pcap.c           | 11 +++++------
 lib/librte_pmd_ring/rte_eth_ring.c           | 10 ++++------
 lib/librte_pmd_xenvirt/rte_eth_xenvirt.c     | 10 ++++------
 8 files changed, 37 insertions(+), 52 deletions(-)

diff --git a/lib/librte_pmd_af_packet/rte_eth_af_packet.c b/lib/librte_pmd_af_packet/rte_eth_af_packet.c
index 2ac50ba..c10da6c 100644
--- a/lib/librte_pmd_af_packet/rte_eth_af_packet.c
+++ b/lib/librte_pmd_af_packet/rte_eth_af_packet.c
@@ -680,18 +680,16 @@ rte_pmd_init_internals(const char *name,
 	return 0;
 
 error:
-	if (data)
-		rte_free(data);
-	if (pci_dev)
-		rte_free(pci_dev);
+	rte_free(data);
+	rte_free(pci_dev);
+
 	if (*internals) {
 		for (q = 0; q < nb_queues; q++) {
 			munmap((*internals)->rx_queue[q].map,
 			       2 * req->tp_block_size * req->tp_block_nr);
-			if ((*internals)->rx_queue[q].rd)
-				rte_free((*internals)->rx_queue[q].rd);
-			if ((*internals)->tx_queue[q].rd)
-				rte_free((*internals)->tx_queue[q].rd);
+
+			rte_free((*internals)->rx_queue[q].rd);
+			rte_free((*internals)->tx_queue[q].rd);
 			if (((*internals)->rx_queue[q].sockfd != 0) &&
 				((*internals)->rx_queue[q].sockfd != qsockfd))
 				close((*internals)->rx_queue[q].sockfd);
diff --git a/lib/librte_pmd_bond/rte_eth_bond_api.c b/lib/librte_pmd_bond/rte_eth_bond_api.c
index 13f3941..f594fe1 100644
--- a/lib/librte_pmd_bond/rte_eth_bond_api.c
+++ b/lib/librte_pmd_bond/rte_eth_bond_api.c
@@ -318,14 +318,11 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id)
 	return eth_dev->data->port_id;
 
 err:
-	if (pci_dev)
-		rte_free(pci_dev);
-	if (pci_id_table)
-		rte_free(pci_id_table);
-	if (eth_drv)
-		rte_free(eth_drv);
-	if (internals)
-		rte_free(internals);
+	rte_free(pci_dev);
+	rte_free(pci_id_table);
+	rte_free(eth_drv);
+	rte_free(internals);
+
 	return -1;
 }
 
diff --git a/lib/librte_pmd_enic/enic_main.c b/lib/librte_pmd_enic/enic_main.c
index 0892b3e..0e40d46 100644
--- a/lib/librte_pmd_enic/enic_main.c
+++ b/lib/librte_pmd_enic/enic_main.c
@@ -983,8 +983,7 @@ static void enic_dev_deinit(struct enic *enic)
 {
 	struct rte_eth_dev *eth_dev = enic->rte_dev;
 
-	if (eth_dev->data->mac_addrs)
-		rte_free(eth_dev->data->mac_addrs);
+	rte_free(eth_dev->data->mac_addrs);
 }
 
 
diff --git a/lib/librte_pmd_mlx4/mlx4.c b/lib/librte_pmd_mlx4/mlx4.c
index fa749f4..0eca322 100644
--- a/lib/librte_pmd_mlx4/mlx4.c
+++ b/lib/librte_pmd_mlx4/mlx4.c
@@ -792,10 +792,10 @@ txq_alloc_elts(struct txq *txq, unsigned int elts_n)
 error:
 	if (mr_linear != NULL)
 		claim_zero(ibv_dereg_mr(mr_linear));
-	if (elts_linear != NULL)
-		rte_free(elts_linear);
-	if (elts != NULL)
-		rte_free(elts);
+
+	rte_free(elts_linear);
+	rte_free(elts);
+
 	DEBUG("%p: failed, freed everything", (void *)txq);
 	assert(ret > 0);
 	return ret;
@@ -823,8 +823,8 @@ txq_free_elts(struct txq *txq)
 	txq->mr_linear = NULL;
 	if (mr_linear != NULL)
 		claim_zero(ibv_dereg_mr(mr_linear));
-	if (elts_linear != NULL)
-		rte_free(elts_linear);
+
+	rte_free(elts_linear);
 	if (elts == NULL)
 		return;
 	for (i = 0; (i != elemof(*elts)); ++i) {
@@ -4602,8 +4602,7 @@ mlx4_pci_devinit(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
 		continue;
 
 port_error:
-		if (priv)
-			rte_free(priv);
+		rte_free(priv);
 		if (pd)
 			claim_zero(ibv_dealloc_pd(pd));
 		if (ctx)
diff --git a/lib/librte_pmd_null/rte_eth_null.c b/lib/librte_pmd_null/rte_eth_null.c
index 0e18502..036faaf 100644
--- a/lib/librte_pmd_null/rte_eth_null.c
+++ b/lib/librte_pmd_null/rte_eth_null.c
@@ -355,8 +355,7 @@ eth_queue_release(void *q)
 		return;
 
 	nq = q;
-	if (nq->dummy_packet)
-		rte_free(nq->dummy_packet);
+	rte_free(nq->dummy_packet);
 }
 
 static int
@@ -458,12 +457,10 @@ eth_dev_null_create(const char *name,
 	return 0;
 
 error:
-	if (data)
-		rte_free(data);
-	if (pci_dev)
-		rte_free(pci_dev);
-	if (internals)
-		rte_free(internals);
+	rte_free(data);
+	rte_free(pci_dev);
+	rte_free(internals);
+
 	return -1;
 }
 
diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.c b/lib/librte_pmd_pcap/rte_eth_pcap.c
index 204ae68..3a7db98 100644
--- a/lib/librte_pmd_pcap/rte_eth_pcap.c
+++ b/lib/librte_pmd_pcap/rte_eth_pcap.c
@@ -760,12 +760,11 @@ rte_pmd_init_internals(const char *name, const unsigned nb_rx_queues,
 
 	return 0;
 
-	error: if (data)
-		rte_free(data);
-	if (pci_dev)
-		rte_free(pci_dev);
-	if (*internals)
-		rte_free(*internals);
+error: 
+	rte_free(data);
+	rte_free(pci_dev);
+	rte_free(*internals);
+
 	return -1;
 }
 
diff --git a/lib/librte_pmd_ring/rte_eth_ring.c b/lib/librte_pmd_ring/rte_eth_ring.c
index 1e66d4e..199e15f 100644
--- a/lib/librte_pmd_ring/rte_eth_ring.c
+++ b/lib/librte_pmd_ring/rte_eth_ring.c
@@ -349,12 +349,10 @@ rte_eth_from_rings(const char *name, struct rte_ring *const rx_queues[],
 	return 0;
 
 error:
-	if (data)
-		rte_free(data);
-	if (pci_dev)
-		rte_free(pci_dev);
-	if (internals)
-		rte_free(internals);
+	rte_free(data);
+	rte_free(pci_dev);
+	rte_free(internals);
+
 	return -1;
 }
 
diff --git a/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c b/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c
index bc403d6..edf2a5f 100644
--- a/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c
+++ b/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c
@@ -679,12 +679,10 @@ eth_dev_xenvirt_create(const char *name, const char *params,
 	return 0;
 
 err:
-	if (data)
-		rte_free(data);
-	if (pci_dev)
-		rte_free(pci_dev);
-	if (internals)
-		rte_free(internals);
+	rte_free(data);
+	rte_free(pci_dev);
+	rte_free(internals);
+
 	return -1;
 }
 
-- 
2.1.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dpdk-dev] [PATCH v2 5/6] test: put dev_ops in private
  2015-04-07 21:20 [dpdk-dev] [PATCH v2 1/6] test: remove useless memset Stephen Hemminger
                   ` (2 preceding siblings ...)
  2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 4/6] pmd: remove unnecessary if() " Stephen Hemminger
@ 2015-04-07 21:21 ` Stephen Hemminger
  2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 6/6] eth: make dev_ops const Stephen Hemminger
  2015-04-08 11:49 ` [dpdk-dev] [PATCH v2 1/6] test: remove useless memset Neil Horman
  5 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2015-04-07 21:21 UTC (permalink / raw)
  To: dev

The test PMD uses a special type of eth_dev_ops to test features.
Rather allocating this separately, just put in the private data area.
This allows for next change to make dev_ops const.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
v2 -- split into separate patch and put dev_ops in private

 app/test/virtual_pmd.c | 57 +++++++++++++++++++++++++-------------------------
 1 file changed, 28 insertions(+), 29 deletions(-)

diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c
index 1f4da96..3ae8c90 100644
--- a/app/test/virtual_pmd.c
+++ b/app/test/virtual_pmd.c
@@ -45,6 +45,7 @@
 static const char *virtual_ethdev_driver_name = "Virtual PMD";
 
 struct virtual_ethdev_private {
+	struct eth_dev_ops dev_ops;
 	struct rte_eth_stats eth_stats;
 
 	struct rte_ring *rx_queue;
@@ -262,61 +263,67 @@ static struct eth_dev_ops virtual_ethdev_default_dev_ops = {
 void
 virtual_ethdev_start_fn_set_success(uint8_t port_id, uint8_t success)
 {
-	struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
+	struct rte_eth_dev *dev = &rte_eth_devices[port_id];
+	struct virtual_ethdev_private *dev_private = dev->data->dev_private;
+	struct eth_dev_ops *dev_ops = &dev_private->dev_ops;
 
 	if (success)
-		vrtl_eth_dev->dev_ops->dev_start = virtual_ethdev_start_success;
+		dev_ops->dev_start = virtual_ethdev_start_success;
 	else
-		vrtl_eth_dev->dev_ops->dev_start = virtual_ethdev_start_fail;
+		dev_ops->dev_start = virtual_ethdev_start_fail;
 
 }
 
 void
 virtual_ethdev_configure_fn_set_success(uint8_t port_id, uint8_t success)
 {
-	struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
+	struct rte_eth_dev *dev = &rte_eth_devices[port_id];
+	struct virtual_ethdev_private *dev_private = dev->data->dev_private;
+	struct eth_dev_ops *dev_ops = &dev_private->dev_ops;
 
 	if (success)
-		vrtl_eth_dev->dev_ops->dev_configure = virtual_ethdev_configure_success;
+		dev_ops->dev_configure = virtual_ethdev_configure_success;
 	else
-		vrtl_eth_dev->dev_ops->dev_configure = virtual_ethdev_configure_fail;
+		dev_ops->dev_configure = virtual_ethdev_configure_fail;
 }
 
 void
 virtual_ethdev_rx_queue_setup_fn_set_success(uint8_t port_id, uint8_t success)
 {
-	struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
+	struct rte_eth_dev *dev = &rte_eth_devices[port_id];
+	struct virtual_ethdev_private *dev_private = dev->data->dev_private;
+	struct eth_dev_ops *dev_ops = &dev_private->dev_ops;
 
 	if (success)
-		vrtl_eth_dev->dev_ops->rx_queue_setup =
-				virtual_ethdev_rx_queue_setup_success;
+		dev_ops->rx_queue_setup = virtual_ethdev_rx_queue_setup_success;
 	else
-		vrtl_eth_dev->dev_ops->rx_queue_setup =
-				virtual_ethdev_rx_queue_setup_fail;
+		dev_ops->rx_queue_setup = virtual_ethdev_rx_queue_setup_fail;
 }
 
 void
 virtual_ethdev_tx_queue_setup_fn_set_success(uint8_t port_id, uint8_t success)
 {
-	struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
+	struct rte_eth_dev *dev = &rte_eth_devices[port_id];
+	struct virtual_ethdev_private *dev_private = dev->data->dev_private;
+	struct eth_dev_ops *dev_ops = &dev_private->dev_ops;
 
 	if (success)
-		vrtl_eth_dev->dev_ops->tx_queue_setup =
-				virtual_ethdev_tx_queue_setup_success;
+		dev_ops->tx_queue_setup = virtual_ethdev_tx_queue_setup_success;
 	else
-		vrtl_eth_dev->dev_ops->tx_queue_setup =
-				virtual_ethdev_tx_queue_setup_fail;
+		dev_ops->tx_queue_setup = virtual_ethdev_tx_queue_setup_fail;
 }
 
 void
 virtual_ethdev_link_update_fn_set_success(uint8_t port_id, uint8_t success)
 {
-	struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
+	struct rte_eth_dev *dev = &rte_eth_devices[port_id];
+	struct virtual_ethdev_private *dev_private = dev->data->dev_private;
+	struct eth_dev_ops *dev_ops = &dev_private->dev_ops;
 
 	if (success)
-		vrtl_eth_dev->dev_ops->link_update = virtual_ethdev_link_update_success;
+		dev_ops->link_update = virtual_ethdev_link_update_success;
 	else
-		vrtl_eth_dev->dev_ops->link_update = virtual_ethdev_link_update_fail;
+		dev_ops->link_update = virtual_ethdev_link_update_fail;
 }
 
 
@@ -528,7 +535,6 @@ virtual_ethdev_create(const char *name, struct ether_addr *mac_addr,
 	struct rte_eth_dev *eth_dev = NULL;
 	struct eth_driver *eth_drv = NULL;
 	struct rte_pci_driver *pci_drv = NULL;
-	struct eth_dev_ops *dev_ops = NULL;
 	struct rte_pci_id *id_table = NULL;
 	struct virtual_ethdev_private *dev_private = NULL;
 	char name_buf[RTE_RING_NAMESIZE];
@@ -553,10 +559,6 @@ virtual_ethdev_create(const char *name, struct ether_addr *mac_addr,
 	if (pci_drv == NULL)
 		goto err;
 
-	dev_ops = rte_zmalloc_socket(name, sizeof(*dev_ops), 0, socket_id);
-	if (dev_ops == NULL)
-		goto err;
-
 	id_table = rte_zmalloc_socket(name, sizeof(*id_table), 0, socket_id);
 	if (id_table == NULL)
 		goto err;
@@ -618,11 +620,9 @@ virtual_ethdev_create(const char *name, struct ether_addr *mac_addr,
 
 	eth_dev->data->dev_private = dev_private;
 
-	eth_dev->dev_ops = dev_ops;
-
 	/* Copy default device operation functions */
-	memcpy(eth_dev->dev_ops, &virtual_ethdev_default_dev_ops,
-			sizeof(*eth_dev->dev_ops));
+	dev_private->dev_ops = virtual_ethdev_default_dev_ops;
+	eth_dev->dev_ops = &dev_private->dev_ops;
 
 	eth_dev->pci_dev = pci_dev;
 	eth_dev->pci_dev->driver = &eth_drv->pci_drv;
@@ -638,7 +638,6 @@ err:
 	rte_free(pci_dev);
 	rte_free(pci_drv);
 	rte_free(eth_drv);
-	rte_free(dev_ops);
 	rte_free(id_table);
 	rte_free(dev_private);
 
-- 
2.1.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dpdk-dev] [PATCH v2 6/6] eth: make dev_ops const
  2015-04-07 21:20 [dpdk-dev] [PATCH v2 1/6] test: remove useless memset Stephen Hemminger
                   ` (3 preceding siblings ...)
  2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 5/6] test: put dev_ops in private Stephen Hemminger
@ 2015-04-07 21:21 ` Stephen Hemminger
  2015-04-08 11:49 ` [dpdk-dev] [PATCH v2 1/6] test: remove useless memset Neil Horman
  5 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2015-04-07 21:21 UTC (permalink / raw)
  To: dev

The ethernet device ops function table should be made const for
safety and security.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
v2 -- handle/fix virtual_pmd in earlier patches

 app/test/virtual_pmd.c                       | 30 +++++++++++++-------------
 lib/librte_ether/rte_ethdev.h                |  2 +-
 lib/librte_pmd_af_packet/rte_eth_af_packet.c |  2 +-
 lib/librte_pmd_e1000/em_ethdev.c             |  2 +-
 lib/librte_pmd_e1000/igb_ethdev.c            |  4 ++--
 lib/librte_pmd_enic/enic_ethdev.c            |  2 +-
 lib/librte_pmd_fm10k/fm10k_ethdev.c          |  2 +-
 lib/librte_pmd_i40e/i40e_ethdev.c            |  2 +-
 lib/librte_pmd_i40e/i40e_ethdev_vf.c         |  2 +-
 lib/librte_pmd_ixgbe/ixgbe_ethdev.c          |  5 ++---
 lib/librte_pmd_mlx4/mlx4.c                   |  2 +-
 lib/librte_pmd_null/rte_eth_null.c           | 24 ++++++++++-----------
 lib/librte_pmd_pcap/rte_eth_pcap.c           | 26 +++++++++++-----------
 lib/librte_pmd_ring/rte_eth_ring.c           | 32 ++++++++++++++--------------
 lib/librte_pmd_virtio/virtio_ethdev.c        |  2 +-
 lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c      |  2 +-
 lib/librte_pmd_xenvirt/rte_eth_xenvirt.c     | 26 +++++++++++-----------
 17 files changed, 83 insertions(+), 84 deletions(-)

diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c
index 3ae8c90..9581892 100644
--- a/app/test/virtual_pmd.c
+++ b/app/test/virtual_pmd.c
@@ -242,21 +242,21 @@ virtual_ethdev_promiscuous_mode_disable(struct rte_eth_dev *dev __rte_unused)
 {}
 
 
-static struct eth_dev_ops virtual_ethdev_default_dev_ops = {
-		.dev_configure = virtual_ethdev_configure_success,
-		.dev_start = virtual_ethdev_start_success,
-		.dev_stop = virtual_ethdev_stop,
-		.dev_close = virtual_ethdev_close,
-		.dev_infos_get = virtual_ethdev_info_get,
-		.rx_queue_setup = virtual_ethdev_rx_queue_setup_success,
-		.tx_queue_setup = virtual_ethdev_tx_queue_setup_success,
-		.rx_queue_release = virtual_ethdev_rx_queue_release,
-		.tx_queue_release = virtual_ethdev_tx_queue_release,
-		.link_update = virtual_ethdev_link_update_success,
-		.stats_get = virtual_ethdev_stats_get,
-		.stats_reset = virtual_ethdev_stats_reset,
-		.promiscuous_enable = virtual_ethdev_promiscuous_mode_enable,
-		.promiscuous_disable = virtual_ethdev_promiscuous_mode_disable
+static const struct eth_dev_ops virtual_ethdev_default_dev_ops = {
+	.dev_configure = virtual_ethdev_configure_success,
+	.dev_start = virtual_ethdev_start_success,
+	.dev_stop = virtual_ethdev_stop,
+	.dev_close = virtual_ethdev_close,
+	.dev_infos_get = virtual_ethdev_info_get,
+	.rx_queue_setup = virtual_ethdev_rx_queue_setup_success,
+	.tx_queue_setup = virtual_ethdev_tx_queue_setup_success,
+	.rx_queue_release = virtual_ethdev_rx_queue_release,
+	.tx_queue_release = virtual_ethdev_tx_queue_release,
+	.link_update = virtual_ethdev_link_update_success,
+	.stats_get = virtual_ethdev_stats_get,
+	.stats_reset = virtual_ethdev_stats_reset,
+	.promiscuous_enable = virtual_ethdev_promiscuous_mode_enable,
+	.promiscuous_disable = virtual_ethdev_promiscuous_mode_disable
 };
 
 
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index e8df027..46a55ff 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1472,7 +1472,7 @@ struct rte_eth_dev {
 	eth_tx_burst_t tx_pkt_burst; /**< Pointer to PMD transmit function. */
 	struct rte_eth_dev_data *data;  /**< Pointer to device data */
 	const struct eth_driver *driver;/**< Driver for this device */
-	struct eth_dev_ops *dev_ops;    /**< Functions exported by PMD */
+	const struct eth_dev_ops *dev_ops; /**< Functions exported by PMD */
 	struct rte_pci_device *pci_dev; /**< PCI info. supplied by probing */
 	/** User application callbacks for NIC interrupts */
 	struct rte_eth_dev_cb_list link_intr_cbs;
diff --git a/lib/librte_pmd_af_packet/rte_eth_af_packet.c b/lib/librte_pmd_af_packet/rte_eth_af_packet.c
index c10da6c..f7e9ec9 100644
--- a/lib/librte_pmd_af_packet/rte_eth_af_packet.c
+++ b/lib/librte_pmd_af_packet/rte_eth_af_packet.c
@@ -384,7 +384,7 @@ eth_tx_queue_setup(struct rte_eth_dev *dev,
 	return 0;
 }
 
-static struct eth_dev_ops ops = {
+static const struct eth_dev_ops ops = {
 	.dev_start = eth_dev_start,
 	.dev_stop = eth_dev_stop,
 	.dev_close = eth_dev_close,
diff --git a/lib/librte_pmd_e1000/em_ethdev.c b/lib/librte_pmd_e1000/em_ethdev.c
index 76f45c9..12ecf5f 100644
--- a/lib/librte_pmd_e1000/em_ethdev.c
+++ b/lib/librte_pmd_e1000/em_ethdev.c
@@ -133,7 +133,7 @@ static struct rte_pci_id pci_id_em_map[] = {
 {.device_id = 0},
 };
 
-static struct eth_dev_ops eth_em_ops = {
+static const struct eth_dev_ops eth_em_ops = {
 	.dev_configure        = eth_em_configure,
 	.dev_start            = eth_em_start,
 	.dev_stop             = eth_em_stop,
diff --git a/lib/librte_pmd_e1000/igb_ethdev.c b/lib/librte_pmd_e1000/igb_ethdev.c
index b3892a5..1ea2d38 100644
--- a/lib/librte_pmd_e1000/igb_ethdev.c
+++ b/lib/librte_pmd_e1000/igb_ethdev.c
@@ -235,7 +235,7 @@ static struct rte_pci_id pci_id_igbvf_map[] = {
 {.device_id = 0},
 };
 
-static struct eth_dev_ops eth_igb_ops = {
+static const struct eth_dev_ops eth_igb_ops = {
 	.dev_configure        = eth_igb_configure,
 	.dev_start            = eth_igb_start,
 	.dev_stop             = eth_igb_stop,
@@ -275,7 +275,7 @@ static struct eth_dev_ops eth_igb_ops = {
  * dev_ops for virtual function, bare necessities for basic vf
  * operation have been implemented
  */
-static struct eth_dev_ops igbvf_eth_dev_ops = {
+static const struct eth_dev_ops igbvf_eth_dev_ops = {
 	.dev_configure        = igbvf_dev_configure,
 	.dev_start            = igbvf_dev_start,
 	.dev_stop             = igbvf_dev_stop,
diff --git a/lib/librte_pmd_enic/enic_ethdev.c b/lib/librte_pmd_enic/enic_ethdev.c
index 4950ede..742925a 100644
--- a/lib/librte_pmd_enic/enic_ethdev.c
+++ b/lib/librte_pmd_enic/enic_ethdev.c
@@ -503,7 +503,7 @@ static uint16_t enicpmd_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 	return work_done;
 }
 
-static struct eth_dev_ops enicpmd_eth_dev_ops = {
+static const struct eth_dev_ops enicpmd_eth_dev_ops = {
 	.dev_configure        = enicpmd_dev_configure,
 	.dev_start            = enicpmd_dev_start,
 	.dev_stop             = enicpmd_dev_stop,
diff --git a/lib/librte_pmd_fm10k/fm10k_ethdev.c b/lib/librte_pmd_fm10k/fm10k_ethdev.c
index 0c7a80c..1a96cf2 100644
--- a/lib/librte_pmd_fm10k/fm10k_ethdev.c
+++ b/lib/librte_pmd_fm10k/fm10k_ethdev.c
@@ -1651,7 +1651,7 @@ fm10k_close_mbx_service(struct fm10k_hw *hw)
 	hw->mbx.ops.disconnect(hw, &hw->mbx);
 }
 
-static struct eth_dev_ops fm10k_eth_dev_ops = {
+static const struct eth_dev_ops fm10k_eth_dev_ops = {
 	.dev_configure		= fm10k_dev_configure,
 	.dev_start		= fm10k_dev_start,
 	.dev_stop		= fm10k_dev_stop,
diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c
index 6b8f96e..dc44764 100644
--- a/lib/librte_pmd_i40e/i40e_ethdev.c
+++ b/lib/librte_pmd_i40e/i40e_ethdev.c
@@ -218,7 +218,7 @@ static struct rte_pci_id pci_id_i40e_map[] = {
 { .vendor_id = 0, /* sentinel */ },
 };
 
-static struct eth_dev_ops i40e_eth_dev_ops = {
+static const struct eth_dev_ops i40e_eth_dev_ops = {
 	.dev_configure                = i40e_dev_configure,
 	.dev_start                    = i40e_dev_start,
 	.dev_stop                     = i40e_dev_stop,
diff --git a/lib/librte_pmd_i40e/i40e_ethdev_vf.c b/lib/librte_pmd_i40e/i40e_ethdev_vf.c
index c985e4a..4581c5b 100644
--- a/lib/librte_pmd_i40e/i40e_ethdev_vf.c
+++ b/lib/librte_pmd_i40e/i40e_ethdev_vf.c
@@ -148,7 +148,7 @@ static int i40evf_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
 /* Default hash key buffer for RSS */
 static uint32_t rss_key_default[I40E_VFQF_HKEY_MAX_INDEX + 1];
 
-static struct eth_dev_ops i40evf_eth_dev_ops = {
+static const struct eth_dev_ops i40evf_eth_dev_ops = {
 	.dev_configure        = i40evf_dev_configure,
 	.dev_start            = i40evf_dev_start,
 	.dev_stop             = i40evf_dev_stop,
diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c
index 5caee22..a7ac866 100644
--- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c
+++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c
@@ -317,7 +317,7 @@ static struct rte_pci_id pci_id_ixgbevf_map[] = {
 
 };
 
-static struct eth_dev_ops ixgbe_eth_dev_ops = {
+static const struct eth_dev_ops ixgbe_eth_dev_ops = {
 	.dev_configure        = ixgbe_dev_configure,
 	.dev_start            = ixgbe_dev_start,
 	.dev_stop             = ixgbe_dev_stop,
@@ -387,8 +387,7 @@ static struct eth_dev_ops ixgbe_eth_dev_ops = {
  * dev_ops for virtual function, bare necessities for basic vf
  * operation have been implemented
  */
-static struct eth_dev_ops ixgbevf_eth_dev_ops = {
-
+static const struct eth_dev_ops ixgbevf_eth_dev_ops = {
 	.dev_configure        = ixgbevf_dev_configure,
 	.dev_start            = ixgbevf_dev_start,
 	.dev_stop             = ixgbevf_dev_stop,
diff --git a/lib/librte_pmd_mlx4/mlx4.c b/lib/librte_pmd_mlx4/mlx4.c
index 0eca322..e096071 100644
--- a/lib/librte_pmd_mlx4/mlx4.c
+++ b/lib/librte_pmd_mlx4/mlx4.c
@@ -4162,7 +4162,7 @@ mlx4_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
 	return -ret;
 }
 
-static struct eth_dev_ops mlx4_dev_ops = {
+static const struct eth_dev_ops mlx4_dev_ops = {
 	.dev_configure = mlx4_dev_configure,
 	.dev_start = mlx4_dev_start,
 	.dev_stop = mlx4_dev_stop,
diff --git a/lib/librte_pmd_null/rte_eth_null.c b/lib/librte_pmd_null/rte_eth_null.c
index 036faaf..5895065 100644
--- a/lib/librte_pmd_null/rte_eth_null.c
+++ b/lib/librte_pmd_null/rte_eth_null.c
@@ -362,18 +362,18 @@ static int
 eth_link_update(struct rte_eth_dev *dev __rte_unused,
 		int wait_to_complete __rte_unused) { return 0; }
 
-static struct eth_dev_ops ops = {
-		.dev_start = eth_dev_start,
-		.dev_stop = eth_dev_stop,
-		.dev_configure = eth_dev_configure,
-		.dev_infos_get = eth_dev_info,
-		.rx_queue_setup = eth_rx_queue_setup,
-		.tx_queue_setup = eth_tx_queue_setup,
-		.rx_queue_release = eth_queue_release,
-		.tx_queue_release = eth_queue_release,
-		.link_update = eth_link_update,
-		.stats_get = eth_stats_get,
-		.stats_reset = eth_stats_reset,
+static const struct eth_dev_ops ops = {
+	.dev_start = eth_dev_start,
+	.dev_stop = eth_dev_stop,
+	.dev_configure = eth_dev_configure,
+	.dev_infos_get = eth_dev_info,
+	.rx_queue_setup = eth_rx_queue_setup,
+	.tx_queue_setup = eth_tx_queue_setup,
+	.rx_queue_release = eth_queue_release,
+	.tx_queue_release = eth_queue_release,
+	.link_update = eth_link_update,
+	.stats_get = eth_stats_get,
+	.stats_reset = eth_stats_reset,
 };
 
 static int
diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.c b/lib/librte_pmd_pcap/rte_eth_pcap.c
index 3a7db98..e5d2279 100644
--- a/lib/librte_pmd_pcap/rte_eth_pcap.c
+++ b/lib/librte_pmd_pcap/rte_eth_pcap.c
@@ -483,19 +483,19 @@ eth_tx_queue_setup(struct rte_eth_dev *dev,
 	return 0;
 }
 
-static struct eth_dev_ops ops = {
-		.dev_start = eth_dev_start,
-		.dev_stop =	eth_dev_stop,
-		.dev_close = eth_dev_close,
-		.dev_configure = eth_dev_configure,
-		.dev_infos_get = eth_dev_info,
-		.rx_queue_setup = eth_rx_queue_setup,
-		.tx_queue_setup = eth_tx_queue_setup,
-		.rx_queue_release = eth_queue_release,
-		.tx_queue_release = eth_queue_release,
-		.link_update = eth_link_update,
-		.stats_get = eth_stats_get,
-		.stats_reset = eth_stats_reset,
+static const struct eth_dev_ops ops = {
+	.dev_start = eth_dev_start,
+	.dev_stop =	eth_dev_stop,
+	.dev_close = eth_dev_close,
+	.dev_configure = eth_dev_configure,
+	.dev_infos_get = eth_dev_info,
+	.rx_queue_setup = eth_rx_queue_setup,
+	.tx_queue_setup = eth_tx_queue_setup,
+	.rx_queue_release = eth_queue_release,
+	.tx_queue_release = eth_queue_release,
+	.link_update = eth_link_update,
+	.stats_get = eth_stats_get,
+	.stats_reset = eth_stats_reset,
 };
 
 static struct eth_driver rte_pcap_pmd = {
diff --git a/lib/librte_pmd_ring/rte_eth_ring.c b/lib/librte_pmd_ring/rte_eth_ring.c
index 199e15f..6832f01 100644
--- a/lib/librte_pmd_ring/rte_eth_ring.c
+++ b/lib/librte_pmd_ring/rte_eth_ring.c
@@ -234,22 +234,22 @@ static int
 eth_link_update(struct rte_eth_dev *dev __rte_unused,
 		int wait_to_complete __rte_unused) { return 0; }
 
-static struct eth_dev_ops ops = {
-		.dev_start = eth_dev_start,
-		.dev_stop = eth_dev_stop,
-		.dev_set_link_up = eth_dev_set_link_up,
-		.dev_set_link_down = eth_dev_set_link_down,
-		.dev_configure = eth_dev_configure,
-		.dev_infos_get = eth_dev_info,
-		.rx_queue_setup = eth_rx_queue_setup,
-		.tx_queue_setup = eth_tx_queue_setup,
-		.rx_queue_release = eth_queue_release,
-		.tx_queue_release = eth_queue_release,
-		.link_update = eth_link_update,
-		.stats_get = eth_stats_get,
-		.stats_reset = eth_stats_reset,
-		.mac_addr_remove = eth_mac_addr_remove,
-		.mac_addr_add = eth_mac_addr_add,
+static const struct eth_dev_ops ops = {
+	.dev_start = eth_dev_start,
+	.dev_stop = eth_dev_stop,
+	.dev_set_link_up = eth_dev_set_link_up,
+	.dev_set_link_down = eth_dev_set_link_down,
+	.dev_configure = eth_dev_configure,
+	.dev_infos_get = eth_dev_info,
+	.rx_queue_setup = eth_rx_queue_setup,
+	.tx_queue_setup = eth_tx_queue_setup,
+	.rx_queue_release = eth_queue_release,
+	.tx_queue_release = eth_queue_release,
+	.link_update = eth_link_update,
+	.stats_get = eth_stats_get,
+	.stats_reset = eth_stats_reset,
+	.mac_addr_remove = eth_mac_addr_remove,
+	.mac_addr_add = eth_mac_addr_add,
 };
 
 int
diff --git a/lib/librte_pmd_virtio/virtio_ethdev.c b/lib/librte_pmd_virtio/virtio_ethdev.c
index 7b83d9b..ffa26a0 100644
--- a/lib/librte_pmd_virtio/virtio_ethdev.c
+++ b/lib/librte_pmd_virtio/virtio_ethdev.c
@@ -499,7 +499,7 @@ virtio_dev_allmulticast_disable(struct rte_eth_dev *dev)
 /*
  * dev_ops for virtio, bare necessities for basic operation
  */
-static struct eth_dev_ops virtio_eth_dev_ops = {
+static const struct eth_dev_ops virtio_eth_dev_ops = {
 	.dev_configure           = virtio_dev_configure,
 	.dev_start               = virtio_dev_start,
 	.dev_stop                = virtio_dev_stop,
diff --git a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c
index 458dce5..577e0f9 100644
--- a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c
+++ b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c
@@ -99,7 +99,7 @@ static struct rte_pci_id pci_id_vmxnet3_map[] = {
 { .vendor_id = 0, /* sentinel */ },
 };
 
-static struct eth_dev_ops vmxnet3_eth_dev_ops = {
+static const struct eth_dev_ops vmxnet3_eth_dev_ops = {
 	.dev_configure        = vmxnet3_dev_configure,
 	.dev_start            = vmxnet3_dev_start,
 	.dev_stop             = vmxnet3_dev_stop,
diff --git a/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c b/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c
index edf2a5f..73e8bce 100644
--- a/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c
+++ b/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c
@@ -526,19 +526,19 @@ eth_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id,
 
 
 
-static struct eth_dev_ops ops = {
-		.dev_start = eth_dev_start,
-		.dev_stop = eth_dev_stop,
-		.dev_close = eth_dev_close,
-		.dev_configure = eth_dev_configure,
-		.dev_infos_get = eth_dev_info,
-		.rx_queue_setup = eth_rx_queue_setup,
-		.tx_queue_setup = eth_tx_queue_setup,
-		.rx_queue_release = eth_queue_release,
-		.tx_queue_release = eth_queue_release,
-		.link_update = eth_link_update,
-		.stats_get = eth_stats_get,
-		.stats_reset = eth_stats_reset,
+static const struct eth_dev_ops ops = {
+	.dev_start = eth_dev_start,
+	.dev_stop = eth_dev_stop,
+	.dev_close = eth_dev_close,
+	.dev_configure = eth_dev_configure,
+	.dev_infos_get = eth_dev_info,
+	.rx_queue_setup = eth_rx_queue_setup,
+	.tx_queue_setup = eth_tx_queue_setup,
+	.rx_queue_release = eth_queue_release,
+	.tx_queue_release = eth_queue_release,
+	.link_update = eth_link_update,
+	.stats_get = eth_stats_get,
+	.stats_reset = eth_stats_reset,
 };
 
 
-- 
2.1.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dpdk-dev] [PATCH v2 1/6] test: remove useless memset
  2015-04-07 21:20 [dpdk-dev] [PATCH v2 1/6] test: remove useless memset Stephen Hemminger
                   ` (4 preceding siblings ...)
  2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 6/6] eth: make dev_ops const Stephen Hemminger
@ 2015-04-08 11:49 ` Neil Horman
  2015-04-13 20:36   ` Thomas Monjalon
  5 siblings, 1 reply; 8+ messages in thread
From: Neil Horman @ 2015-04-08 11:49 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev

On Tue, Apr 07, 2015 at 02:20:58PM -0700, Stephen Hemminger wrote:
> Remove useless memset, since dev_private is created by rte_zmalloc
> it must already be zero.
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>  app/test/virtual_pmd.c | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c
> index f163562..39ecf80 100644
> --- a/app/test/virtual_pmd.c
> +++ b/app/test/virtual_pmd.c
> @@ -565,8 +565,6 @@ virtual_ethdev_create(const char *name, struct ether_addr *mac_addr,
>  	if (dev_private == NULL)
>  		goto err;
>  
> -	memset(dev_private, 0, sizeof(*dev_private));
> -
>  	snprintf(name_buf, sizeof(name_buf), "%s_rxQ", name);
>  	dev_private->rx_queue = rte_ring_create(name_buf, MAX_PKT_BURST, socket_id,
>  			0);
> -- 
> 2.1.4
> 
> 

For the series
Acked-by: Neil Horman <nhorman@tuxdriver.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dpdk-dev] [PATCH v2 1/6] test: remove useless memset
  2015-04-08 11:49 ` [dpdk-dev] [PATCH v2 1/6] test: remove useless memset Neil Horman
@ 2015-04-13 20:36   ` Thomas Monjalon
  0 siblings, 0 replies; 8+ messages in thread
From: Thomas Monjalon @ 2015-04-13 20:36 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev

> > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> 
> For the series
> Acked-by: Neil Horman <nhorman@tuxdriver.com>

Applied, thanks

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-04-13 20:37 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-07 21:20 [dpdk-dev] [PATCH v2 1/6] test: remove useless memset Stephen Hemminger
2015-04-07 21:20 ` [dpdk-dev] [PATCH v2 2/6] test: remove useless check of NULL before rte_free Stephen Hemminger
2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 3/6] examples: get rid of unneeded null checks " Stephen Hemminger
2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 4/6] pmd: remove unnecessary if() " Stephen Hemminger
2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 5/6] test: put dev_ops in private Stephen Hemminger
2015-04-07 21:21 ` [dpdk-dev] [PATCH v2 6/6] eth: make dev_ops const Stephen Hemminger
2015-04-08 11:49 ` [dpdk-dev] [PATCH v2 1/6] test: remove useless memset Neil Horman
2015-04-13 20:36   ` Thomas Monjalon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).