Constify input argument(i.e. struct ip_tunnel_info *info) of
ip_tunnel_info_opts( ) so that it wouldn't be needed to W/A it each time
in each driver.
Signed-off-by: Gavin Li <gavinl@nvidia.com>
---
include/net/ip_tunnels.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h
index fca357679816..32c77f149c6e 100644
--- a/include/net/ip_tunnels.h
+++ b/include/net/ip_tunnels.h
@@ -485,9 +485,9 @@ static inline void iptunnel_xmit_stats(struct net_device *dev, int pkt_len)
}
}
-static inline void *ip_tunnel_info_opts(struct ip_tunnel_info *info)
+static inline void *ip_tunnel_info_opts(const struct ip_tunnel_info *info)
{
- return info + 1;
+ return (void *)(info + 1);
}
static inline void ip_tunnel_info_opts_get(void *to,
--
2.31.1
On Fri, Feb 17, 2023 at 05:39:24AM +0200, Gavin Li wrote: > Constify input argument(i.e. struct ip_tunnel_info *info) of > ip_tunnel_info_opts( ) so that it wouldn't be needed to W/A it each time > in each driver. > > Signed-off-by: Gavin Li <gavinl@nvidia.com> > --- > include/net/ip_tunnels.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h > index fca357679816..32c77f149c6e 100644 > --- a/include/net/ip_tunnels.h > +++ b/include/net/ip_tunnels.h > @@ -485,9 +485,9 @@ static inline void iptunnel_xmit_stats(struct net_device *dev, int pkt_len) > } > } > > -static inline void *ip_tunnel_info_opts(struct ip_tunnel_info *info) > +static inline void *ip_tunnel_info_opts(const struct ip_tunnel_info *info) > { > - return info + 1; > + return (void *)(info + 1); I'm unclear on what problem this is trying to solve, but info being const, and then returning (info +1) as non-const feels like it is masking rather than fixing a problem. > } > > static inline void ip_tunnel_info_opts_get(void *to, > -- > 2.31.1 >
On Sun, Feb 19, 2023 at 09:29:21PM +0100, Simon Horman wrote: > On Fri, Feb 17, 2023 at 05:39:24AM +0200, Gavin Li wrote: > > Constify input argument(i.e. struct ip_tunnel_info *info) of > > ip_tunnel_info_opts( ) so that it wouldn't be needed to W/A it each time > > in each driver. > > > > Signed-off-by: Gavin Li <gavinl@nvidia.com> > > --- > > include/net/ip_tunnels.h | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h > > index fca357679816..32c77f149c6e 100644 > > --- a/include/net/ip_tunnels.h > > +++ b/include/net/ip_tunnels.h > > @@ -485,9 +485,9 @@ static inline void iptunnel_xmit_stats(struct net_device *dev, int pkt_len) > > } > > } > > > > -static inline void *ip_tunnel_info_opts(struct ip_tunnel_info *info) > > +static inline void *ip_tunnel_info_opts(const struct ip_tunnel_info *info) > > { > > - return info + 1; > > + return (void *)(info + 1); > > I'm unclear on what problem this is trying to solve, > but info being const, and then returning (info +1) > as non-const feels like it is masking rather than fixing a problem. I now see that an example of the problem is added by path 5/5. ... CC [M] drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.o drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c: In function 'mlx5e_gen_ip_tunnel_header_vxlan': drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c:103:43: error: passing argument 1 of 'ip_tunnel_info_opts' discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers] 103 | md = ip_tunnel_info_opts(e->tun_info); | ~^~~~~~~~~~ In file included from drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c:4: ./include/net/ip_tunnels.h:488:64: note: expected 'struct ip_tunnel_info *' but argument is of type 'const struct ip_tunnel_info *' 488 | static inline void *ip_tunnel_info_opts(struct ip_tunnel_info *info) | ~~~~~~~~~~~~~~~~~~~~~~~^~~~ ... But I really do wonder if this patch masks rather than fixes the problem. > > > } > > > > static inline void ip_tunnel_info_opts_get(void *to, > > -- > > 2.31.1 > >
On 2/20/2023 4:46 AM, Simon Horman wrote: > External email: Use caution opening links or attachments > > > On Sun, Feb 19, 2023 at 09:29:21PM +0100, Simon Horman wrote: >> On Fri, Feb 17, 2023 at 05:39:24AM +0200, Gavin Li wrote: >>> Constify input argument(i.e. struct ip_tunnel_info *info) of >>> ip_tunnel_info_opts( ) so that it wouldn't be needed to W/A it each time >>> in each driver. >>> >>> Signed-off-by: Gavin Li <gavinl@nvidia.com> >>> --- >>> include/net/ip_tunnels.h | 4 ++-- >>> 1 file changed, 2 insertions(+), 2 deletions(-) >>> >>> diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h >>> index fca357679816..32c77f149c6e 100644 >>> --- a/include/net/ip_tunnels.h >>> +++ b/include/net/ip_tunnels.h >>> @@ -485,9 +485,9 @@ static inline void iptunnel_xmit_stats(struct net_device *dev, int pkt_len) >>> } >>> } >>> >>> -static inline void *ip_tunnel_info_opts(struct ip_tunnel_info *info) >>> +static inline void *ip_tunnel_info_opts(const struct ip_tunnel_info *info) >>> { >>> - return info + 1; >>> + return (void *)(info + 1); >> I'm unclear on what problem this is trying to solve, >> but info being const, and then returning (info +1) >> as non-const feels like it is masking rather than fixing a problem. > I now see that an example of the problem is added by path 5/5. > > ... > CC [M] drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.o > drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c: In function 'mlx5e_gen_ip_tunnel_header_vxlan': > drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c:103:43: error: passing argument 1 of 'ip_tunnel_info_opts' discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers] > 103 | md = ip_tunnel_info_opts(e->tun_info); > | ~^~~~~~~~~~ > In file included from drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c:4: > ./include/net/ip_tunnels.h:488:64: note: expected 'struct ip_tunnel_info *' but argument is of type 'const struct ip_tunnel_info *' > 488 | static inline void *ip_tunnel_info_opts(struct ip_tunnel_info *info) > | ~~~~~~~~~~~~~~~~~~~~~~~^~~~ > ... > > But I really do wonder if this patch masks rather than fixes the problem. ACK > >>> } >>> >>> static inline void ip_tunnel_info_opts_get(void *to, >>> -- >>> 2.31.1 >>>
On 2/20/2023 4:46 AM, Simon Horman wrote: > External email: Use caution opening links or attachments > > > On Sun, Feb 19, 2023 at 09:29:21PM +0100, Simon Horman wrote: >> On Fri, Feb 17, 2023 at 05:39:24AM +0200, Gavin Li wrote: >>> Constify input argument(i.e. struct ip_tunnel_info *info) of >>> ip_tunnel_info_opts( ) so that it wouldn't be needed to W/A it each time >>> in each driver. >>> >>> Signed-off-by: Gavin Li <gavinl@nvidia.com> >>> --- >>> include/net/ip_tunnels.h | 4 ++-- >>> 1 file changed, 2 insertions(+), 2 deletions(-) >>> >>> diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h >>> index fca357679816..32c77f149c6e 100644 >>> --- a/include/net/ip_tunnels.h >>> +++ b/include/net/ip_tunnels.h >>> @@ -485,9 +485,9 @@ static inline void iptunnel_xmit_stats(struct net_device *dev, int pkt_len) >>> } >>> } >>> >>> -static inline void *ip_tunnel_info_opts(struct ip_tunnel_info *info) >>> +static inline void *ip_tunnel_info_opts(const struct ip_tunnel_info *info) >>> { >>> - return info + 1; >>> + return (void *)(info + 1); >> I'm unclear on what problem this is trying to solve, >> but info being const, and then returning (info +1) >> as non-const feels like it is masking rather than fixing a problem. > I now see that an example of the problem is added by path 5/5. > > ... > CC [M] drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.o > drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c: In function 'mlx5e_gen_ip_tunnel_header_vxlan': > drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c:103:43: error: passing argument 1 of 'ip_tunnel_info_opts' discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers] > 103 | md = ip_tunnel_info_opts(e->tun_info); > | ~^~~~~~~~~~ > In file included from drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c:4: > ./include/net/ip_tunnels.h:488:64: note: expected 'struct ip_tunnel_info *' but argument is of type 'const struct ip_tunnel_info *' > 488 | static inline void *ip_tunnel_info_opts(struct ip_tunnel_info *info) > | ~~~~~~~~~~~~~~~~~~~~~~~^~~~ > ... > > But I really do wonder if this patch masks rather than fixes the problem. Hi Olek, any comment? > >>> } >>> >>> static inline void ip_tunnel_info_opts_get(void *to, >>> -- >>> 2.31.1 >>>
From: Gavin Li <gavinl@nvidia.com> Date: Mon, 20 Feb 2023 18:42:14 +0800 > > On 2/20/2023 4:46 AM, Simon Horman wrote: >> External email: Use caution opening links or attachments >> >> >> On Sun, Feb 19, 2023 at 09:29:21PM +0100, Simon Horman wrote: >>> On Fri, Feb 17, 2023 at 05:39:24AM +0200, Gavin Li wrote: >>>> Constify input argument(i.e. struct ip_tunnel_info *info) of >>>> ip_tunnel_info_opts( ) so that it wouldn't be needed to W/A it each >>>> time >>>> in each driver. >>>> >>>> Signed-off-by: Gavin Li <gavinl@nvidia.com> >>>> --- >>>> include/net/ip_tunnels.h | 4 ++-- >>>> 1 file changed, 2 insertions(+), 2 deletions(-) >>>> >>>> diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h >>>> index fca357679816..32c77f149c6e 100644 >>>> --- a/include/net/ip_tunnels.h >>>> +++ b/include/net/ip_tunnels.h >>>> @@ -485,9 +485,9 @@ static inline void iptunnel_xmit_stats(struct >>>> net_device *dev, int pkt_len) >>>> } >>>> } >>>> >>>> -static inline void *ip_tunnel_info_opts(struct ip_tunnel_info *info) >>>> +static inline void *ip_tunnel_info_opts(const struct ip_tunnel_info >>>> *info) >>>> { >>>> - return info + 1; >>>> + return (void *)(info + 1); >>> I'm unclear on what problem this is trying to solve, >>> but info being const, and then returning (info +1) >>> as non-const feels like it is masking rather than fixing a problem. >> I now see that an example of the problem is added by path 5/5. >> >> ... >> CC [M] drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.o >> drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c: In function >> 'mlx5e_gen_ip_tunnel_header_vxlan': >> drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c:103:43: >> error: passing argument 1 of 'ip_tunnel_info_opts' discards 'const' >> qualifier from pointer target type [-Werror=discarded-qualifiers] >> 103 | md = ip_tunnel_info_opts(e->tun_info); >> | ~^~~~~~~~~~ >> In file included from >> drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c:4: >> ./include/net/ip_tunnels.h:488:64: note: expected 'struct >> ip_tunnel_info *' but argument is of type 'const struct ip_tunnel_info *' >> 488 | static inline void *ip_tunnel_info_opts(struct ip_tunnel_info >> *info) >> | >> ~~~~~~~~~~~~~~~~~~~~~~~^~~~ >> ... >> >> But I really do wonder if this patch masks rather than fixes the problem. > Hi Olek, any comment? Hi, Sorry for the late reply, was busy at work ._. I initially proposed a solution via _Generic or __builtin_choose_expr to return const or non-const opts basing on the input pointer type. I don't like simple cast-aways. See container_of_const() how it dynamically chooses whether to add `const` or not when returning the result. >> >>>> } >>>> >>>> static inline void ip_tunnel_info_opts_get(void *to, >>>> -- >>>> 2.31.1 >>>> Thanks, Olek
© 2016 - 2025 Red Hat, Inc.