Re: [OpenWrt-Devel] [PATCH v2] mac80211: Adapt to changes to skb_get_hash_perturb()

2019-11-18 Thread Hauke Mehrtens
On 11/18/19 7:05 AM, Stefan Lippers-Hollmann wrote:
> From: Hauke Mehrtens 
> 
> 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 
> Signed-off-by: Stefan Lippers-Hollmann 
> ---
>  ...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 '} 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

___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH v2] mac80211: Adapt to changes to skb_get_hash_perturb()

2019-11-17 Thread Stefan Lippers-Hollmann
From: Hauke Mehrtens 

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 
Signed-off-by: Stefan Lippers-Hollmann 
---
 ...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 
'} 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.

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 00..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 
+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 
+---
+ 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, >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(>backlogs);
+   spin_lock_init(>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(>perturbation, sizeof(fq->perturbation));
++#else
+   fq->perturbation = prandom_u32();
++#endif
+   fq->quantum = 300;
+   fq->limit = 8192;
+   fq->memory_limit = 16 << 20; /* 16 MBytes */
--
2.24.0


___
openwrt-devel