Thread (19 messages) 19 messages, 4 authors, 2021-10-25

Re: [dpdk-dev] [PATCH V2 1/3] net: avoid cast-align warning in VLAN insert function

From: Stephen Hemminger <stephen@networkplumber.org>
Date: 2021-10-21 16:22:36

On Thu, 21 Oct 2021 19:16:19 +0300
Eli Britstein [off-list ref] wrote:
On 10/21/2021 6:48 PM, Stephen Hemminger wrote:
quoted
External email: Use caution opening links or attachments


On Thu, 21 Oct 2021 11:51:30 +0300
Eli Britstein [off-list ref] wrote:
 
quoted
In rte_vlan_insert there is a casting of rte_pktmbuf_prepend returned
value to (struct rte_ether_hdr *), which causes cast-align warning when
using strict cast align flag with supporting gcc:
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
CFLAGS="-Wcast-align=strict" make V=1 -C examples/l2fwd clean static

In file included from main.c:35:
/dpdk/build/include/rte_ether.h:370:7: warning: cast increases required
alignment of target type [-Wcast-align]
   370 |  nh = (struct rte_ether_hdr *)
       |       ^

As the code assumes correct alignment, add first a (void *) casting, to
avoid the warning.

Fixes: c974021a5949 ("ether: add soft vlan encap/decap")
Cc: stable@dpdk.org

Signed-off-by: Eli Britstein <redacted>
Acked-by: Olivier Matz <redacted>  
After cast to void * the second cast is not necessary.

         nh = (void *)rte_pktmbuf_prepend(...)

Ideally rte_pktmbuf_prepend() should return void * but that is
an API change.  
Removing the second cast, it is silently done anyway, as 'nh' is of type 
'struct rte_ether_hdr *'.

Going with this approach (I can also do it for patch 3/3), we can change 
rte_pktmbuf_prepend to return (void *), and let the applications using 
it do the silent cast.

What do you think?
Changing return type is an API change so it would need the whole
multistep process.

I overstated a little, it turns out the cast is necessary when header
is included by C++ code. C++ is pickier and doesn't allow void * to be
converted to other type by assignment.

Probably best to stick with what you originally proposed.
Gcc does have a bunch of alignment attribute types that could also fix this
but that gets even messier.
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help