Message ID | 20191118070541.76061fa1@mir |
---|---|
State | Accepted |
Delegated to: | Hauke Mehrtens |
Headers | show |
Series | [OpenWrt-Devel,v2] mac80211: Adapt to changes to skb_get_hash_perturb() | expand |
On 11/18/19 7:05 AM, Stefan Lippers-Hollmann wrote: > From: Hauke Mehrtens <hauke@hauke-m.de> > > The skb_get_hash_perturb() function now takes a siphash_key_t instead of > an u32. This was changed in commit 55667441c84f ("net/flow_dissector: > switch to siphash"). Use the correct type in the fq header file > depending on the kernel version. > > Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> > Signed-off-by: Stefan Lippers-Hollmann <s.l-h@gmx.de> > --- > ...t-to-changes-to-skb_get_hash_perturb.patch | 68 +++++++++++++++++++ > 1 file changed, 68 insertions(+) > create mode 100644 package/kernel/mac80211/patches/build/102-backports-Adapt-to-changes-to-skb_get_hash_perturb.patch > > The second hunk was missing from include/net/fq_impl.h, which resulted > in a build error on 4.19.84: > > Building backport-include/backport/autoconf.h ... done. > CC [M] /tmp/pkg/openwrt/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/linux-ipq806x_generic/backports-5.4-rc2-1/net/mac80211/tx.o > In file included from /tmp/pkg/openwrt/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/linux-ipq806x_generic/backports-5.4-rc2-1/net/mac80211/tx.c:28: > /tmp/pkg/openwrt/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/linux-ipq806x_generic/backports-5.4-rc2-1/include/net/fq_impl.h: In function 'fq_init': > /tmp/pkg/openwrt/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/linux-ipq806x_generic/backports-5.4-rc2-1/include/net/fq_impl.h:319:19: error: incompatible types when assigning to type 'siphash_key_t' {aka 'struct <anonymous>'} from type 'u32' {aka 'unsigned int'} > fq->perturbation = prandom_u32(); > ^ > make[9]: *** [scripts/Makefile.build:304: /tmp/pkg/openwrt/build_dir/target-arm_cortex-a15+neon-vfpv4_musl_eabi/linux-ipq806x_generic/backports-5.4-rc2-1/net/mac80211/tx.o] Error 1 > > This v2 version has been tested in ipq806x/ kernel v4.19.84 > > build-tested (master): > - ath79/ kernel v4.19.84 > - ath79/ kernel v4.14.154 > - ipq806x/ kernel v4.19.84 > - lantiq/ kernel v4.19.84 > > runtime tested: > - ath79/ kernel v4.19.84 (only short testing) > - ath79/ kernel v4.14.154 (only short testing) > - ipq806x/ kernel v4.19.84 (running fine for the last 4 hours) > > I have not tested old/ unaffected kernels (v4.19.82, ...) so far. > Thank you for the fixed version, I applied it to master and openwrt 19.07. Hauke
diff --git a/package/kernel/mac80211/patches/build/102-backports-Adapt-to-changes-to-skb_get_hash_perturb.patch b/package/kernel/mac80211/patches/build/102-backports-Adapt-to-changes-to-skb_get_hash_perturb.patch new file mode 100644 index 0000000000..7e40180b93 --- /dev/null +++ b/package/kernel/mac80211/patches/build/102-backports-Adapt-to-changes-to-skb_get_hash_perturb.patch @@ -0,0 +1,68 @@ +From e3c57dd949835419cee8d3b45db38de58bf6ebd5 Mon Sep 17 00:00:00 2001 +From: Hauke Mehrtens <hauke@hauke-m.de> +Date: Mon, 18 Nov 2019 01:13:37 +0100 +Subject: [PATCH] backports: Adapt to changes to skb_get_hash_perturb() + +The skb_get_hash_perturb() function now takes a siphash_key_t instead of +an u32. This was changed in commit 55667441c84f ("net/flow_dissector: +switch to siphash"). Use the correct type in the fq header file +depending on the kernel version. + +Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> +--- + include/net/fq.h | 8 ++++++++ + include/net/fq_impl.h | 8 ++++++++ + 2 files changed, 16 insertions(+) + +--- a/include/net/fq.h ++++ b/include/net/fq.h +@@ -69,7 +69,15 @@ struct fq { + struct list_head backlogs; + spinlock_t lock; + u32 flows_cnt; ++#if LINUX_VERSION_IS_GEQ(5,3,10) || \ ++ LINUX_VERSION_IN_RANGE(4,19,83, 4,20,0) || \ ++ LINUX_VERSION_IN_RANGE(4,14,153, 4,15,0) || \ ++ LINUX_VERSION_IN_RANGE(4,9,200, 4,10,0) || \ ++ LINUX_VERSION_IN_RANGE(4,4,200, 4,5,0) ++ siphash_key_t perturbation; ++#else + u32 perturbation; ++#endif + u32 limit; + u32 memory_limit; + u32 memory_usage; +--- a/include/net/fq_impl.h ++++ b/include/net/fq_impl.h +@@ -108,7 +108,15 @@ begin: + + static u32 fq_flow_idx(struct fq *fq, struct sk_buff *skb) + { ++#if LINUX_VERSION_IS_GEQ(5,3,10) || \ ++ LINUX_VERSION_IN_RANGE(4,19,83, 4,20,0) || \ ++ LINUX_VERSION_IN_RANGE(4,14,153, 4,15,0) || \ ++ LINUX_VERSION_IN_RANGE(4,9,200, 4,10,0) || \ ++ LINUX_VERSION_IN_RANGE(4,4,200, 4,5,0) ++ u32 hash = skb_get_hash_perturb(skb, &fq->perturbation); ++#else + u32 hash = skb_get_hash_perturb(skb, fq->perturbation); ++#endif + + return reciprocal_scale(hash, fq->flows_cnt); + } +@@ -308,7 +316,15 @@ static int fq_init(struct fq *fq, int fl + INIT_LIST_HEAD(&fq->backlogs); + spin_lock_init(&fq->lock); + fq->flows_cnt = max_t(u32, flows_cnt, 1); ++#if LINUX_VERSION_IS_GEQ(5,3,10) || \ ++ LINUX_VERSION_IN_RANGE(4,19,83, 4,20,0) || \ ++ LINUX_VERSION_IN_RANGE(4,14,153, 4,15,0) || \ ++ LINUX_VERSION_IN_RANGE(4,9,200, 4,10,0) || \ ++ LINUX_VERSION_IN_RANGE(4,4,200, 4,5,0) ++ get_random_bytes(&fq->perturbation, sizeof(fq->perturbation)); ++#else + fq->perturbation = prandom_u32(); ++#endif + fq->quantum = 300; + fq->limit = 8192; + fq->memory_limit = 16 << 20; /* 16 MBytes */