On Tue, Sep 22, 2020 at 12:45:03PM +0200, Ilya Maximets wrote:
> On 9/17/20 9:59 PM, Greg Rose wrote:
> > The skb now uses l4_hash and it is easier to check for it. Also
> > fixes a compile error for RHEL 7.7.
> >
> > Signed-off-by: Greg Rose <[email protected]>
> > ---
> > acinclude.m4 | 4 ++--
> > datapath/datapath.c | 6 +++---
> > datapath/linux/compat/include/linux/skbuff.h | 4 ++--
> > 3 files changed, 7 insertions(+), 7 deletions(-)
> >
> > diff --git a/acinclude.m4 b/acinclude.m4
> > index 84f344da0..d4e249dac 100644
> > --- a/acinclude.m4
> > +++ b/acinclude.m4
> > @@ -874,8 +874,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
> > OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_clear_hash])
> > OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [int.skb_zerocopy(],
> > [OVS_DEFINE([HAVE_SKB_ZEROCOPY])])
> > - OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [u8.*l4_rxhash],
> > - [OVS_DEFINE([HAVE_L4_RXHASH])])
> > + OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [l4_hash],
> > + [OVS_DEFINE([HAVE_L4_HASH])])
> > OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_ensure_writable])
> > OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_vlan_pop])
> > OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [__skb_vlan_pop])
> > diff --git a/datapath/datapath.c b/datapath/datapath.c
> > index 05c1e4274..c3f57f62a 100644
> > --- a/datapath/datapath.c
> > +++ b/datapath/datapath.c
> > @@ -532,10 +532,10 @@ static int queue_userspace_packet(struct datapath
> > *dp, struct sk_buff *skb,
> > hash |= OVS_PACKET_HASH_SW_BIT;
> > #endif
> >
> > -#ifdef HAVE_L4_RXHASH
> > - if (skb->l4_rxhash)
> > -#else
> > +#ifdef HAVE_L4_HASH
> > if (skb->l4_hash)
> > +#else
> > + if (skb->l4_rxhash)
> > #endif
> > hash |= OVS_PACKET_HASH_L4_BIT;
> >
> > diff --git a/datapath/linux/compat/include/linux/skbuff.h
> > b/datapath/linux/compat/include/linux/skbuff.h
> > index 6d248b3ed..29253e433 100644
> > --- a/datapath/linux/compat/include/linux/skbuff.h
> > +++ b/datapath/linux/compat/include/linux/skbuff.h
> > @@ -278,7 +278,7 @@ static inline void skb_clear_hash(struct sk_buff *skb)
> > #ifdef HAVE_RXHASH
> > skb->rxhash = 0;
> > #endif
> > -#if defined(HAVE_L4_RXHASH) && !defined(HAVE_RHEL_OVS_HOOK)
> > +#if !defined(HAVE_L4_HASH) && !defined(HAVE_RHEL_OVS_HOOK)
>
> It looks like commit 21a719d658b4 ("datapath: check for el6 kernels for
> per_cpu")
> missed updating of this line with HAVE_RHEL6_PER_CPU instead of
> HAVE_RHEL_OVS_HOOK.
> Maybe that is the root cause of your build issue?
>
> I'm not sure why, but this check here was introduced as part of the percpu
> API fix
> in commit 3d174bfd1a6d ("datapath: compat: Fix build on RHEL 6.6").
>
> Flavio, could you, please, take a look too?
Those were separate things. Going back to RHEL-6, the skb field
was there, but got commented out, so it used OVS_HOOK to identify
the kernel and so the l4_hash and the "broken" per_cpu.
Then the hooks got backported, but the per_cpu was still in the
same condition (Aug/2015).
Then we dropped support to kernels older than 3.10 and rhel-6
was 2.6.32, so most probably there is room for a clean up.
For instance, the HAVE_RHEL_OVS_HOOK could be removed completely
as part of Feb/2016 '8063e095878 ("datapath: Drop support for
kernel older than 3.10")'.
What happened in RHEL-7.7 is that the field was renamed but
preserving the kABI with a macro:
- __u8 l4_rxhash:1;
+ RH_KABI_REPLACE_P(__u8 l4_rxhash:1,
+ __u8 l4_hash:1)
So, the regex above gets l4_rxhash, but the actual field name is
l4_hash.
--
fbl
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev