[dpdk-dev] [PATCH 1/8] lpm: Fix pointer aliasing issues
Bruce Richardson
bruce.richardson at intel.com
Thu Feb 25 22:30:54 CET 2016
On Thu, Feb 25, 2016 at 01:48:34PM -0500, Aaron Conole wrote:
> The current implementation attempts to use a uint16_t to alias the lpm table
> structures. Such aliasing can break optimizer performance. This patch uses
> union type indirection and adds static inline functions for performing the
> aliasing.
>
> Signed-off-by: Aaron Conole <aconole at redhat.com>
> ---
> lib/librte_lpm/rte_lpm.h | 53 +++++++++++++++++++++++++++++++++++++-----------
> 1 file changed, 41 insertions(+), 12 deletions(-)
>
> diff --git a/lib/librte_lpm/rte_lpm.h b/lib/librte_lpm/rte_lpm.h
> index c299ce2..eae6ff1 100644
> --- a/lib/librte_lpm/rte_lpm.h
> +++ b/lib/librte_lpm/rte_lpm.h
> @@ -157,6 +157,33 @@ struct rte_lpm {
> };
>
> /**
> + * Convert from tbl_entry types to integer types
> + */
> +static inline uint16_t
> +rte_lpm_tbl24_entry_to_uint16(const struct rte_lpm_tbl24_entry *entry)
> +{
> + union {
> + uint16_t i;
> + struct rte_lpm_tbl24_entry s;
> + } tbl_entry_u;
> +
> + tbl_entry_u.s = *entry;
> + return tbl_entry_u.i;
> +}
> +
> +static inline uint16_t
> +rte_lpm_tbl8_entry_to_uint16(const struct rte_lpm_tbl8_entry *entry)
> +{
> + union {
> + uint16_t i;
> + struct rte_lpm_tbl8_entry s;
> + } tbl_entry_u;
> +
> + tbl_entry_u.s = *entry;
> + return tbl_entry_u.i;
> +}
> +
These two new functions could be reduced to one with the help of patch:
http://dpdk.org/dev/patchwork/patch/9087/
Anyone care to go back and review or ack that patch for me and simplify all
the lpm code just that little bit?
/Bruce
More information about the dev
mailing list