From: David Christensen <drc@linux.vnet.ibm.com>
To: Ferruh Yigit <ferruh.yigit@intel.com>,
Michal Krawczyk <mk@semihalf.com>,
dev@dpdk.org
Cc: mw@semihalf.com, mba@semihalf.com, gtzalik@amazon.com,
evgenys@amazon.com, igorch@amazon.com,
arybchenko@solarflare.com, Thomas Monjalon <thomas@monjalon.net>,
David Marchand <david.marchand@redhat.com>
Subject: Re: [dpdk-dev] [PATCH v3 04/30] net/ena/base: generate default, random RSS hash key
Date: Fri, 1 May 2020 15:56:52 -0700 [thread overview]
Message-ID: <54396518-ee01-3d37-4002-a9d72a298764@linux.vnet.ibm.com> (raw)
In-Reply-To: <1b5af199-684b-c49f-024f-1ba27c4279b6@intel.com>
>> Although the RSS key still cannot be set, it is now being generated
>> every time the driver is being initialized.
>>
>> Multiple devices can still have the same key if they're used by the same
>> driver.
>>
>> Signed-off-by: Michal Krawczyk <mk@semihalf.com>
>> Reviewed-by: Igor Chauskin <igorch@amazon.com>
>> Reviewed-by: Guy Tzalik <gtzalik@amazon.com>
>
> <...>
>
>> @@ -256,6 +256,23 @@ static const struct eth_dev_ops ena_dev_ops = {
>> .reta_query = ena_rss_reta_query,
>> };
>>
>> +void ena_rss_key_fill(void *key, size_t size)
>> +{
>> + static bool key_generated;
>> + static uint8_t default_key[ENA_HASH_KEY_SIZE];
>> + size_t i;
>> +
>> + RTE_ASSERT(size <= ENA_HASH_KEY_SIZE);
>> +
>> + if (!key_generated) {
>> + for (i = 0; i < ENA_HASH_KEY_SIZE; ++i)
>> + default_key[i] = rte_rand() & 0xff;
>> + key_generated = true;
>> + }
>> +
>> + rte_memcpy(key, default_key, size);
>> +}
>> +
>
> I have updated PPC cross compiler [1] and now getting following build error [2].
> cc'ed David from IBM too. Can you please check this?
>
> [1]
> powerpc64le-linux-gcc.br_real (Buildroot 2020.02-00011-g7ea8a52) 9.3.0
>
>
> [2] https://pastebin.com/h70uFJmm
>
> In file included from /.../dpdk/_ppc_64-power8-linuxapp-gcc/include/rte_ether.h:21,
> from /.../dpdk/drivers/net/ena/ena_ethdev.c:7:
> /.../dpdk/drivers/net/ena/ena_ethdev.c: In function ‘ena_rss_key_fill’:
> /.../dpdk/_ppc_64-power8-linuxapp-gcc/include/rte_memcpy.h:47:2: error: array
> subscript 3 is outside array bounds of ‘uint8_t[40]’ {aka ‘unsigned char[40]’}
> [-Werror=array-bounds]
> 47 | vec_vsx_st(vec_vsx_ld(48, src), 48, dst);
> | ^~~~~~~~~~
> /.../dpdk/drivers/net/ena/ena_ethdev.c:277:17: note: while referencing ‘default_key’
> 277 | static uint8_t default_key[ENA_HASH_KEY_SIZE];
> | ^~~~~~~~~~~
> In file included from /.../dpdk/_ppc_64-power8-linuxapp-gcc/include/rte_ether.h:21,
> from /.../dpdk/drivers/net/ena/ena_ethdev.c:7:
> /.../dpdk/_ppc_64-power8-linuxapp-gcc/include/rte_memcpy.h:47:2: error: array
> subscript [3, 7] is outside array bounds of ‘uint8_t[40]’ {aka ‘unsigned
> char[40]’} [-Werror=array-bounds]
> 47 | vec_vsx_st(vec_vsx_ld(48, src), 48, dst);
> | ^~~~~~~~~~
> /.../dpdk/drivers/net/ena/ena_ethdev.c:277:17: note: while referencing ‘default_key’
> 277 | static uint8_t default_key[ENA_HASH_KEY_SIZE];
> | ^~~~~~~~~~~
>
Appears to be an open gcc bug
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90387). PPC optimized
version of rte_memcpy() uses __builtin_constant_p() which triggers the
error when -Werror=array-bounds is used, x86 DPDK does not use
__builtin_constant_p() and does not encounter an error. Can you try the
following? Worked for me with Ubuntu 20.04.
Dave
diff --git a/lib/librte_eal/ppc/include/rte_memcpy.h
b/lib/librte_eal/ppc/include/rte_memcpy.h
index 25311ba1d..973e2bebe 100644
--- a/lib/librte_eal/ppc/include/rte_memcpy.h
+++ b/lib/librte_eal/ppc/include/rte_memcpy.h
@@ -17,6 +17,11 @@ extern "C" {
#include "generic/rte_memcpy.h"
+#if (__GNUC__ == 9 && __GNUC_MINOR__ < 4)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Warray-bounds"
+#endif
+
static inline void
rte_mov16(uint8_t *dst, const uint8_t *src)
{
@@ -108,6 +113,13 @@ rte_memcpy_func(void *dst, const void *src, size_t n)
return ret;
}
+ if (n <= 48) {
+ rte_mov32((uint8_t *)dst, (const uint8_t *)src);
+ rte_mov16((uint8_t *)dst - 16 + n,
+ (const uint8_t *)src - 16 + n);
+ return ret;
+ }
+
if (n <= 64) {
rte_mov32((uint8_t *)dst, (const uint8_t *)src);
rte_mov32((uint8_t *)dst - 32 + n,
@@ -192,6 +204,11 @@ rte_memcpy_func(void *dst, const void *src, size_t n)
return ret;
}
+#if (__GNUC__ == 9 && __GNUC_MINOR__ < 4)
+#pragma GCC diagnostic pop
+#endif
+
+
#ifdef __cplusplus
}
#endif
next prev parent reply other threads:[~2020-05-01 22:57 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-08 8:28 [dpdk-dev] [PATCH v3 00/30] Update ENA driver to v2.1.0 Michal Krawczyk
2020-04-08 8:28 ` [dpdk-dev] [PATCH v3 01/30] net/ena: check if size of buffer is at least 1400B Michal Krawczyk
2020-04-08 8:28 ` [dpdk-dev] [PATCH v3 02/30] net/ena/base: make allocation macros thread-safe Michal Krawczyk
2020-04-08 8:28 ` [dpdk-dev] [PATCH v3 03/30] net/ena/base: prevent allocation of 0-sized memory Michal Krawczyk
2020-04-08 8:28 ` [dpdk-dev] [PATCH v3 04/30] net/ena/base: generate default, random RSS hash key Michal Krawczyk
2020-05-01 15:28 ` Ferruh Yigit
2020-05-01 22:56 ` David Christensen [this message]
2020-04-08 8:28 ` [dpdk-dev] [PATCH v3 05/30] net/ena/base: fix testing for supported hash func Michal Krawczyk
2020-04-08 8:28 ` [dpdk-dev] [PATCH v3 06/30] net/ena/base: remove conversion of the ind tbl Michal Krawczyk
2020-04-08 8:28 ` [dpdk-dev] [PATCH v3 07/30] net/ena/base: rework interrupt moderation Michal Krawczyk
2020-04-08 8:28 ` [dpdk-dev] [PATCH v3 08/30] net/ena/base: remove extra properties strings Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 09/30] net/ena/base: add accelerated LLQ mode Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 10/30] net/ena/base: fix documentation of the functions Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 11/30] net/ena/base: fix indentation in cq polling Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 12/30] net/ena/base: add error logs when preparing Tx Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 13/30] net/ena/base: use 48-bit memory addresses in ena_com Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 14/30] net/ena/base: fix types for printing timestamps Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 15/30] net/ena/base: fix indentation of multiple defines Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 16/30] net/ena/base: update gen date and commit Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 17/30] net/ena: set IO ring size to the valid value Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 18/30] net/ena: refactor getting IO queues capabilities Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 19/30] net/ena: add support for large LLQ headers Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 20/30] net/ena: remove memory barriers before doorbells Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 21/30] net/ena: add Tx drops statistic Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 22/30] net/ena: disable meta caching Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 23/30] net/ena: refactor Rx path Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 24/30] net/ena: rework getting number of available descs Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 25/30] net/ena: limit refill threshold by fixed value Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 26/30] net/ena: use macros for ring idx operations Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 27/30] net/ena: refactor Tx path Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 28/30] net/ena: reuse 0 length Rx descriptor Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 29/30] doc: add notes on ENA usage on metal instances Michal Krawczyk
2020-04-08 8:29 ` [dpdk-dev] [PATCH v3 30/30] net/ena: update version of the driver to v2.1.0 Michal Krawczyk
2020-04-08 13:23 ` [dpdk-dev] [PATCH v3 00/30] Update ENA " Ferruh Yigit
2020-04-09 10:56 ` Michał Krawczyk
2020-04-09 11:40 ` Ferruh Yigit
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=54396518-ee01-3d37-4002-a9d72a298764@linux.vnet.ibm.com \
--to=drc@linux.vnet.ibm.com \
--cc=arybchenko@solarflare.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=evgenys@amazon.com \
--cc=ferruh.yigit@intel.com \
--cc=gtzalik@amazon.com \
--cc=igorch@amazon.com \
--cc=mba@semihalf.com \
--cc=mk@semihalf.com \
--cc=mw@semihalf.com \
--cc=thomas@monjalon.net \
/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 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).