From: Stephen Hemminger <stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org>
To: Vladimir Medvedkin <medvedkinv-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: dev-VfR2kkLFssw@public.gmane.org
Subject: Re: [PATCH] Add toeplitz hash algorithm
Date: Wed, 8 Apr 2015 15:24:30 -0700 [thread overview]
Message-ID: <20150408152430.0bdedfd6@urahara> (raw)
In-Reply-To: <1428519973-10550-1-git-send-email-medvedkinv-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
On Wed, 8 Apr 2015 15:06:13 -0400
Vladimir Medvedkin <medvedkinv-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> Software implementation of the Toeplitz hash function used by RSS.
> Can be used either for packet distribution on single queue NIC
> or for simulating of RSS computation on specific NIC (for example
> after GRE header decapsulating).
>
> Signed-off-by: Vladimir Medvedkin <medvedkinv-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> +enum rte_thash_flag {
> + RTE_THASH_L3 = 0, //calculate hash tacking into account only l3 header
> + RTE_THASH_L4 //calculate hash tacking into account l4 + l4 headers
> +};
> +
> +/**
> + * Prepare special converted key to use with rte_softrss_be()
> + * @param orig
> + * pointer to original RSS key
> + * @param targ
> + * pointer to target RSS key
> + */
> +
> +static inline void
> +rte_convert_rss_key(uint32_t *orig, uint32_t *targ)
orig should be const
> +{
> + int i;
> + for (i = 0; i < 10; i++) {
> + targ[i] = rte_be_to_cpu_32(orig[i]);
> + }
> +}
> +static inline uint32_t
> +rte_softrss(uint32_t sip, uint32_t dip, uint16_t sp, uint16_t dp, enum rte_thash_flag flag, uint32_t *rss_key)
rss_key should be const
> +{
> + uint32_t ret = 0;
> + int i;
> + for (i = 0; i < 32; i++) {
blank line after declaration please
> + if (sip & (1 << (31 - i))) {
> + ret ^= (rte_cpu_to_be_32(*rss_key) << i)|(uint32_t)((uint64_t)(rte_cpu_to_be_32(*(rss_key + 1))) >> (32 - i));
Long expression > 80 characters.
Repeated multiple times (should be inline)
Extra parens ()
Extension to 64 bits is only to avoid compiler warning?
> + }
> + }
> + rss_key++;
> + for (i = 0; i < 32; i++) {
> + if (dip & (1 << (31 - i))) {
> + ret ^= (rte_cpu_to_be_32(*rss_key) << i)|(uint32_t)((uint64_t)(rte_cpu_to_be_32(*(rss_key + 1))) >> (32 - i));
> + }
> + }
> + if (flag == RTE_THASH_L4) {
> + rss_key++;
> + for (i = 0; i < 32; i++) {
> + if (((sp<<16)|dp) & (1 << (31 - i))) {
> + ret ^= (rte_cpu_to_be_32(*rss_key) << i)|(uint32_t)((uint64_t)(rte_cpu_to_be_32(*(rss_key + 1))) >> (32 - i));
> + }
> + }
> + }
> + return ret;
> +}
> +
> +/**
> + * Optimized implementation.
> + * If you want the calculated hash value matches NIC RSS value
> + * you have to use special converted key.
> + * All ip's and ports have to be CPU byte order.
> + * @param sip
> + * Source ip address.
> + * @param dip
> + * Destination ip address.
> + * @param sp
> + * Source TCP|UDP port.
> + * @param dp
> + * Destination TCP|UDP port.
> + * @param flag
> + * RTE_THASH_L3: calculate hash tacking into account only sip and dip
> + * RTE_THASH_L4: calculate hash tacking into account sip, dip, sp and dp
> + * @param *rss_key
> + * Pointer to 40-byte RSS hash key.
> + * @return
> + * Calculated hash value.
> + */
> +
> +static inline uint32_t
> +rte_softrss_be(uint32_t sip, uint32_t dip, uint16_t sp, uint16_t dp, enum rte_thash_flag flag, uint32_t *rss_key)
> +{
Same problems as previous code.
Also lots of copy paste (see Do Not Repeat Yourself principle).
next prev parent reply other threads:[~2015-04-08 22:24 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-08 19:06 [PATCH] Add toeplitz hash algorithm Vladimir Medvedkin
[not found] ` <1428519973-10550-1-git-send-email-medvedkinv-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-04-08 22:24 ` Stephen Hemminger [this message]
2015-04-09 12:50 ` Vladimir Medvedkin
2015-04-09 6:37 ` Gleb Natapov
[not found] ` <20150409063742.GA16818-RmZWMc9puTNJc61us3aD9laTQe2KTcn/@public.gmane.org>
2015-04-09 12:57 ` Vladimir Medvedkin
2015-05-05 13:20 ` [PATCH v2] Add toeplitz hash algorithm used by RSS Vladimir Medvedkin
[not found] ` <1430832011-17764-1-git-send-email-medvedkinv-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-05-05 16:03 ` Chilikin, Andrey
[not found] ` <AAC06825A3B29643AF5372F5E0DDF053350C754D-kPTMFJFq+rFT4JjzTwqWc7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-05-07 10:28 ` Vladimir Medvedkin
[not found] ` <CANDrEH=uUjgE8aVsFJ6qSWnh3bZfXjKyyx3xfQFfjiHV0DWw6A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-07 11:38 ` Chilikin, Andrey
[not found] ` <AAC06825A3B29643AF5372F5E0DDF053350C7DF4-kPTMFJFq+rFT4JjzTwqWc7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-05-08 14:58 ` Vladimir Medvedkin
2015-05-08 14:58 ` Vladimir Medvedkin
2015-06-03 14:07 ` Thomas Monjalon
2015-06-16 9:07 ` Thomas Monjalon
2015-06-16 10:36 ` Bruce Richardson
2015-06-16 12:29 ` Bruce Richardson
2015-06-16 19:26 ` Vladimir Medvedkin
2015-06-19 14:55 ` [PATCH v4] " Vladimir Medvedkin
2015-06-19 15:59 ` Richardson, Bruce
2015-06-19 16:14 ` Vladimir Medvedkin
2015-06-29 12:18 ` Bruce Richardson
2015-06-19 16:33 ` Mcnamara, John
2015-06-19 17:31 ` [PATCH v5] " Vladimir Medvedkin
2015-06-29 12:40 ` Bruce Richardson
2015-06-30 12:14 ` Vladimir Medvedkin
2015-06-30 12:48 ` Bruce Richardson
2015-06-30 23:40 ` [PATCH v6] " Vladimir Medvedkin
2015-07-01 15:29 ` Bruce Richardson
2015-07-01 21:23 ` Thomas Monjalon
2015-07-22 7:55 ` Tony Lu
2015-07-27 11:57 ` Vladimir Medvedkin
2015-07-29 5:01 ` Qiu, Michael
2015-07-29 14:00 ` Vladimir Medvedkin
2015-06-19 17:32 ` [PATCH v3] Add unit test for thash library Vladimir Medvedkin
2015-06-29 12:42 ` Bruce Richardson
2015-06-30 23:41 ` [PATCH v4] " Vladimir Medvedkin
2015-07-01 15:30 ` Bruce Richardson
2015-07-01 21:28 ` 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=20150408152430.0bdedfd6@urahara \
--to=stephen-otpzqlsittunbdjkjebofr2eb7je58tq@public.gmane.org \
--cc=dev-VfR2kkLFssw@public.gmane.org \
--cc=medvedkinv-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
/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.