From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A914AA034C; Sun, 7 Aug 2022 14:26:14 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1FCBF40156; Sun, 7 Aug 2022 14:26:14 +0200 (CEST) Received: from forward500o.mail.yandex.net (forward500o.mail.yandex.net [37.140.190.195]) by mails.dpdk.org (Postfix) with ESMTP id D069A4014F; Sun, 7 Aug 2022 14:26:12 +0200 (CEST) Received: from iva4-a626432a24f0.qloud-c.yandex.net (iva4-a626432a24f0.qloud-c.yandex.net [IPv6:2a02:6b8:c0c:4f9e:0:640:a626:432a]) by forward500o.mail.yandex.net (Yandex) with ESMTP id 49027941463; Sun, 7 Aug 2022 15:26:12 +0300 (MSK) Received: by iva4-a626432a24f0.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id D5HhzpWDxo-QAfmqhPM; Sun, 07 Aug 2022 15:26:11 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1659875171; bh=WzbeKnTr2ZLLMnt950jnn2smhM4s3vky8QQjGm4qCyI=; h=From:In-Reply-To:Cc:Date:References:To:Subject:Message-ID; b=oTK973wfnmcm09O6DCG2KVenEOqHHkiNDzCu4U88ZDhr0tzPZqkMVSc0TD5ytbsnH DgxzQ1SX3MdrEmW19ixOEQeMRbKiI9wXihfw167iYASAtp7GX7vrpvKIqVir6f0Sjt V+9bZuAFbalRPEVbhPxp03J1NQseEczsLfKPpsuY= Authentication-Results: iva4-a626432a24f0.qloud-c.yandex.net; dkim=pass header.i=@yandex.ru Message-ID: <2dee8dd1-dde5-6ef1-14d7-083c1bd9ab54@yandex.ru> Date: Sun, 7 Aug 2022 13:26:09 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH] ring: compilation fix with GCC-12 Content-Language: en-US To: Honnappa Nagarahalli , Amit Prakash Shukla Cc: "dev@dpdk.org" , "jerinj@marvell.com" , "stable@dpdk.org" , nd References: <20220805090348.1947658-1-amitprakashs@marvell.com> From: Konstantin Ananyev In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org 06/08/2022 19:35, Honnappa Nagarahalli пишет: > > >> >> GCC 12 raises the following warning: >> >> In function '__rte_ring_dequeue_elems_128', >> inlined from '__rte_ring_dequeue_elems' at >> ../lib/ring/rte_ring_elem_pvt.h:262:3, >> inlined from '__rte_ring_do_hts_dequeue_elem' at >> ../lib/ring/rte_ring_hts_elem_pvt.h:237:3, >> inlined from 'rte_ring_mc_hts_dequeue_bulk_elem' at >> ../lib/ring/rte_ring_hts.h:83:9, >> inlined from 'rte_ring_dequeue_bulk_elem' at >> ../lib/ring/rte_ring_elem.h:391:10, >> inlined from 'rte_ring_dequeue_elem' at >> ../lib/ring/rte_ring_elem.h:476:9, >> inlined from 'rte_ring_dequeue' at >> ../lib/ring/rte_ring.h:463:9, >> inlined from 'rxa_intr_ring_dequeue' at >> ../lib/eventdev/rte_event_eth_rx_adapter.c:1196:10: >> ../lib/ring/rte_ring_elem_pvt.h:234:25: error: 'memcpy' writing >> 32 bytes into a region of size 8 overflows the destination >> [-Werror=stringop-overflow=] >> 234 | memcpy((void *)(obj + i), (void *)(ring + idx), 32); >> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> >> Replacing memcpy with rte_memcpy fixes the GCC-12 compilation issue. > Any reason why this replacement fixes the problem? > Do you have any performance numbers with this change? > >> Also it would be better to change to rte_memcpy as the function is called in >> fastpath. > On Arm platforms, memcpy in the later versions has the best performance. I agree with Honnappa, it is better to keep memcpy() here. Actually what is strange - why it ends up in __rte_ring_dequeue_elems_128() at all? Inside rxa_intr_ring_dequeue() we clearly doing: rte_ring_dequeue(), which should boil down to ___rte_ring_dequeue_elems_64(). it should go to __rte_ring_dequeue_elems_128() at all. Another q - is this warning happens only on arm platforms? > >> >> Bugzilla ID: 1062 >> Fixes: 1fc73390bcf5 ("ring: refactor exported headers") >> Cc: stable@dpdk.org >> >> Signed-off-by: Amit Prakash Shukla >> --- >> lib/ring/rte_ring_elem_pvt.h | 18 ++++++++++-------- >> 1 file changed, 10 insertions(+), 8 deletions(-) >> >> diff --git a/lib/ring/rte_ring_elem_pvt.h b/lib/ring/rte_ring_elem_pvt.h index >> 83788c56e6..3d85b13333 100644 >> --- a/lib/ring/rte_ring_elem_pvt.h >> +++ b/lib/ring/rte_ring_elem_pvt.h >> @@ -10,6 +10,8 @@ >> #ifndef _RTE_RING_ELEM_PVT_H_ >> #define _RTE_RING_ELEM_PVT_H_ >> >> +#include >> + >> static __rte_always_inline void >> __rte_ring_enqueue_elems_32(struct rte_ring *r, const uint32_t size, >> uint32_t idx, const void *obj_table, uint32_t n) @@ -97,20 >> +99,20 @@ __rte_ring_enqueue_elems_128(struct rte_ring *r, uint32_t >> prod_head, >> const rte_int128_t *obj = (const rte_int128_t *)obj_table; >> if (likely(idx + n <= size)) { >> for (i = 0; i < (n & ~0x1); i += 2, idx += 2) >> - memcpy((void *)(ring + idx), >> + rte_memcpy((void *)(ring + idx), >> (const void *)(obj + i), 32); >> switch (n & 0x1) { >> case 1: >> - memcpy((void *)(ring + idx), >> + rte_memcpy((void *)(ring + idx), >> (const void *)(obj + i), 16); >> } >> } else { >> for (i = 0; idx < size; i++, idx++) >> - memcpy((void *)(ring + idx), >> + rte_memcpy((void *)(ring + idx), >> (const void *)(obj + i), 16); >> /* Start at the beginning */ >> for (idx = 0; i < n; i++, idx++) >> - memcpy((void *)(ring + idx), >> + rte_memcpy((void *)(ring + idx), >> (const void *)(obj + i), 16); >> } >> } >> @@ -231,17 +233,17 @@ __rte_ring_dequeue_elems_128(struct rte_ring *r, >> uint32_t prod_head, >> rte_int128_t *obj = (rte_int128_t *)obj_table; >> if (likely(idx + n <= size)) { >> for (i = 0; i < (n & ~0x1); i += 2, idx += 2) >> - memcpy((void *)(obj + i), (void *)(ring + idx), 32); >> + rte_memcpy((void *)(obj + i), (void *)(ring + idx), 32); >> switch (n & 0x1) { >> case 1: >> - memcpy((void *)(obj + i), (void *)(ring + idx), 16); >> + rte_memcpy((void *)(obj + i), (void *)(ring + idx), 16); >> } >> } else { >> for (i = 0; idx < size; i++, idx++) >> - memcpy((void *)(obj + i), (void *)(ring + idx), 16); >> + rte_memcpy((void *)(obj + i), (void *)(ring + idx), 16); >> /* Start at the beginning */ >> for (idx = 0; i < n; i++, idx++) >> - memcpy((void *)(obj + i), (void *)(ring + idx), 16); >> + rte_memcpy((void *)(obj + i), (void *)(ring + idx), 16); >> } >> } >> >> -- >> 2.25.1 >