mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
parent
91be31e249
commit
08637d8262
@ -1,137 +0,0 @@
|
|||||||
From: Alexander Duyck <alexander.h.duyck@intel.com>
|
|
||||||
Date: Tue, 10 Jan 2017 16:58:06 -0800
|
|
||||||
Subject: [PATCH] mm: rename __alloc_page_frag to page_frag_alloc and
|
|
||||||
__free_page_frag to page_frag_free
|
|
||||||
|
|
||||||
Patch series "Page fragment updates", v4.
|
|
||||||
|
|
||||||
This patch series takes care of a few cleanups for the page fragments
|
|
||||||
API.
|
|
||||||
|
|
||||||
First we do some renames so that things are much more consistent. First
|
|
||||||
we move the page_frag_ portion of the name to the front of the functions
|
|
||||||
names. Secondly we split out the cache specific functions from the
|
|
||||||
other page fragment functions by adding the word "cache" to the name.
|
|
||||||
|
|
||||||
Finally I added a bit of documentation that will hopefully help to
|
|
||||||
explain some of this. I plan to revisit this later as we get things
|
|
||||||
more ironed out in the near future with the changes planned for the DMA
|
|
||||||
setup to support eXpress Data Path.
|
|
||||||
|
|
||||||
This patch (of 3):
|
|
||||||
|
|
||||||
This patch renames the page frag functions to be more consistent with
|
|
||||||
other APIs. Specifically we place the name page_frag first in the name
|
|
||||||
and then have either an alloc or free call name that we append as the
|
|
||||||
suffix. This makes it a bit clearer in terms of naming.
|
|
||||||
|
|
||||||
In addition we drop the leading double underscores since we are
|
|
||||||
technically no longer a backing interface and instead the front end that
|
|
||||||
is called from the networking APIs.
|
|
||||||
|
|
||||||
Link: http://lkml.kernel.org/r/20170104023854.13451.67390.stgit@localhost.localdomain
|
|
||||||
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
|
|
||||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
|
||||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/include/linux/gfp.h
|
|
||||||
+++ b/include/linux/gfp.h
|
|
||||||
@@ -531,9 +531,9 @@ extern void free_hot_cold_page_list(stru
|
|
||||||
struct page_frag_cache;
|
|
||||||
extern void __page_frag_drain(struct page *page, unsigned int order,
|
|
||||||
unsigned int count);
|
|
||||||
-extern void *__alloc_page_frag(struct page_frag_cache *nc,
|
|
||||||
- unsigned int fragsz, gfp_t gfp_mask);
|
|
||||||
-extern void __free_page_frag(void *addr);
|
|
||||||
+extern void *page_frag_alloc(struct page_frag_cache *nc,
|
|
||||||
+ unsigned int fragsz, gfp_t gfp_mask);
|
|
||||||
+extern void page_frag_free(void *addr);
|
|
||||||
|
|
||||||
#define __free_page(page) __free_pages((page), 0)
|
|
||||||
#define free_page(addr) free_pages((addr), 0)
|
|
||||||
--- a/include/linux/skbuff.h
|
|
||||||
+++ b/include/linux/skbuff.h
|
|
||||||
@@ -2477,7 +2477,7 @@ static inline struct sk_buff *netdev_all
|
|
||||||
|
|
||||||
static inline void skb_free_frag(void *addr)
|
|
||||||
{
|
|
||||||
- __free_page_frag(addr);
|
|
||||||
+ page_frag_free(addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void *napi_alloc_frag(unsigned int fragsz);
|
|
||||||
--- a/mm/page_alloc.c
|
|
||||||
+++ b/mm/page_alloc.c
|
|
||||||
@@ -3949,8 +3949,8 @@ void __page_frag_drain(struct page *page
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(__page_frag_drain);
|
|
||||||
|
|
||||||
-void *__alloc_page_frag(struct page_frag_cache *nc,
|
|
||||||
- unsigned int fragsz, gfp_t gfp_mask)
|
|
||||||
+void *page_frag_alloc(struct page_frag_cache *nc,
|
|
||||||
+ unsigned int fragsz, gfp_t gfp_mask)
|
|
||||||
{
|
|
||||||
unsigned int size = PAGE_SIZE;
|
|
||||||
struct page *page;
|
|
||||||
@@ -4001,19 +4001,19 @@ refill:
|
|
||||||
|
|
||||||
return nc->va + offset;
|
|
||||||
}
|
|
||||||
-EXPORT_SYMBOL(__alloc_page_frag);
|
|
||||||
+EXPORT_SYMBOL(page_frag_alloc);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Frees a page fragment allocated out of either a compound or order 0 page.
|
|
||||||
*/
|
|
||||||
-void __free_page_frag(void *addr)
|
|
||||||
+void page_frag_free(void *addr)
|
|
||||||
{
|
|
||||||
struct page *page = virt_to_head_page(addr);
|
|
||||||
|
|
||||||
if (unlikely(put_page_testzero(page)))
|
|
||||||
__free_pages_ok(page, compound_order(page));
|
|
||||||
}
|
|
||||||
-EXPORT_SYMBOL(__free_page_frag);
|
|
||||||
+EXPORT_SYMBOL(page_frag_free);
|
|
||||||
|
|
||||||
static void *make_alloc_exact(unsigned long addr, unsigned int order,
|
|
||||||
size_t size)
|
|
||||||
--- a/net/core/skbuff.c
|
|
||||||
+++ b/net/core/skbuff.c
|
|
||||||
@@ -369,7 +369,7 @@ static void *__netdev_alloc_frag(unsigne
|
|
||||||
|
|
||||||
local_irq_save(flags);
|
|
||||||
nc = this_cpu_ptr(&netdev_alloc_cache);
|
|
||||||
- data = __alloc_page_frag(nc, fragsz, gfp_mask);
|
|
||||||
+ data = page_frag_alloc(nc, fragsz, gfp_mask);
|
|
||||||
local_irq_restore(flags);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
@@ -393,7 +393,7 @@ static void *__napi_alloc_frag(unsigned
|
|
||||||
{
|
|
||||||
struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache);
|
|
||||||
|
|
||||||
- return __alloc_page_frag(&nc->page, fragsz, gfp_mask);
|
|
||||||
+ return page_frag_alloc(&nc->page, fragsz, gfp_mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
void *napi_alloc_frag(unsigned int fragsz)
|
|
||||||
@@ -445,7 +445,7 @@ struct sk_buff *__netdev_alloc_skb(struc
|
|
||||||
local_irq_save(flags);
|
|
||||||
|
|
||||||
nc = this_cpu_ptr(&netdev_alloc_cache);
|
|
||||||
- data = __alloc_page_frag(nc, len, gfp_mask);
|
|
||||||
+ data = page_frag_alloc(nc, len, gfp_mask);
|
|
||||||
pfmemalloc = nc->pfmemalloc;
|
|
||||||
|
|
||||||
local_irq_restore(flags);
|
|
||||||
@@ -509,7 +509,7 @@ struct sk_buff *__napi_alloc_skb(struct
|
|
||||||
if (sk_memalloc_socks())
|
|
||||||
gfp_mask |= __GFP_MEMALLOC;
|
|
||||||
|
|
||||||
- data = __alloc_page_frag(&nc->page, len, gfp_mask);
|
|
||||||
+ data = page_frag_alloc(&nc->page, len, gfp_mask);
|
|
||||||
if (unlikely(!data))
|
|
||||||
return NULL;
|
|
||||||
|
|
@ -1,79 +0,0 @@
|
|||||||
From: Alexander Duyck <alexander.h.duyck@intel.com>
|
|
||||||
Date: Tue, 10 Jan 2017 16:58:09 -0800
|
|
||||||
Subject: [PATCH] mm: rename __page_frag functions to __page_frag_cache, drop
|
|
||||||
order from drain
|
|
||||||
|
|
||||||
This patch does two things.
|
|
||||||
|
|
||||||
First it goes through and renames the __page_frag prefixed functions to
|
|
||||||
__page_frag_cache so that we can be clear that we are draining or
|
|
||||||
refilling the cache, not the frags themselves.
|
|
||||||
|
|
||||||
Second we drop the order parameter from __page_frag_cache_drain since we
|
|
||||||
don't actually need to pass it since all fragments are either order 0 or
|
|
||||||
must be a compound page.
|
|
||||||
|
|
||||||
Link: http://lkml.kernel.org/r/20170104023954.13451.5678.stgit@localhost.localdomain
|
|
||||||
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
|
|
||||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
|
||||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/include/linux/gfp.h
|
|
||||||
+++ b/include/linux/gfp.h
|
|
||||||
@@ -529,8 +529,7 @@ extern void free_hot_cold_page(struct pa
|
|
||||||
extern void free_hot_cold_page_list(struct list_head *list, bool cold);
|
|
||||||
|
|
||||||
struct page_frag_cache;
|
|
||||||
-extern void __page_frag_drain(struct page *page, unsigned int order,
|
|
||||||
- unsigned int count);
|
|
||||||
+extern void __page_frag_cache_drain(struct page *page, unsigned int count);
|
|
||||||
extern void *page_frag_alloc(struct page_frag_cache *nc,
|
|
||||||
unsigned int fragsz, gfp_t gfp_mask);
|
|
||||||
extern void page_frag_free(void *addr);
|
|
||||||
--- a/mm/page_alloc.c
|
|
||||||
+++ b/mm/page_alloc.c
|
|
||||||
@@ -3914,8 +3914,8 @@ EXPORT_SYMBOL(free_pages);
|
|
||||||
* drivers to provide a backing region of memory for use as either an
|
|
||||||
* sk_buff->head, or to be used in the "frags" portion of skb_shared_info.
|
|
||||||
*/
|
|
||||||
-static struct page *__page_frag_refill(struct page_frag_cache *nc,
|
|
||||||
- gfp_t gfp_mask)
|
|
||||||
+static struct page *__page_frag_cache_refill(struct page_frag_cache *nc,
|
|
||||||
+ gfp_t gfp_mask)
|
|
||||||
{
|
|
||||||
struct page *page = NULL;
|
|
||||||
gfp_t gfp = gfp_mask;
|
|
||||||
@@ -3935,19 +3935,20 @@ static struct page *__page_frag_refill(s
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
|
|
||||||
-void __page_frag_drain(struct page *page, unsigned int order,
|
|
||||||
- unsigned int count)
|
|
||||||
+void __page_frag_cache_drain(struct page *page, unsigned int count)
|
|
||||||
{
|
|
||||||
VM_BUG_ON_PAGE(page_ref_count(page) == 0, page);
|
|
||||||
|
|
||||||
if (page_ref_sub_and_test(page, count)) {
|
|
||||||
+ unsigned int order = compound_order(page);
|
|
||||||
+
|
|
||||||
if (order == 0)
|
|
||||||
free_hot_cold_page(page, false);
|
|
||||||
else
|
|
||||||
__free_pages_ok(page, order);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-EXPORT_SYMBOL(__page_frag_drain);
|
|
||||||
+EXPORT_SYMBOL(__page_frag_cache_drain);
|
|
||||||
|
|
||||||
void *page_frag_alloc(struct page_frag_cache *nc,
|
|
||||||
unsigned int fragsz, gfp_t gfp_mask)
|
|
||||||
@@ -3958,7 +3959,7 @@ void *page_frag_alloc(struct page_frag_c
|
|
||||||
|
|
||||||
if (unlikely(!nc->va)) {
|
|
||||||
refill:
|
|
||||||
- page = __page_frag_refill(nc, gfp_mask);
|
|
||||||
+ page = __page_frag_cache_refill(nc, gfp_mask);
|
|
||||||
if (!page)
|
|
||||||
return NULL;
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
From fd66884da2f96d2a7ea73f58b1b86251b959a913 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Felix Fietkau <nbd@nbd.name>
|
|
||||||
Date: Fri, 7 Jul 2017 16:56:19 +0200
|
|
||||||
Subject: kernel: strip unnecessary symbol table information from kernel modules
|
|
||||||
|
|
||||||
reduces default squashfs size on ar71xx by about 4k
|
|
||||||
|
|
||||||
lede-commit: 058d331a39077f159ca8922f1f422a1346d6aa67
|
|
||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
||||||
---
|
|
||||||
Makefile | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -398,7 +398,7 @@ KBUILD_AFLAGS_KERNEL :=
|
|
||||||
KBUILD_CFLAGS_KERNEL :=
|
|
||||||
KBUILD_AFLAGS_MODULE := -DMODULE
|
|
||||||
KBUILD_CFLAGS_MODULE := -DMODULE
|
|
||||||
-KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
|
||||||
+KBUILD_LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds $(if $(CONFIG_PROFILING),,-s)
|
|
||||||
GCC_PLUGINS_CFLAGS :=
|
|
||||||
CLANG_FLAGS :=
|
|
||||||
|
|
@ -7,9 +7,8 @@ When bridging, do not forward EAP frames to other ports, only deliver
|
|||||||
them locally, regardless of the state.
|
them locally, regardless of the state.
|
||||||
|
|
||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
---
|
[add disable_eap_hack sysfs attribute]
|
||||||
net/bridge/br_input.c | 7 +++++--
|
Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com>
|
||||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/net/bridge/br_input.c
|
--- a/net/bridge/br_input.c
|
||||||
+++ b/net/bridge/br_input.c
|
+++ b/net/bridge/br_input.c
|
||||||
@ -19,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
+ BR_INPUT_SKB_CB(skb)->brdev = br->dev;
|
+ BR_INPUT_SKB_CB(skb)->brdev = br->dev;
|
||||||
+
|
+
|
||||||
+ if (skb->protocol == htons(ETH_P_PAE))
|
+ if (skb->protocol == htons(ETH_P_PAE) && !br->disable_eap_hack)
|
||||||
+ return br_pass_frame_up(skb);
|
+ return br_pass_frame_up(skb);
|
||||||
+
|
+
|
||||||
if (p->state == BR_STATE_LEARNING)
|
if (p->state == BR_STATE_LEARNING)
|
||||||
@ -30,3 +29,55 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (IS_ENABLED(CONFIG_INET) && skb->protocol == htons(ETH_P_ARP))
|
if (IS_ENABLED(CONFIG_INET) && skb->protocol == htons(ETH_P_ARP))
|
||||||
br_do_proxy_arp(skb, br, vid, p);
|
br_do_proxy_arp(skb, br, vid, p);
|
||||||
|
|
||||||
|
--- a/net/bridge/br_private.h
|
||||||
|
+++ b/net/bridge/br_private.h
|
||||||
|
@@ -295,6 +295,8 @@ struct net_bridge
|
||||||
|
u16 group_fwd_mask;
|
||||||
|
u16 group_fwd_mask_required;
|
||||||
|
|
||||||
|
+ bool disable_eap_hack;
|
||||||
|
+
|
||||||
|
/* STP */
|
||||||
|
bridge_id designated_root;
|
||||||
|
bridge_id bridge_id;
|
||||||
|
--- a/net/bridge/br_sysfs_br.c
|
||||||
|
+++ b/net/bridge/br_sysfs_br.c
|
||||||
|
@@ -169,6 +169,30 @@ static ssize_t group_fwd_mask_store(stru
|
||||||
|
}
|
||||||
|
static DEVICE_ATTR_RW(group_fwd_mask);
|
||||||
|
|
||||||
|
+static ssize_t disable_eap_hack_show(struct device *d,
|
||||||
|
+ struct device_attribute *attr,
|
||||||
|
+ char *buf)
|
||||||
|
+{
|
||||||
|
+ struct net_bridge *br = to_bridge(d);
|
||||||
|
+ return sprintf(buf, "%u\n", br->disable_eap_hack);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int set_disable_eap_hack(struct net_bridge *br, unsigned long val)
|
||||||
|
+{
|
||||||
|
+ br->disable_eap_hack = !!val;
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static ssize_t disable_eap_hack_store(struct device *d,
|
||||||
|
+ struct device_attribute *attr,
|
||||||
|
+ const char *buf,
|
||||||
|
+ size_t len)
|
||||||
|
+{
|
||||||
|
+ return store_bridge_parm(d, buf, len, set_disable_eap_hack);
|
||||||
|
+}
|
||||||
|
+static DEVICE_ATTR_RW(disable_eap_hack);
|
||||||
|
+
|
||||||
|
static ssize_t priority_show(struct device *d, struct device_attribute *attr,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
@@ -780,6 +804,7 @@ static struct attribute *bridge_attrs[]
|
||||||
|
&dev_attr_ageing_time.attr,
|
||||||
|
&dev_attr_stp_state.attr,
|
||||||
|
&dev_attr_group_fwd_mask.attr,
|
||||||
|
+ &dev_attr_disable_eap_hack.attr,
|
||||||
|
&dev_attr_priority.attr,
|
||||||
|
&dev_attr_bridge_id.attr,
|
||||||
|
&dev_attr_root_id.attr,
|
||||||
|
Loading…
Reference in New Issue
Block a user