summaryrefslogtreecommitdiff
path: root/patches/0007-lowpan-inet_frag_lru_move.patch
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2017-02-07 08:07:39 +0100
committerJohannes Berg <johannes.berg@intel.com>2017-02-07 15:07:16 +0100
commit75239f276ec894c87b8fbc268bdfb0f9fd290445 (patch)
tree14a91c251f2b1986a709876d90d9a0828b8c3769 /patches/0007-lowpan-inet_frag_lru_move.patch
parent6981c5a175652d79562795127ab4ff62c9ecfac0 (diff)
backports: get rid of patch directory structure
This directory structure was never really managed well, simply get rid of it. With the patch system that only applies patches when the modified file exists, and with a lot of spatches applying everywhere anyway, it's no longer really useful either. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'patches/0007-lowpan-inet_frag_lru_move.patch')
-rw-r--r--patches/0007-lowpan-inet_frag_lru_move.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/patches/0007-lowpan-inet_frag_lru_move.patch b/patches/0007-lowpan-inet_frag_lru_move.patch
new file mode 100644
index 00000000..d0b2c67c
--- /dev/null
+++ b/patches/0007-lowpan-inet_frag_lru_move.patch
@@ -0,0 +1,59 @@
+Domain specific backport for inet_frag_lru_move()
+This requires two parts, the data structure changes
+and then domain specific inet_frag_lru_move() define.
+
+--- a/net/ieee802154/reassembly.c
++++ b/net/ieee802154/reassembly.c
+@@ -89,6 +89,9 @@ static void lowpan_frag_init(struct inet
+ fq->d_size = arg->d_size;
+ fq->saddr = *arg->src;
+ fq->daddr = *arg->dst;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
++ spin_lock_init(&fq->lru_lock);
++#endif
+ }
+
+ static void lowpan_frag_expire(unsigned long data)
+--- a/net/ieee802154/reassembly.h
++++ b/net/ieee802154/reassembly.h
+@@ -2,6 +2,7 @@
+ #define __IEEE802154_6LOWPAN_REASSEMBLY_H__
+
+ #include <net/inet_frag.h>
++#include <linux/spinlock.h>
+
+ struct lowpan_create_arg {
+ u16 tag;
+@@ -19,8 +20,32 @@ struct lowpan_frag_queue {
+ u16 d_size;
+ struct ieee802154_addr saddr;
+ struct ieee802154_addr daddr;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
++ spinlock_t lru_lock;
++#endif
+ };
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
++/*
++ * XXX: this is a *domain* specific inet_frag_lru_move backport,
++ * note the added lowpan_ prefix, this requires a respective patch
++ * which extends struct lowpan_frag_queue with an lru_lock and
++ * initializes it. We add this helper here to reduce the backport.
++ * There is no way to generalize the other changes in the patch.
++ */
++#define inet_frag_lru_move LINUX_BACKPORT(lowpan_inet_frag_lru_move)
++static inline void inet_frag_lru_move(struct inet_frag_queue *q)
++{
++ struct lowpan_frag_queue *fq;
++
++ fq = container_of(q, struct lowpan_frag_queue, q);
++
++ spin_lock(&fq->lru_lock);
++ list_move_tail(&q->lru_list, &q->net->lru_list);
++ spin_unlock(&fq->lru_lock);
++}
++#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) */
++
+ static inline u32 ieee802154_addr_hash(const struct ieee802154_addr *a)
+ {
+ switch (a->mode) {