All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
To: Hemant Agrawal <hemant.agrawal@nxp.com>
Cc: <dev@dpdk.org>
Subject: Re: [PATCH] examples/l3fwd: em path hash offload to machine
Date: Wed, 5 Oct 2016 17:22:45 +0530	[thread overview]
Message-ID: <20161005115243.GA7027@localhost.localdomain> (raw)
In-Reply-To: <1471964080-29958-1-git-send-email-hemant.agrawal@nxp.com>

On Tue, Aug 23, 2016 at 08:24:39PM +0530, Hemant Agrawal wrote:

Maybe you can change the subject line to:
examples/l3fwd: em: use hw accelerated crc hash function for arm64
instead of:
examples/l3fwd: em path hash offload to machine

> if machine level CRC extension are available, offload the
> hash to machine provided functions e.g. armv8-a CRC extensions
> support it
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  examples/l3fwd/l3fwd_em.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
> index def5a02..a889c67 100644
> --- a/examples/l3fwd/l3fwd_em.c
> +++ b/examples/l3fwd/l3fwd_em.c
> @@ -58,13 +58,13 @@
>  
>  #include "l3fwd.h"
>  
> -#ifdef RTE_MACHINE_CPUFLAG_SSE4_2
> +#if defined(RTE_MACHINE_CPUFLAG_SSE4_2) || defined(RTE_MACHINE_CPUFLAG_CRC32)

Rather than adding new compilation flag everywhere, Maybe you can add

#if defined(RTE_MACHINE_CPUFLAG_SSE4_2) &&
defined(RTE_MACHINE_CPUFLAG_CRC32)
#define EM_HASH_CRC 1
#endif

something like above to reduce the change for future platforms with crc
support.

Other than that, you can add:
Reviewed-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>

>  #include <rte_hash_crc.h>
>  #define DEFAULT_HASH_FUNC       rte_hash_crc
>  #else
>  #include <rte_jhash.h>
>  #define DEFAULT_HASH_FUNC       rte_jhash
> -#endif /* RTE_MACHINE_CPUFLAG_SSE4_2 */
> +#endif
>  
>  #define IPV6_ADDR_LEN 16
>  
> @@ -169,17 +169,17 @@ ipv4_hash_crc(const void *data, __rte_unused uint32_t data_len,
>  	t = k->proto;
>  	p = (const uint32_t *)&k->port_src;
>  
> -#ifdef RTE_MACHINE_CPUFLAG_SSE4_2
> +#if defined(RTE_MACHINE_CPUFLAG_SSE4_2) || defined(RTE_MACHINE_CPUFLAG_CRC32)
>  	init_val = rte_hash_crc_4byte(t, init_val);
>  	init_val = rte_hash_crc_4byte(k->ip_src, init_val);
>  	init_val = rte_hash_crc_4byte(k->ip_dst, init_val);
>  	init_val = rte_hash_crc_4byte(*p, init_val);
> -#else /* RTE_MACHINE_CPUFLAG_SSE4_2 */
> +#else
>  	init_val = rte_jhash_1word(t, init_val);
>  	init_val = rte_jhash_1word(k->ip_src, init_val);
>  	init_val = rte_jhash_1word(k->ip_dst, init_val);
>  	init_val = rte_jhash_1word(*p, init_val);
> -#endif /* RTE_MACHINE_CPUFLAG_SSE4_2 */
> +#endif
>  
>  	return init_val;
>  }
> @@ -191,16 +191,16 @@ ipv6_hash_crc(const void *data, __rte_unused uint32_t data_len,
>  	const union ipv6_5tuple_host *k;
>  	uint32_t t;
>  	const uint32_t *p;
> -#ifdef RTE_MACHINE_CPUFLAG_SSE4_2
> +#if defined(RTE_MACHINE_CPUFLAG_SSE4_2) || defined(RTE_MACHINE_CPUFLAG_CRC32)
>  	const uint32_t  *ip_src0, *ip_src1, *ip_src2, *ip_src3;
>  	const uint32_t  *ip_dst0, *ip_dst1, *ip_dst2, *ip_dst3;
> -#endif /* RTE_MACHINE_CPUFLAG_SSE4_2 */
> +#endif
>  
>  	k = data;
>  	t = k->proto;
>  	p = (const uint32_t *)&k->port_src;
>  
> -#ifdef RTE_MACHINE_CPUFLAG_SSE4_2
> +#if defined(RTE_MACHINE_CPUFLAG_SSE4_2) || defined(RTE_MACHINE_CPUFLAG_CRC32)
>  	ip_src0 = (const uint32_t *) k->ip_src;
>  	ip_src1 = (const uint32_t *)(k->ip_src+4);
>  	ip_src2 = (const uint32_t *)(k->ip_src+8);
> @@ -219,14 +219,14 @@ ipv6_hash_crc(const void *data, __rte_unused uint32_t data_len,
>  	init_val = rte_hash_crc_4byte(*ip_dst2, init_val);
>  	init_val = rte_hash_crc_4byte(*ip_dst3, init_val);
>  	init_val = rte_hash_crc_4byte(*p, init_val);
> -#else /* RTE_MACHINE_CPUFLAG_SSE4_2 */
> +#else
>  	init_val = rte_jhash_1word(t, init_val);
>  	init_val = rte_jhash(k->ip_src,
>  			sizeof(uint8_t) * IPV6_ADDR_LEN, init_val);
>  	init_val = rte_jhash(k->ip_dst,
>  			sizeof(uint8_t) * IPV6_ADDR_LEN, init_val);
>  	init_val = rte_jhash_1word(*p, init_val);
> -#endif /* RTE_MACHINE_CPUFLAG_SSE4_2 */
> +#endif
>  	return init_val;
>  }
>  
> -- 
> 1.9.1
> 

  parent reply	other threads:[~2016-10-05 11:53 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-23 14:54 [PATCH] examples/l3fwd: em path hash offload to machine Hemant Agrawal
2016-08-23 14:54 ` [PATCH] examples/l3fwd: enabling 4m hash for all 64 bit archs Hemant Agrawal
2016-10-13  8:22   ` Thomas Monjalon
2016-10-05 11:52 ` Jerin Jacob [this message]
2016-10-07  7:06   ` [PATCH] examples/l3fwd: em path hash offload to machine Hemant Agrawal
2016-10-13 18:47 ` [PATCH v2] examples/l3fwd: em: use hw accelerated crc hash function for arm64 Hemant Agrawal
2016-10-13 13:36   ` Jerin Jacob
2016-10-14  5:32     ` Hemant Agrawal
2016-10-14 11:10   ` [PATCHv3] " Hemant Agrawal
2016-10-25 16:49     ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161005115243.GA7027@localhost.localdomain \
    --to=jerin.jacob@caviumnetworks.com \
    --cc=dev@dpdk.org \
    --cc=hemant.agrawal@nxp.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.