DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v3] mempool: Add sanity check when secondary link-in less mempools than primary
@ 2016-11-10 23:25 Jean Tourrilhes
  2019-01-11 21:58 ` Ferruh Yigit
  0 siblings, 1 reply; 2+ messages in thread
From: Jean Tourrilhes @ 2016-11-10 23:25 UTC (permalink / raw)
  To: dev, Thomas Monjalon, David Marchand, Sergio Gonzalez Monroy

If the mempool ops the caller wants to use is not registered, the
library will segfault in an obscure way when trying to use that
mempool. It's better to catch it early and warn the user.

If the primary and secondary process were build using different build
systems, the list of constructors included by the linker in each
binary might be different. Mempools are registered via constructors, so
the linker magic will directly impact which mempools are registered with
the primary and the secondary.
DPDK currently assumes that the secondary has a superset of the
mempools registered at the primary, and they are in the same order
(same index in primary and secondary). In some build scenario, the
secondary might not initialise any mempools at all.

This would also catch cases where there is a bug in the mempool
registration, or some memory corruptions, but this has not been
observed.

Signed-off-by: Jean Tourrilhes <jt@labs.hpe.com>
---
 lib/librte_mempool/rte_mempool.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c
index e94e56f..bbb6723 100644
--- a/lib/librte_mempool/rte_mempool.c
+++ b/lib/librte_mempool/rte_mempool.c
@@ -1273,6 +1273,29 @@ rte_mempool_lookup(const char *name)
 		return NULL;
 	}
 
+	/* Sanity check : secondary may have initialised less mempools
+	 * than primary due to linker and constructor magic. Or maybe
+	 * there is a mempool corruption or bug. In any case, we can't
+	 * go on, we will segfault in an obscure way.
+	 * This does not detect the cases where the constructor order
+	 * is different between primary and secondary or where the
+	 * index points to the wrong ops. This would require more
+	 * extensive changes, and is much less likely. Jean II */
+	if (mp->ops_index >= (int32_t) rte_mempool_ops_table.num_ops) {
+		unsigned i;
+		/* Dump list of mempool ops for further investigation.
+		 * In most cases, list is empty... */
+		for (i = 0; i < rte_mempool_ops_table.num_ops; i++) {
+			RTE_LOG(ERR, EAL, "Registered mempool[%d] is %s\n",
+				i, rte_mempool_ops_table.ops[i].name);
+		}
+		/* Do not dump mempool list itself, it will segfault. */
+		rte_panic("Cannot find ops for mempool, ops_index %d, "
+			  "num_ops %d - maybe due to build process or "
+			  "linker configuration\n",
+			  mp->ops_index, rte_mempool_ops_table.num_ops);
+	}
+
 	return mp;
 }
 

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

* Re: [dpdk-dev] [PATCH v3] mempool: Add sanity check when secondary link-in less mempools than primary
  2016-11-10 23:25 [dpdk-dev] [PATCH v3] mempool: Add sanity check when secondary link-in less mempools than primary Jean Tourrilhes
@ 2019-01-11 21:58 ` Ferruh Yigit
  0 siblings, 0 replies; 2+ messages in thread
From: Ferruh Yigit @ 2019-01-11 21:58 UTC (permalink / raw)
  To: Jean Tourrilhes; +Cc: dpdk-dev, David Marchand, Thomas Monjalon

On 11/10/2016 11:25 PM, jt at labs.hpe.com (Jean Tourrilhes) wrote:
> If the mempool ops the caller wants to use is not registered, the
> library will segfault in an obscure way when trying to use that
> mempool. It's better to catch it early and warn the user.
> 
> If the primary and secondary process were build using different build
> systems, the list of constructors included by the linker in each
> binary might be different. Mempools are registered via constructors, so
> the linker magic will directly impact which mempools are registered with
> the primary and the secondary.
> DPDK currently assumes that the secondary has a superset of the
> mempools registered at the primary, and they are in the same order
> (same index in primary and secondary). In some build scenario, the
> secondary might not initialise any mempools at all.
> 
> This would also catch cases where there is a bug in the mempool
> registration, or some memory corruptions, but this has not been
> observed.
> 
> Signed-off-by: Jean Tourrilhes <jt at labs.hpe.com>

Hi Jean,

There is no comment on the patch for a long time, more than two years, updating
patch status as rejected, if it is still relevant please let us know.

Sorry for any inconvenience caused.

For record, patch: https://patches.dpdk.org/patch/17000/

> ---
>  lib/librte_mempool/rte_mempool.c | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
> 
> diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c
> index e94e56f..bbb6723 100644
> --- a/lib/librte_mempool/rte_mempool.c
> +++ b/lib/librte_mempool/rte_mempool.c
> @@ -1273,6 +1273,29 @@ rte_mempool_lookup(const char *name)
>  		return NULL;
>  	}
>  
> +	/* Sanity check : secondary may have initialised less mempools
> +	 * than primary due to linker and constructor magic. Or maybe
> +	 * there is a mempool corruption or bug. In any case, we can't
> +	 * go on, we will segfault in an obscure way.
> +	 * This does not detect the cases where the constructor order
> +	 * is different between primary and secondary or where the
> +	 * index points to the wrong ops. This would require more
> +	 * extensive changes, and is much less likely. Jean II */
> +	if (mp->ops_index >= (int32_t) rte_mempool_ops_table.num_ops) {
> +		unsigned i;
> +		/* Dump list of mempool ops for further investigation.
> +		 * In most cases, list is empty... */
> +		for (i = 0; i < rte_mempool_ops_table.num_ops; i++) {
> +			RTE_LOG(ERR, EAL, "Registered mempool[%d] is %s\n",
> +				i, rte_mempool_ops_table.ops[i].name);
> +		}
> +		/* Do not dump mempool list itself, it will segfault. */
> +		rte_panic("Cannot find ops for mempool, ops_index %d, "
> +			  "num_ops %d - maybe due to build process or "
> +			  "linker configuration\n",
> +			  mp->ops_index, rte_mempool_ops_table.num_ops);
> +	}
> +
>  	return mp;
>  }
>  
> 

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

end of thread, other threads:[~2019-01-11 21:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-10 23:25 [dpdk-dev] [PATCH v3] mempool: Add sanity check when secondary link-in less mempools than primary Jean Tourrilhes
2019-01-11 21:58 ` Ferruh Yigit

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).