mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-19 05:38:00 +00:00
kernel: bump 5.15 to 5.15.42
Deleted (upstreamed): generic/backport-5.15/610-v5.18-netfilter-flowtable-move-dst_check-to-packet-path.patch [1] generic/pending-5.15/704-00-netfilter-flowtable-fix-excessive-hw-offload-attempt.patch [2] generic/pending-5.15/704-01-netfilter-nft_flow_offload-skip-dst-neigh-lookup-for.patch [3] generic/pending-5.15/704-02-net-fix-dev_fill_forward_path-with-pppoe-bridge.patch [4] generic/pending-5.15/704-03-netfilter-nft_flow_offload-fix-offload-with-pppoe-vl.patch [5] Manually rebased: generic/hack-5.15/650-netfilter-add-xt_FLOWOFFLOAD-target.patch [1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.42&id=88b937673b3552d54da20f648e61a123f4c1fa67 [2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.42&id=5f4197a020c049a59ea7907c31f9ab037dcefefe [3] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.42&id=7613dcaceee281973145588f4244f2f78ef85b7f [4] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.42&id=f96b2e06721249ebf8da3254cfef29dcb6583948 [5] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.42&id=b329889974aed47e1167c85653c07097013e01a7 Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com>
This commit is contained in:
parent
ed1536e0b6
commit
2454342e06
@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-5.15 = .41
|
||||
LINUX_KERNEL_HASH-5.15.41 = 3c7cb1fc3b029b1b765a33af9608b6f18f734246050640def019ee4c4ad6591e
|
||||
LINUX_VERSION-5.15 = .42
|
||||
LINUX_KERNEL_HASH-5.15.42 = 5ecd47a9f663368f005f74d24c8de4ffd93007b675ddf342e2c6db956bf82560
|
||||
|
@ -11,7 +11,7 @@ This reverts commit 2388f826cdc9af2651991adc0feb79de9bdf2232.
|
||||
|
||||
--- a/drivers/video/fbdev/core/fbmem.c
|
||||
+++ b/drivers/video/fbdev/core/fbmem.c
|
||||
@@ -1619,14 +1619,7 @@ static void do_remove_conflicting_frameb
|
||||
@@ -1616,14 +1616,7 @@ static void do_remove_conflicting_frameb
|
||||
* If it's not a platform device, at least print a warning. A
|
||||
* fix would add code to remove the device from the system.
|
||||
*/
|
||||
|
@ -20,7 +20,7 @@ This reverts commit c894ac44786cfed383a6c6b20c1bfb12eb96018a.
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/kmod.h>
|
||||
@@ -1596,36 +1595,18 @@ static void do_remove_conflicting_frameb
|
||||
@@ -1593,36 +1592,18 @@ static void do_remove_conflicting_frameb
|
||||
/* check all firmware fbs and kick off if the base addr overlaps */
|
||||
for_each_registered_fb(i) {
|
||||
struct apertures_struct *gen_aper;
|
||||
@ -58,7 +58,7 @@ This reverts commit c894ac44786cfed383a6c6b20c1bfb12eb96018a.
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1952,13 +1933,9 @@ EXPORT_SYMBOL(register_framebuffer);
|
||||
@@ -1949,13 +1930,9 @@ EXPORT_SYMBOL(register_framebuffer);
|
||||
void
|
||||
unregister_framebuffer(struct fb_info *fb_info)
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -276,6 +276,7 @@ config BMIPS_GENERIC
|
||||
@@ -277,6 +277,7 @@ config BMIPS_GENERIC
|
||||
select BCM7038_L1_IRQ
|
||||
select BCM7120_L2_IRQ
|
||||
select BRCMSTB_L2_IRQ
|
||||
|
@ -10,7 +10,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
|
||||
--- a/net/netfilter/nf_flow_table_core.c
|
||||
+++ b/net/netfilter/nf_flow_table_core.c
|
||||
@@ -646,13 +646,41 @@ void nf_flow_table_free(struct nf_flowta
|
||||
@@ -608,13 +608,41 @@ void nf_flow_table_free(struct nf_flowta
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nf_flow_table_free);
|
||||
|
||||
@ -55,7 +55,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
|
||||
--- a/net/netfilter/nft_flow_offload.c
|
||||
+++ b/net/netfilter/nft_flow_offload.c
|
||||
@@ -438,47 +438,14 @@ static struct nft_expr_type nft_flow_off
|
||||
@@ -444,47 +444,14 @@ static struct nft_expr_type nft_flow_off
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
|
@ -1,99 +0,0 @@
|
||||
From 2738d9d963bd1f06d5114c2b4fa5771a95703991 Mon Sep 17 00:00:00 2001
|
||||
From: Ritaro Takenaka <ritarot634@gmail.com>
|
||||
Date: Tue, 17 May 2022 12:55:30 +0200
|
||||
Subject: [PATCH] netfilter: flowtable: move dst_check to packet path
|
||||
|
||||
Fixes sporadic IPv6 packet loss when flow offloading is enabled.
|
||||
|
||||
IPv6 route GC and flowtable GC are not synchronized.
|
||||
When dst_cache becomes stale and a packet passes through the flow before
|
||||
the flowtable GC teardowns it, the packet can be dropped.
|
||||
So, it is necessary to check dst every time in packet path.
|
||||
|
||||
Fixes: 227e1e4d0d6c ("netfilter: nf_flowtable: skip device lookup from interface index")
|
||||
Signed-off-by: Ritaro Takenaka <ritarot634@gmail.com>
|
||||
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
---
|
||||
net/netfilter/nf_flow_table_core.c | 23 +----------------------
|
||||
net/netfilter/nf_flow_table_ip.c | 19 +++++++++++++++++++
|
||||
2 files changed, 20 insertions(+), 22 deletions(-)
|
||||
|
||||
--- a/net/netfilter/nf_flow_table_core.c
|
||||
+++ b/net/netfilter/nf_flow_table_core.c
|
||||
@@ -431,33 +431,12 @@ nf_flow_table_iterate(struct nf_flowtabl
|
||||
return err;
|
||||
}
|
||||
|
||||
-static bool flow_offload_stale_dst(struct flow_offload_tuple *tuple)
|
||||
-{
|
||||
- struct dst_entry *dst;
|
||||
-
|
||||
- if (tuple->xmit_type == FLOW_OFFLOAD_XMIT_NEIGH ||
|
||||
- tuple->xmit_type == FLOW_OFFLOAD_XMIT_XFRM) {
|
||||
- dst = tuple->dst_cache;
|
||||
- if (!dst_check(dst, tuple->dst_cookie))
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- return false;
|
||||
-}
|
||||
-
|
||||
-static bool nf_flow_has_stale_dst(struct flow_offload *flow)
|
||||
-{
|
||||
- return flow_offload_stale_dst(&flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].tuple) ||
|
||||
- flow_offload_stale_dst(&flow->tuplehash[FLOW_OFFLOAD_DIR_REPLY].tuple);
|
||||
-}
|
||||
-
|
||||
static void nf_flow_offload_gc_step(struct flow_offload *flow, void *data)
|
||||
{
|
||||
struct nf_flowtable *flow_table = data;
|
||||
|
||||
if (nf_flow_has_expired(flow) ||
|
||||
- nf_ct_is_dying(flow->ct) ||
|
||||
- nf_flow_has_stale_dst(flow))
|
||||
+ nf_ct_is_dying(flow->ct))
|
||||
set_bit(NF_FLOW_TEARDOWN, &flow->flags);
|
||||
|
||||
if (test_bit(NF_FLOW_TEARDOWN, &flow->flags)) {
|
||||
--- a/net/netfilter/nf_flow_table_ip.c
|
||||
+++ b/net/netfilter/nf_flow_table_ip.c
|
||||
@@ -227,6 +227,15 @@ static bool nf_flow_exceeds_mtu(const st
|
||||
return true;
|
||||
}
|
||||
|
||||
+static inline bool nf_flow_dst_check(struct flow_offload_tuple *tuple)
|
||||
+{
|
||||
+ if (tuple->xmit_type != FLOW_OFFLOAD_XMIT_NEIGH &&
|
||||
+ tuple->xmit_type != FLOW_OFFLOAD_XMIT_XFRM)
|
||||
+ return true;
|
||||
+
|
||||
+ return dst_check(tuple->dst_cache, tuple->dst_cookie);
|
||||
+}
|
||||
+
|
||||
static unsigned int nf_flow_xmit_xfrm(struct sk_buff *skb,
|
||||
const struct nf_hook_state *state,
|
||||
struct dst_entry *dst)
|
||||
@@ -346,6 +355,11 @@ nf_flow_offload_ip_hook(void *priv, stru
|
||||
if (nf_flow_state_check(flow, iph->protocol, skb, thoff))
|
||||
return NF_ACCEPT;
|
||||
|
||||
+ if (!nf_flow_dst_check(&tuplehash->tuple)) {
|
||||
+ flow_offload_teardown(flow);
|
||||
+ return NF_ACCEPT;
|
||||
+ }
|
||||
+
|
||||
if (skb_try_make_writable(skb, thoff + hdrsize))
|
||||
return NF_DROP;
|
||||
|
||||
@@ -582,6 +596,11 @@ nf_flow_offload_ipv6_hook(void *priv, st
|
||||
if (nf_flow_state_check(flow, ip6h->nexthdr, skb, thoff))
|
||||
return NF_ACCEPT;
|
||||
|
||||
+ if (!nf_flow_dst_check(&tuplehash->tuple)) {
|
||||
+ flow_offload_teardown(flow);
|
||||
+ return NF_ACCEPT;
|
||||
+ }
|
||||
+
|
||||
if (skb_try_make_writable(skb, thoff + hdrsize))
|
||||
return NF_DROP;
|
||||
|
@ -154,7 +154,7 @@
|
||||
|
||||
static int
|
||||
br_netif_receive_skb(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||
@@ -164,6 +165,7 @@ int br_handle_frame_finish(struct net *n
|
||||
@@ -171,6 +172,7 @@ int br_handle_frame_finish(struct net *n
|
||||
dst->used = now;
|
||||
br_forward(dst->dst, skb, local_rcv, false);
|
||||
} else {
|
||||
@ -162,7 +162,7 @@
|
||||
if (!mcast_hit)
|
||||
br_flood(br, skb, pkt_type, local_rcv, false);
|
||||
else
|
||||
@@ -297,6 +299,9 @@ static rx_handler_result_t br_handle_fra
|
||||
@@ -304,6 +306,9 @@ static rx_handler_result_t br_handle_fra
|
||||
memset(skb->cb, 0, sizeof(struct br_input_skb_cb));
|
||||
|
||||
p = br_port_get_rcu(skb->dev);
|
||||
|
@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
|
||||
--- /dev/null
|
||||
+++ b/net/netfilter/xt_FLOWOFFLOAD.c
|
||||
@@ -0,0 +1,694 @@
|
||||
@@ -0,0 +1,697 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2018-2021 Felix Fietkau <nbd@nbd.name>
|
||||
+ *
|
||||
@ -289,13 +289,16 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+xt_flowoffload_check_hook(struct flow_offload *flow, void *data)
|
||||
+xt_flowoffload_check_hook(struct nf_flowtable *flowtable,
|
||||
+ struct flow_offload *flow, void *data)
|
||||
+{
|
||||
+ struct xt_flowoffload_table *table = data;
|
||||
+ struct xt_flowoffload_table *table;
|
||||
+ struct flow_offload_tuple *tuple0 = &flow->tuplehash[0].tuple;
|
||||
+ struct flow_offload_tuple *tuple1 = &flow->tuplehash[1].tuple;
|
||||
+ struct xt_flowoffload_hook *hook;
|
||||
+
|
||||
+ table = container_of(flowtable, struct xt_flowoffload_table, ft);
|
||||
+
|
||||
+ spin_lock_bh(&hooks_lock);
|
||||
+ hlist_for_each_entry(hook, &table->hooks, list) {
|
||||
+ if (hook->ops.dev->ifindex != tuple0->iifidx &&
|
||||
@ -323,7 +326,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+ spin_unlock_bh(&hooks_lock);
|
||||
+
|
||||
+ err = nf_flow_table_iterate(&table->ft, xt_flowoffload_check_hook,
|
||||
+ table);
|
||||
+ NULL);
|
||||
+ if (err && err != -EAGAIN)
|
||||
+ goto out;
|
||||
+
|
||||
@ -803,23 +806,23 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#include <net/netfilter/nf_flow_table.h>
|
||||
#include <net/netfilter/nf_conntrack.h>
|
||||
#include <net/netfilter/nf_conntrack_core.h>
|
||||
@@ -399,8 +398,7 @@ flow_offload_lookup(struct nf_flowtable
|
||||
@@ -380,8 +379,7 @@ flow_offload_lookup(struct nf_flowtable
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(flow_offload_lookup);
|
||||
|
||||
-static int
|
||||
-nf_flow_table_iterate(struct nf_flowtable *flow_table,
|
||||
+int nf_flow_table_iterate(struct nf_flowtable *flow_table,
|
||||
void (*iter)(struct flow_offload *flow, void *data),
|
||||
void (*iter)(struct nf_flowtable *flowtable,
|
||||
struct flow_offload *flow, void *data),
|
||||
void *data)
|
||||
{
|
||||
@@ -432,6 +430,7 @@ nf_flow_table_iterate(struct nf_flowtabl
|
||||
|
||||
return err;
|
||||
@@ -435,6 +433,7 @@ static void nf_flow_offload_gc_step(stru
|
||||
nf_flow_offload_stats(flow_table, flow);
|
||||
}
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(nf_flow_table_iterate);
|
||||
|
||||
static void nf_flow_offload_gc_step(struct flow_offload *flow, void *data)
|
||||
static void nf_flow_offload_work_gc(struct work_struct *work)
|
||||
{
|
||||
--- /dev/null
|
||||
+++ b/include/uapi/linux/netfilter/xt_FLOWOFFLOAD.h
|
||||
@ -843,13 +846,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+#endif /* _XT_FLOWOFFLOAD_H */
|
||||
--- a/include/net/netfilter/nf_flow_table.h
|
||||
+++ b/include/net/netfilter/nf_flow_table.h
|
||||
@@ -275,6 +275,10 @@ void nf_flow_table_free(struct nf_flowta
|
||||
@@ -275,6 +275,11 @@ void nf_flow_table_free(struct nf_flowta
|
||||
|
||||
void flow_offload_teardown(struct flow_offload *flow);
|
||||
|
||||
+int nf_flow_table_iterate(struct nf_flowtable *flow_table,
|
||||
+ void (*iter)(struct flow_offload *flow, void *data),
|
||||
+ void *data);
|
||||
+ void (*iter)(struct nf_flowtable *flowtable,
|
||||
+ struct flow_offload *flow, void *data),
|
||||
+ void *data);
|
||||
+
|
||||
void nf_flow_snat_port(const struct flow_offload *flow,
|
||||
struct sk_buff *skb, unsigned int thoff,
|
||||
|
@ -63,7 +63,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+dma-shared-buffer-objs := $(dma-buf-objs-y)
|
||||
--- a/drivers/dma-buf/dma-buf.c
|
||||
+++ b/drivers/dma-buf/dma-buf.c
|
||||
@@ -1498,4 +1498,5 @@ static void __exit dma_buf_deinit(void)
|
||||
@@ -1506,4 +1506,5 @@ static void __exit dma_buf_deinit(void)
|
||||
kern_unmount(dma_buf_mnt);
|
||||
dma_buf_uninit_sysfs_statistics();
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/bridge/br_input.c
|
||||
+++ b/net/bridge/br_input.c
|
||||
@@ -197,6 +197,9 @@ static void __br_handle_local_finish(str
|
||||
@@ -204,6 +204,9 @@ static void __br_handle_local_finish(str
|
||||
/* note: already called with rcu_read_lock */
|
||||
static int br_handle_local_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
__br_handle_local_finish(skb);
|
||||
|
||||
/* return 1 to signal the okfn() was called so it's ok to use the skb */
|
||||
@@ -362,6 +365,17 @@ static rx_handler_result_t br_handle_fra
|
||||
@@ -369,6 +372,17 @@ static rx_handler_result_t br_handle_fra
|
||||
|
||||
forward:
|
||||
switch (p->state) {
|
||||
|
@ -1,27 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Fri, 6 May 2022 12:37:23 +0200
|
||||
Subject: [PATCH] netfilter: flowtable: fix excessive hw offload attempts
|
||||
after failure
|
||||
|
||||
If a flow cannot be offloaded, the code currently repeatedly tries again as
|
||||
quickly as possible, which can significantly increase system load.
|
||||
Fix this by limiting flow timeout update and hardware offload retry to once
|
||||
per second.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/netfilter/nf_flow_table_core.c
|
||||
+++ b/net/netfilter/nf_flow_table_core.c
|
||||
@@ -329,8 +329,10 @@ void flow_offload_refresh(struct nf_flow
|
||||
u32 timeout;
|
||||
|
||||
timeout = nf_flowtable_time_stamp + flow_offload_get_timeout(flow);
|
||||
- if (READ_ONCE(flow->timeout) != timeout)
|
||||
+ if (timeout - READ_ONCE(flow->timeout) > HZ)
|
||||
WRITE_ONCE(flow->timeout, timeout);
|
||||
+ else
|
||||
+ return;
|
||||
|
||||
if (likely(!nf_flowtable_hw_offload(flow_table)))
|
||||
return;
|
@ -1,64 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Fri, 6 May 2022 12:43:58 +0200
|
||||
Subject: [PATCH] netfilter: nft_flow_offload: skip dst neigh lookup for
|
||||
ppp devices
|
||||
|
||||
The dst entry does not contain a valid hardware address, so skip the lookup
|
||||
in order to avoid running into errors here.
|
||||
The proper hardware address is filled in from nft_dev_path_info
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/netfilter/nft_flow_offload.c
|
||||
+++ b/net/netfilter/nft_flow_offload.c
|
||||
@@ -36,6 +36,15 @@ static void nft_default_forward_path(str
|
||||
route->tuple[dir].xmit_type = nft_xmit_type(dst_cache);
|
||||
}
|
||||
|
||||
+static bool nft_is_valid_ether_device(const struct net_device *dev)
|
||||
+{
|
||||
+ if (!dev || (dev->flags & IFF_LOOPBACK) || dev->type != ARPHRD_ETHER ||
|
||||
+ dev->addr_len != ETH_ALEN || !is_valid_ether_addr(dev->dev_addr))
|
||||
+ return false;
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
static int nft_dev_fill_forward_path(const struct nf_flow_route *route,
|
||||
const struct dst_entry *dst_cache,
|
||||
const struct nf_conn *ct,
|
||||
@@ -47,6 +56,9 @@ static int nft_dev_fill_forward_path(con
|
||||
struct neighbour *n;
|
||||
u8 nud_state;
|
||||
|
||||
+ if (!nft_is_valid_ether_device(dev))
|
||||
+ goto out;
|
||||
+
|
||||
n = dst_neigh_lookup(dst_cache, daddr);
|
||||
if (!n)
|
||||
return -1;
|
||||
@@ -60,6 +72,7 @@ static int nft_dev_fill_forward_path(con
|
||||
if (!(nud_state & NUD_VALID))
|
||||
return -1;
|
||||
|
||||
+out:
|
||||
return dev_fill_forward_path(dev, ha, stack);
|
||||
}
|
||||
|
||||
@@ -78,15 +91,6 @@ struct nft_forward_info {
|
||||
enum flow_offload_xmit_type xmit_type;
|
||||
};
|
||||
|
||||
-static bool nft_is_valid_ether_device(const struct net_device *dev)
|
||||
-{
|
||||
- if (!dev || (dev->flags & IFF_LOOPBACK) || dev->type != ARPHRD_ETHER ||
|
||||
- dev->addr_len != ETH_ALEN || !is_valid_ether_addr(dev->dev_addr))
|
||||
- return false;
|
||||
-
|
||||
- return true;
|
||||
-}
|
||||
-
|
||||
static void nft_dev_path_info(const struct net_device_path_stack *stack,
|
||||
struct nft_forward_info *info,
|
||||
unsigned char *ha, struct nf_flowtable *flowtable)
|
@ -1,66 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Fri, 6 May 2022 13:54:44 +0200
|
||||
Subject: [PATCH] net: fix dev_fill_forward_path with pppoe + bridge
|
||||
|
||||
When calling dev_fill_forward_path on a pppoe device, the provided destination
|
||||
address is invalid. In order for the bridge fdb lookup to succeed, the pppoe
|
||||
code needs to update ctx->daddr to the correct value.
|
||||
Fix this by storing the address inside struct net_device_path_ctx
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
||||
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
||||
@@ -90,7 +90,6 @@ mtk_flow_get_wdma_info(struct net_device
|
||||
{
|
||||
struct net_device_path_ctx ctx = {
|
||||
.dev = dev,
|
||||
- .daddr = addr,
|
||||
};
|
||||
struct net_device_path path = {};
|
||||
|
||||
@@ -100,6 +99,7 @@ mtk_flow_get_wdma_info(struct net_device
|
||||
if (!dev->netdev_ops->ndo_fill_forward_path)
|
||||
return -1;
|
||||
|
||||
+ memcpy(ctx.daddr, addr, sizeof(ctx.daddr));
|
||||
if (dev->netdev_ops->ndo_fill_forward_path(&ctx, &path))
|
||||
return -1;
|
||||
|
||||
--- a/drivers/net/ppp/pppoe.c
|
||||
+++ b/drivers/net/ppp/pppoe.c
|
||||
@@ -988,6 +988,7 @@ static int pppoe_fill_forward_path(struc
|
||||
path->encap.proto = htons(ETH_P_PPP_SES);
|
||||
path->encap.id = be16_to_cpu(po->num);
|
||||
memcpy(path->encap.h_dest, po->pppoe_pa.remote, ETH_ALEN);
|
||||
+ memcpy(ctx->daddr, po->pppoe_pa.remote, ETH_ALEN);
|
||||
path->dev = ctx->dev;
|
||||
ctx->dev = dev;
|
||||
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -894,7 +894,7 @@ struct net_device_path_stack {
|
||||
|
||||
struct net_device_path_ctx {
|
||||
const struct net_device *dev;
|
||||
- const u8 *daddr;
|
||||
+ u8 daddr[ETH_ALEN];
|
||||
|
||||
int num_vlans;
|
||||
struct {
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -741,11 +741,11 @@ int dev_fill_forward_path(const struct n
|
||||
const struct net_device *last_dev;
|
||||
struct net_device_path_ctx ctx = {
|
||||
.dev = dev,
|
||||
- .daddr = daddr,
|
||||
};
|
||||
struct net_device_path *path;
|
||||
int ret = 0;
|
||||
|
||||
+ memcpy(ctx.daddr, daddr, sizeof(ctx.daddr));
|
||||
stack->num_paths = 0;
|
||||
while (ctx.dev && ctx.dev->netdev_ops->ndo_fill_forward_path) {
|
||||
last_dev = ctx.dev;
|
@ -1,24 +0,0 @@
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Fri, 6 May 2022 15:15:06 +0200
|
||||
Subject: [PATCH] netfilter: nft_flow_offload: fix offload with pppoe +
|
||||
vlan
|
||||
|
||||
When running a combination of PPPoE on top of a VLAN, we need to set
|
||||
info->outdev to the PPPoE device, otherwise PPPoE encap is skipped
|
||||
during software offload.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/netfilter/nft_flow_offload.c
|
||||
+++ b/net/netfilter/nft_flow_offload.c
|
||||
@@ -123,7 +123,8 @@ static void nft_dev_path_info(const stru
|
||||
info->indev = NULL;
|
||||
break;
|
||||
}
|
||||
- info->outdev = path->dev;
|
||||
+ if (!info->outdev)
|
||||
+ info->outdev = path->dev;
|
||||
info->encap[info->num_encaps].id = path->encap.id;
|
||||
info->encap[info->num_encaps].proto = path->encap.proto;
|
||||
info->num_encaps++;
|
@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!(p->flags & BR_BCAST_FLOOD) && skb->dev != br->dev)
|
||||
--- a/net/bridge/br_input.c
|
||||
+++ b/net/bridge/br_input.c
|
||||
@@ -319,6 +319,8 @@ static rx_handler_result_t br_handle_fra
|
||||
@@ -326,6 +326,8 @@ static rx_handler_result_t br_handle_fra
|
||||
fwd_mask |= p->group_fwd_mask;
|
||||
switch (dest[5]) {
|
||||
case 0x00: /* Bridge Group Address */
|
||||
|
@ -33,15 +33,15 @@ Signed-off-by: Marek Behún <kabel@kernel.org>
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -275,7 +275,6 @@ struct advk_pcie {
|
||||
int irq;
|
||||
@@ -274,7 +274,6 @@ struct advk_pcie {
|
||||
u8 wins_count;
|
||||
struct irq_domain *rp_irq_domain;
|
||||
struct irq_domain *irq_domain;
|
||||
- struct irq_chip irq_chip;
|
||||
raw_spinlock_t irq_lock;
|
||||
struct irq_domain *msi_domain;
|
||||
struct irq_domain *msi_inner_domain;
|
||||
@@ -1331,14 +1330,19 @@ static void advk_pcie_irq_unmask(struct
|
||||
@@ -1330,14 +1329,19 @@ static void advk_pcie_irq_unmask(struct
|
||||
raw_spin_unlock_irqrestore(&pcie->irq_lock, flags);
|
||||
}
|
||||
|
||||
@ -63,7 +63,7 @@ Signed-off-by: Marek Behún <kabel@kernel.org>
|
||||
irq_set_chip_data(virq, pcie);
|
||||
|
||||
return 0;
|
||||
@@ -1397,7 +1401,6 @@ static int advk_pcie_init_irq_domain(str
|
||||
@@ -1396,7 +1400,6 @@ static int advk_pcie_init_irq_domain(str
|
||||
struct device *dev = &pcie->pdev->dev;
|
||||
struct device_node *node = dev->of_node;
|
||||
struct device_node *pcie_intc_node;
|
||||
@ -71,7 +71,7 @@ Signed-off-by: Marek Behún <kabel@kernel.org>
|
||||
int ret = 0;
|
||||
|
||||
raw_spin_lock_init(&pcie->irq_lock);
|
||||
@@ -1408,28 +1411,14 @@ static int advk_pcie_init_irq_domain(str
|
||||
@@ -1407,28 +1410,14 @@ static int advk_pcie_init_irq_domain(str
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,7 @@ Acked-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -1622,9 +1622,7 @@ static int advk_pcie_enable_phy(struct a
|
||||
@@ -1616,9 +1616,7 @@ static int advk_pcie_enable_phy(struct a
|
||||
}
|
||||
|
||||
ret = phy_power_on(pcie->phy);
|
||||
|
Loading…
Reference in New Issue
Block a user