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 @@ -70,7 +70,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 @@ -109,7 +109,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); } @@ -309,7 +317,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 */