[dpdk-dev] [PATCH] lib/table: fix wrong type of nht field
> -Original Message- > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Michal Jastrzebski > Sent: Monday, June 20, 2016 11:10 AM > To: dev at dpdk.org > Cc: Kobylinski, MichalX > Subject: [dpdk-dev] [PATCH] lib/table: fix wrong type of nht field > > From: Michal Kobylinski > > Change type of nht field from uint32_t to uint8_t and increase max of > next hops. > > Fixes: dc81ebbacaeb ("lpm: extend IPv4 next hop field") > > Signed-off-by: Michal Kobylinski > Acked-by: Cristian Dumitrescu > --- > examples/ip_pipeline/pipeline/pipeline_routing_be.h | 2 +- > lib/librte_table/rte_table_lpm.c| 8 > 2 files changed, 5 insertions(+), 5 deletions(-) > > diff --git a/examples/ip_pipeline/pipeline/pipeline_routing_be.h > b/examples/ip_pipeline/pipeline/pipeline_routing_be.h > index 1276342..ea50896 100644 > --- a/examples/ip_pipeline/pipeline/pipeline_routing_be.h > +++ b/examples/ip_pipeline/pipeline/pipeline_routing_be.h > @@ -42,7 +42,7 @@ > * Pipeline argument parsing > */ > #ifndef PIPELINE_ROUTING_N_ROUTES_DEFAULT > -#define PIPELINE_ROUTING_N_ROUTES_DEFAULT 4096 > +#define PIPELINE_ROUTING_N_ROUTES_DEFAULT 65536 > #endif > Changing the PIPELINE_ROUTING_N_ROUTES_DEFAULT is actually not required, this is simply the default value which can be changed through the configuration file. Please remove this. > enum pipeline_routing_encap { > diff --git a/lib/librte_table/rte_table_lpm.c > b/lib/librte_table/rte_table_lpm.c > index cdeb0f5..f2eaed5 100644 > --- a/lib/librte_table/rte_table_lpm.c > +++ b/lib/librte_table/rte_table_lpm.c > @@ -44,7 +44,7 @@ > > #include "rte_table_lpm.h" > > -#define RTE_TABLE_LPM_MAX_NEXT_HOPS256 > +#define RTE_TABLE_LPM_MAX_NEXT_HOPS65536 > With the next hop size of 24 bits, we can now make this configurable, so please use: #ifndef RTE_TABLE_LPM_MAX_NEXT_HOPS #define RTE_TABLE_LPM_MAX_NEXT_HOPS65536 #endif > #ifdef RTE_TABLE_STATS_COLLECT > > @@ -74,7 +74,7 @@ struct rte_table_lpm { > > /* Next Hop Table (NHT) */ > uint32_t nht_users[RTE_TABLE_LPM_MAX_NEXT_HOPS]; > - uint32_t nht[0] __rte_cache_aligned; > + uint8_t nht[0] __rte_cache_aligned; > }; > > static void * > @@ -188,7 +188,7 @@ nht_find_existing(struct rte_table_lpm *lpm, void > *entry, uint32_t *pos) > uint32_t i; > > for (i = 0; i < RTE_TABLE_LPM_MAX_NEXT_HOPS; i++) { > - uint32_t *nht_entry = >nht[i * lpm->entry_size]; > + uint8_t *nht_entry = >nht[i * lpm->entry_size]; > > if ((lpm->nht_users[i] > 0) && (memcmp(nht_entry, entry, > lpm->entry_unique_size) == 0)) { > @@ -242,7 +242,7 @@ rte_table_lpm_entry_add( > > /* Find existing or free NHT entry */ > if (nht_find_existing(lpm, entry, _pos) == 0) { > - uint32_t *nht_entry; > + uint8_t *nht_entry; > > if (nht_find_free(lpm, _pos) == 0) { > RTE_LOG(ERR, TABLE, "%s: NHT full\n", __func__); > -- > 1.9.1
[dpdk-dev] [PATCH] lib/table: fix wrong type of nht field
> -Original Message- > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Thomas Monjalon > Sent: Monday, June 20, 2016 11:14 AM > To: Jastrzebski, MichalX K ; Kobylinski, > MichalX > Cc: dev at dpdk.org > Subject: Re: [dpdk-dev] [PATCH] lib/table: fix wrong type of nht field > > 2016-06-20 12:10, Michal Jastrzebski: > > From: Michal Kobylinski > > > > Change type of nht field from uint32_t to uint8_t and increase max of > > next hops. > > > > Fixes: dc81ebbacaeb ("lpm: extend IPv4 next hop field") > > Why the type is wrong? The lpm->nht is simply some raw memory allocated at the end of the table context using the usual pattern: struct rte_table_lpm { ... uint8_t nht[0] __rte_cache_aligned; } Therefore, when we do: nht_entry = >nht[i * lpm->entry_size]; in several places, it makes big difference whether nht_entry is declared as uin8_t * (correct) or uint32_t * (incorrect), as the position computed by the latter is 4 times the position computed by the former ;( Michal K and Michal J, I just realized we still need to do a small change to this patch, I will reply to the original mail now. So Thomas, sorry, there is one small change, we'll send new version soon. Thanks, Cristian
[dpdk-dev] [PATCH] lib/table: fix wrong type of nht field
2016-06-20 12:10, Michal Jastrzebski: > From: Michal Kobylinski > > Change type of nht field from uint32_t to uint8_t and increase max of > next hops. > > Fixes: dc81ebbacaeb ("lpm: extend IPv4 next hop field") Why the type is wrong?
[dpdk-dev] [PATCH] lib/table: fix wrong type of nht field
From: Michal KobylinskiChange type of nht field from uint32_t to uint8_t and increase max of next hops. Fixes: dc81ebbacaeb ("lpm: extend IPv4 next hop field") Signed-off-by: Michal Kobylinski Acked-by: Cristian Dumitrescu --- examples/ip_pipeline/pipeline/pipeline_routing_be.h | 2 +- lib/librte_table/rte_table_lpm.c| 8 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/ip_pipeline/pipeline/pipeline_routing_be.h b/examples/ip_pipeline/pipeline/pipeline_routing_be.h index 1276342..ea50896 100644 --- a/examples/ip_pipeline/pipeline/pipeline_routing_be.h +++ b/examples/ip_pipeline/pipeline/pipeline_routing_be.h @@ -42,7 +42,7 @@ * Pipeline argument parsing */ #ifndef PIPELINE_ROUTING_N_ROUTES_DEFAULT -#define PIPELINE_ROUTING_N_ROUTES_DEFAULT 4096 +#define PIPELINE_ROUTING_N_ROUTES_DEFAULT 65536 #endif enum pipeline_routing_encap { diff --git a/lib/librte_table/rte_table_lpm.c b/lib/librte_table/rte_table_lpm.c index cdeb0f5..f2eaed5 100644 --- a/lib/librte_table/rte_table_lpm.c +++ b/lib/librte_table/rte_table_lpm.c @@ -44,7 +44,7 @@ #include "rte_table_lpm.h" -#define RTE_TABLE_LPM_MAX_NEXT_HOPS256 +#define RTE_TABLE_LPM_MAX_NEXT_HOPS65536 #ifdef RTE_TABLE_STATS_COLLECT @@ -74,7 +74,7 @@ struct rte_table_lpm { /* Next Hop Table (NHT) */ uint32_t nht_users[RTE_TABLE_LPM_MAX_NEXT_HOPS]; - uint32_t nht[0] __rte_cache_aligned; + uint8_t nht[0] __rte_cache_aligned; }; static void * @@ -188,7 +188,7 @@ nht_find_existing(struct rte_table_lpm *lpm, void *entry, uint32_t *pos) uint32_t i; for (i = 0; i < RTE_TABLE_LPM_MAX_NEXT_HOPS; i++) { - uint32_t *nht_entry = >nht[i * lpm->entry_size]; + uint8_t *nht_entry = >nht[i * lpm->entry_size]; if ((lpm->nht_users[i] > 0) && (memcmp(nht_entry, entry, lpm->entry_unique_size) == 0)) { @@ -242,7 +242,7 @@ rte_table_lpm_entry_add( /* Find existing or free NHT entry */ if (nht_find_existing(lpm, entry, _pos) == 0) { - uint32_t *nht_entry; + uint8_t *nht_entry; if (nht_find_free(lpm, _pos) == 0) { RTE_LOG(ERR, TABLE, "%s: NHT full\n", __func__); -- 1.9.1