All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] librte_port: fix mbuf allocation in source port
@ 2015-11-30 20:41 Fan Zhang
  2015-11-30 20:41 ` [PATCH] librte_port: fix sink port statistics Fan Zhang
  2015-12-06 23:25 ` [PATCH] librte_port: fix mbuf allocation in source port Thomas Monjalon
  0 siblings, 2 replies; 4+ messages in thread
From: Fan Zhang @ 2015-11-30 20:41 UTC (permalink / raw)
  To: dev

Fixes the mbuf allocation not initialized problem. This problem will cause
the mbufs not be able to freed back to mempool by rte_pktmbuf_free().

The problem was introduced by commit "Packet Framework librte_port: Source
/Sink ports" (commit id ef3403fb6f9a3c4b730d2e4fbe7ddc0291ffa992)

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
---
 lib/librte_port/rte_port_source_sink.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/lib/librte_port/rte_port_source_sink.c b/lib/librte_port/rte_port_source_sink.c
index 234ab18..5e10144 100644
--- a/lib/librte_port/rte_port_source_sink.c
+++ b/lib/librte_port/rte_port_source_sink.c
@@ -105,10 +105,16 @@ static int
 rte_port_source_rx(void *port, struct rte_mbuf **pkts, uint32_t n_pkts)
 {
 	struct rte_port_source *p = (struct rte_port_source *) port;
+	uint32_t i;
 
 	if (rte_mempool_get_bulk(p->mempool, (void **) pkts, n_pkts) != 0)
 		return 0;
 
+	for (i = 0; i < n_pkts; i++) {
+		rte_mbuf_refcnt_set(pkts[i], 1);
+		rte_pktmbuf_reset(pkts[i]);
+	}
+
 	RTE_PORT_SOURCE_STATS_PKTS_IN_ADD(p, n_pkts);
 
 	return n_pkts;
-- 
2.5.0

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

* [PATCH] librte_port: fix sink port statistics
  2015-11-30 20:41 [PATCH] librte_port: fix mbuf allocation in source port Fan Zhang
@ 2015-11-30 20:41 ` Fan Zhang
  2015-12-06 23:25   ` Thomas Monjalon
  2015-12-06 23:25 ` [PATCH] librte_port: fix mbuf allocation in source port Thomas Monjalon
  1 sibling, 1 reply; 4+ messages in thread
From: Fan Zhang @ 2015-11-30 20:41 UTC (permalink / raw)
  To: dev

Fixes the sink port statistics incomplete problem. The problem was
introduced by commit "Packet Framework librte_port: Source/Sink ports"
(commit id ef3403fb6f9a3c4b730d2e4fbe7ddc0291ffa992)

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
---
 lib/librte_port/rte_port_source_sink.c | 63 +++++++++++++++++++++++++++++++---
 1 file changed, 59 insertions(+), 4 deletions(-)

diff --git a/lib/librte_port/rte_port_source_sink.c b/lib/librte_port/rte_port_source_sink.c
index 234ab18..ab362e1 100644
--- a/lib/librte_port/rte_port_source_sink.c
+++ b/lib/librte_port/rte_port_source_sink.c
@@ -133,28 +133,64 @@ rte_port_source_stats_read(void *port,
 /*
  * Port SINK
  */
+#ifdef RTE_PORT_STATS_COLLECT
+
+#define RTE_PORT_SINK_STATS_PKTS_IN_ADD(port, val) \
+	(port->stats.n_pkts_in += val)
+#define RTE_PORT_SINK_STATS_PKTS_DROP_ADD(port, val) \
+	(port->stats.n_pkts_drop += val)
+
+#else
+
+#define RTE_PORT_SINK_STATS_PKTS_IN_ADD(port, val)
+#define RTE_PORT_SINK_STATS_PKTS_DROP_ADD(port, val)
+
+#endif
+
+struct rte_port_sink {
+	struct rte_port_out_stats stats;
+};
+
 static void *
-rte_port_sink_create(__rte_unused void *params, __rte_unused int socket_id)
+rte_port_sink_create(__rte_unused void *params, int socket_id)
 {
-	return (void *) 1;
+	struct rte_port_sink *port;
+
+	/* Memory allocation */
+	port = rte_zmalloc_socket("PORT", sizeof(*port),
+			RTE_CACHE_LINE_SIZE, socket_id);
+	if (port == NULL) {
+		RTE_LOG(ERR, PORT, "%s: Failed to allocate port\n", __func__);
+		return NULL;
+	}
+
+	return port;
 }
 
 static int
-rte_port_sink_tx(__rte_unused void *port, struct rte_mbuf *pkt)
+rte_port_sink_tx(void *port, struct rte_mbuf *pkt)
 {
+	__rte_unused struct rte_port_sink *p = (struct rte_port_sink *) port;
+
+	RTE_PORT_SINK_STATS_PKTS_IN_ADD(p, 1);
 	rte_pktmbuf_free(pkt);
+	RTE_PORT_SINK_STATS_PKTS_DROP_ADD(p, 1);
 
 	return 0;
 }
 
 static int
-rte_port_sink_tx_bulk(__rte_unused void *port, struct rte_mbuf **pkts,
+rte_port_sink_tx_bulk(void *port, struct rte_mbuf **pkts,
 	uint64_t pkts_mask)
 {
+	__rte_unused struct rte_port_sink *p = (struct rte_port_sink *) port;
+
 	if ((pkts_mask & (pkts_mask + 1)) == 0) {
 		uint64_t n_pkts = __builtin_popcountll(pkts_mask);
 		uint32_t i;
 
+		RTE_PORT_SINK_STATS_PKTS_IN_ADD(p, n_pkts);
+		RTE_PORT_SINK_STATS_PKTS_DROP_ADD(p, n_pkts);
 		for (i = 0; i < n_pkts; i++) {
 			struct rte_mbuf *pkt = pkts[i];
 
@@ -166,6 +202,8 @@ rte_port_sink_tx_bulk(__rte_unused void *port, struct rte_mbuf **pkts,
 			uint64_t pkt_mask = 1LLU << pkt_index;
 			struct rte_mbuf *pkt = pkts[pkt_index];
 
+			RTE_PORT_SINK_STATS_PKTS_IN_ADD(p, 1);
+			RTE_PORT_SINK_STATS_PKTS_DROP_ADD(p, 1);
 			rte_pktmbuf_free(pkt);
 			pkts_mask &= ~pkt_mask;
 		}
@@ -174,6 +212,22 @@ rte_port_sink_tx_bulk(__rte_unused void *port, struct rte_mbuf **pkts,
 	return 0;
 }
 
+static int
+rte_port_sink_stats_read(void *port, struct rte_port_out_stats *stats,
+		int clear)
+{
+	struct rte_port_sink *p =
+		(struct rte_port_sink *) port;
+
+	if (stats != NULL)
+		memcpy(stats, &p->stats, sizeof(p->stats));
+
+	if (clear)
+		memset(&p->stats, 0, sizeof(p->stats));
+
+	return 0;
+}
+
 /*
  * Summary of port operations
  */
@@ -190,4 +244,5 @@ struct rte_port_out_ops rte_port_sink_ops = {
 	.f_tx = rte_port_sink_tx,
 	.f_tx_bulk = rte_port_sink_tx_bulk,
 	.f_flush = NULL,
+	.f_stats = rte_port_sink_stats_read,
 };
-- 
2.5.0

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

* Re: [PATCH] librte_port: fix mbuf allocation in source port
  2015-11-30 20:41 [PATCH] librte_port: fix mbuf allocation in source port Fan Zhang
  2015-11-30 20:41 ` [PATCH] librte_port: fix sink port statistics Fan Zhang
@ 2015-12-06 23:25 ` Thomas Monjalon
  1 sibling, 0 replies; 4+ messages in thread
From: Thomas Monjalon @ 2015-12-06 23:25 UTC (permalink / raw)
  To: Fan Zhang; +Cc: dev

2015-11-30 20:41, Fan Zhang:
> Fixes the mbuf allocation not initialized problem. This problem will cause
> the mbufs not be able to freed back to mempool by rte_pktmbuf_free().
> 
> The problem was introduced by commit "Packet Framework librte_port: Source
> /Sink ports" (commit id ef3403fb6f9a3c4b730d2e4fbe7ddc0291ffa992)
> 
> Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
> Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>

Applied, thanks

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

* Re: [PATCH] librte_port: fix sink port statistics
  2015-11-30 20:41 ` [PATCH] librte_port: fix sink port statistics Fan Zhang
@ 2015-12-06 23:25   ` Thomas Monjalon
  0 siblings, 0 replies; 4+ messages in thread
From: Thomas Monjalon @ 2015-12-06 23:25 UTC (permalink / raw)
  To: Fan Zhang; +Cc: dev

2015-11-30 20:41, Fan Zhang:
> Fixes the sink port statistics incomplete problem. The problem was
> introduced by commit "Packet Framework librte_port: Source/Sink ports"
> (commit id ef3403fb6f9a3c4b730d2e4fbe7ddc0291ffa992)
> 
> Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
> Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>

Applied, thanks

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

end of thread, other threads:[~2015-12-06 23:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-30 20:41 [PATCH] librte_port: fix mbuf allocation in source port Fan Zhang
2015-11-30 20:41 ` [PATCH] librte_port: fix sink port statistics Fan Zhang
2015-12-06 23:25   ` Thomas Monjalon
2015-12-06 23:25 ` [PATCH] librte_port: fix mbuf allocation in source port Thomas Monjalon

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.