Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
4cb3afae73
@ -23,7 +23,7 @@ endef
|
||||
define U-Boot/apalis_imx6
|
||||
NAME:=Toradex Apalis
|
||||
UBOOT_IMAGE:=SPL u-boot.img u-boot-with-spl.imx
|
||||
UBOOT_MAKE_FLAGS:=SPL u-boot.img u-boot-with-spl.imx
|
||||
UBOOT_MAKE_FLAGS+=SPL u-boot.img u-boot-with-spl.imx
|
||||
BUILD_SUBTARGET:=cortexa9
|
||||
BUILD_DEVICES:=toradex_apalis
|
||||
endef
|
||||
@ -31,7 +31,7 @@ endef
|
||||
define U-Boot/mx6cuboxi
|
||||
NAME:=SolidRun Cubox-i boards
|
||||
UBOOT_IMAGE:=SPL u-boot-dtb.img
|
||||
UBOOT_MAKE_FLAGS:=SPL u-boot-dtb.img
|
||||
UBOOT_MAKE_FLAGS+=SPL u-boot-dtb.img
|
||||
BUILD_SUBTARGET:=cortexa9
|
||||
BUILD_DEVICES:=solidrun_cubox-i
|
||||
endef
|
||||
|
||||
99
package/kernel/ksmbd/patches/02-ipc-reserved-memory.patch
Normal file
99
package/kernel/ksmbd/patches/02-ipc-reserved-memory.patch
Normal file
@ -0,0 +1,99 @@
|
||||
From 41dbda16a0902798e732abc6599de256b9dc3b27 Mon Sep 17 00:00:00 2001
|
||||
From: Namjae Jeon <linkinjeon@kernel.org>
|
||||
Date: Thu, 6 Jan 2022 10:30:31 +0900
|
||||
Subject: ksmbd: add reserved room in ipc request/response
|
||||
|
||||
Whenever new parameter is added to smb configuration, It is possible
|
||||
to break the execution of the IPC daemon by mismatch size of
|
||||
request/response. This patch tries to reserve space in ipc request/response
|
||||
in advance to prevent that.
|
||||
|
||||
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
|
||||
Signed-off-by: Steve French <stfrench@microsoft.com>
|
||||
---
|
||||
fs/ksmbd/ksmbd_netlink.h | 11 ++++++++++-
|
||||
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/ksmbd_netlink.h
|
||||
+++ b/ksmbd_netlink.h
|
||||
@@ -103,6 +103,7 @@ struct ksmbd_startup_request {
|
||||
* we set the SPARSE_FILES bit (0x40).
|
||||
*/
|
||||
__u32 sub_auth[3]; /* Subauth value for Security ID */
|
||||
+ __u32 reserved[128]; /* Reserved room */
|
||||
__u32 ifc_list_sz; /* interfaces list size */
|
||||
__s8 ____payload[];
|
||||
};
|
||||
@@ -113,7 +114,7 @@ struct ksmbd_startup_request {
|
||||
* IPC request to shutdown ksmbd server.
|
||||
*/
|
||||
struct ksmbd_shutdown_request {
|
||||
- __s32 reserved;
|
||||
+ __s32 reserved[16];
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -122,6 +123,7 @@ struct ksmbd_shutdown_request {
|
||||
struct ksmbd_login_request {
|
||||
__u32 handle;
|
||||
__s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */
|
||||
+ __u32 reserved[16]; /* Reserved room */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -135,6 +137,7 @@ struct ksmbd_login_response {
|
||||
__u16 status;
|
||||
__u16 hash_sz; /* hash size */
|
||||
__s8 hash[KSMBD_REQ_MAX_HASH_SZ]; /* password hash */
|
||||
+ __u32 reserved[16]; /* Reserved room */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -143,6 +146,7 @@ struct ksmbd_login_response {
|
||||
struct ksmbd_share_config_request {
|
||||
__u32 handle;
|
||||
__s8 share_name[KSMBD_REQ_MAX_SHARE_NAME]; /* share name */
|
||||
+ __u32 reserved[16]; /* Reserved room */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -157,6 +161,7 @@ struct ksmbd_share_config_response {
|
||||
__u16 force_directory_mode;
|
||||
__u16 force_uid;
|
||||
__u16 force_gid;
|
||||
+ __u32 reserved[128]; /* Reserved room */
|
||||
__u32 veto_list_sz;
|
||||
__s8 ____payload[];
|
||||
};
|
||||
@@ -187,6 +192,7 @@ struct ksmbd_tree_connect_request {
|
||||
__s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
|
||||
__s8 share[KSMBD_REQ_MAX_SHARE_NAME];
|
||||
__s8 peer_addr[64];
|
||||
+ __u32 reserved[16]; /* Reserved room */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -196,6 +202,7 @@ struct ksmbd_tree_connect_response {
|
||||
__u32 handle;
|
||||
__u16 status;
|
||||
__u16 connection_flags;
|
||||
+ __u32 reserved[16]; /* Reserved room */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -204,6 +211,7 @@ struct ksmbd_tree_connect_response {
|
||||
struct ksmbd_tree_disconnect_request {
|
||||
__u64 session_id; /* session id */
|
||||
__u64 connect_id; /* tree connection id */
|
||||
+ __u32 reserved[16]; /* Reserved room */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -212,6 +220,7 @@ struct ksmbd_tree_disconnect_request {
|
||||
struct ksmbd_logout_request {
|
||||
__s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */
|
||||
__u32 account_flags;
|
||||
+ __u32 reserved[16]; /* Reserved room */
|
||||
};
|
||||
|
||||
/*
|
||||
@ -0,0 +1,118 @@
|
||||
From 6d945a33f2b0aa24fc210dadaa0af3e8218e7002 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Date: Fri, 25 Mar 2022 11:42:41 +0100
|
||||
Subject: [PATCH] mac80211: introduce BSS color collision detection
|
||||
|
||||
Add ieee80211_rx_check_bss_color_collision routine in order to introduce
|
||||
BSS color collision detection in mac80211 if it is not supported in HW/FW
|
||||
(e.g. for mt7915 chipset).
|
||||
Add IEEE80211_HW_DETECTS_COLOR_COLLISION flag to let the driver notify
|
||||
BSS color collision detection is supported in HW/FW. Set this for ath11k
|
||||
which apparently didn't need this code.
|
||||
|
||||
Tested-by: Peter Chiu <Chui-Hao.Chiu@mediatek.com>
|
||||
Co-developed-by: Ryder Lee <ryder.lee@mediatek.com>
|
||||
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
||||
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/a05eeeb1841a84560dc5aaec77894fcb69a54f27.1648204871.git.lorenzo@kernel.org
|
||||
[clarify commit message a bit, move flag to mac80211]
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/mac.c | 5 ++-
|
||||
include/net/mac80211.h | 4 +++
|
||||
net/mac80211/debugfs.c | 1 +
|
||||
net/mac80211/rx.c | 46 +++++++++++++++++++++++++++
|
||||
4 files changed, 55 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -2418,6 +2418,9 @@ struct ieee80211_txq {
|
||||
* usage and 802.11 frames with %RX_FLAG_ONLY_MONITOR set for monitor to
|
||||
* the stack.
|
||||
*
|
||||
+ * @IEEE80211_HW_DETECTS_COLOR_COLLISION: HW/driver has support for BSS color
|
||||
+ * collision detection and doesn't need it in software.
|
||||
+ *
|
||||
* @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
|
||||
*/
|
||||
enum ieee80211_hw_flags {
|
||||
@@ -2473,6 +2476,7 @@ enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_SUPPORTS_TX_ENCAP_OFFLOAD,
|
||||
IEEE80211_HW_SUPPORTS_RX_DECAP_OFFLOAD,
|
||||
IEEE80211_HW_SUPPORTS_CONC_MON_RX_DECAP,
|
||||
+ IEEE80211_HW_DETECTS_COLOR_COLLISION,
|
||||
|
||||
/* keep last, obviously */
|
||||
NUM_IEEE80211_HW_FLAGS
|
||||
--- a/net/mac80211/debugfs.c
|
||||
+++ b/net/mac80211/debugfs.c
|
||||
@@ -504,6 +504,7 @@ static const char *hw_flag_names[] = {
|
||||
FLAG(SUPPORTS_TX_ENCAP_OFFLOAD),
|
||||
FLAG(SUPPORTS_RX_DECAP_OFFLOAD),
|
||||
FLAG(SUPPORTS_CONC_MON_RX_DECAP),
|
||||
+ FLAG(DETECTS_COLOR_COLLISION),
|
||||
#undef FLAG
|
||||
};
|
||||
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -3177,6 +3177,49 @@ static void ieee80211_process_sa_query_r
|
||||
ieee80211_tx_skb(sdata, skb);
|
||||
}
|
||||
|
||||
+static void
|
||||
+ieee80211_rx_check_bss_color_collision(struct ieee80211_rx_data *rx)
|
||||
+{
|
||||
+ struct ieee80211_mgmt *mgmt = (void *)rx->skb->data;
|
||||
+ const struct element *ie;
|
||||
+ size_t baselen;
|
||||
+
|
||||
+ if (!wiphy_ext_feature_isset(rx->local->hw.wiphy,
|
||||
+ NL80211_EXT_FEATURE_BSS_COLOR))
|
||||
+ return;
|
||||
+
|
||||
+ if (ieee80211_hw_check(&rx->local->hw, DETECTS_COLOR_COLLISION))
|
||||
+ return;
|
||||
+
|
||||
+ if (rx->sdata->vif.csa_active)
|
||||
+ return;
|
||||
+
|
||||
+ baselen = mgmt->u.beacon.variable - rx->skb->data;
|
||||
+ if (baselen > rx->skb->len)
|
||||
+ return;
|
||||
+
|
||||
+ ie = cfg80211_find_ext_elem(WLAN_EID_EXT_HE_OPERATION,
|
||||
+ mgmt->u.beacon.variable,
|
||||
+ rx->skb->len - baselen);
|
||||
+ if (ie && ie->datalen >= sizeof(struct ieee80211_he_operation) &&
|
||||
+ ie->datalen >= ieee80211_he_oper_size(ie->data + 1)) {
|
||||
+ struct ieee80211_bss_conf *bss_conf = &rx->sdata->vif.bss_conf;
|
||||
+ const struct ieee80211_he_operation *he_oper;
|
||||
+ u8 color;
|
||||
+
|
||||
+ he_oper = (void *)(ie->data + 1);
|
||||
+ if (le32_get_bits(he_oper->he_oper_params,
|
||||
+ IEEE80211_HE_OPERATION_BSS_COLOR_DISABLED))
|
||||
+ return;
|
||||
+
|
||||
+ color = le32_get_bits(he_oper->he_oper_params,
|
||||
+ IEEE80211_HE_OPERATION_BSS_COLOR_MASK);
|
||||
+ if (color == bss_conf->he_bss_color.color)
|
||||
+ ieeee80211_obss_color_collision_notify(&rx->sdata->vif,
|
||||
+ BIT_ULL(color));
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static ieee80211_rx_result debug_noinline
|
||||
ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx)
|
||||
{
|
||||
@@ -3202,6 +3245,9 @@ ieee80211_rx_h_mgmt_check(struct ieee802
|
||||
!(rx->flags & IEEE80211_RX_BEACON_REPORTED)) {
|
||||
int sig = 0;
|
||||
|
||||
+ /* sw bss color collision detection */
|
||||
+ ieee80211_rx_check_bss_color_collision(rx);
|
||||
+
|
||||
if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM) &&
|
||||
!(status->flag & RX_FLAG_NO_SIGNAL_VAL))
|
||||
sig = status->signal;
|
||||
@ -597,6 +597,7 @@ ath79_setup_macs()
|
||||
dlink,dir-825-b1)
|
||||
lan_mac=$(mtd_get_mac_text "caldata" 0xffa0)
|
||||
wan_mac=$(mtd_get_mac_text "caldata" 0xffb4)
|
||||
label_mac=$wan_mac
|
||||
;;
|
||||
dlink,dir-505)
|
||||
lan_mac=$(mtd_get_mac_text "mac" 0x4)
|
||||
|
||||
@ -0,0 +1,99 @@
|
||||
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
|
||||
@@ -433,33 +433,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
|
||||
@@ -229,6 +229,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)
|
||||
@@ -364,6 +373,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;
|
||||
|
||||
@@ -600,6 +614,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;
|
||||
|
||||
@ -0,0 +1,99 @@
|
||||
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;
|
||||
|
||||
@ -837,7 +837,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(nf_flow_table_iterate);
|
||||
|
||||
static bool flow_offload_stale_dst(struct flow_offload_tuple *tuple)
|
||||
static void nf_flow_offload_gc_step(struct flow_offload *flow, void *data)
|
||||
{
|
||||
--- /dev/null
|
||||
+++ b/include/uapi/linux/netfilter/xt_FLOWOFFLOAD.h
|
||||
|
||||
@ -819,7 +819,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(nf_flow_table_iterate);
|
||||
|
||||
static bool flow_offload_stale_dst(struct flow_offload_tuple *tuple)
|
||||
static void nf_flow_offload_gc_step(struct flow_offload *flow, void *data)
|
||||
{
|
||||
--- /dev/null
|
||||
+++ b/include/uapi/linux/netfilter/xt_FLOWOFFLOAD.h
|
||||
|
||||
@ -19,6 +19,6 @@ DEFAULT_PACKAGES += \
|
||||
kmod-leds-gpio kmod-gpio-button-hotplug swconfig \
|
||||
kmod-ath10k-ct wpad-basic-wolfssl \
|
||||
kmod-usb3 kmod-usb-dwc3 ath10k-firmware-qca4019-ct \
|
||||
ath10k-board-qca4019 uboot-envtools
|
||||
uboot-envtools
|
||||
|
||||
$(eval $(call BuildTarget))
|
||||
|
||||
@ -1,2 +1,3 @@
|
||||
BOARDNAME:=Google Chromium
|
||||
FEATURES += emmc boot-part rootfs-part
|
||||
DEFAULT_PACKAGES += ath10k-board-qca4019
|
||||
|
||||
@ -1,2 +1,3 @@
|
||||
BOARDNAME:=Generic
|
||||
FEATURES+=emmc
|
||||
DEFAULT_PACKAGES += ath10k-board-qca4019
|
||||
|
||||
@ -2,4 +2,3 @@ BOARDNAME:=MikroTik
|
||||
FEATURES += minor
|
||||
KERNEL_IMAGES:=vmlinux
|
||||
IMAGES_DIR:=compressed
|
||||
DEFAULT_PACKAGES += -ath10k-board-qca4019
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
|
||||
. /lib/functions/uci-defaults.sh
|
||||
|
||||
board_config_update
|
||||
|
||||
ucidef_set_interface_wan "eth0"
|
||||
if [ -d "/sys/class/net/eth1" ]; then
|
||||
ucidef_set_interface_lan "eth1"
|
||||
fi
|
||||
|
||||
board_config_flush
|
||||
|
||||
exit 0
|
||||
@ -103,8 +103,10 @@
|
||||
|
||||
&pcie1 {
|
||||
wifi@0,0 {
|
||||
compatible = "mediatek,mt76";
|
||||
reg = <0x0 0 0 0 0>;
|
||||
mediatek,mtd-eeprom = <&factory 0x0>;
|
||||
mediatek,disable-radar-background;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -86,6 +86,8 @@
|
||||
};
|
||||
|
||||
&wlan_5g {
|
||||
compatible = "mediatek,mt76";
|
||||
|
||||
mediatek,mtd-eeprom = <&factory 0x20000>;
|
||||
|
||||
nvmem-cells = <&macaddr_eeprom_6>;
|
||||
@ -106,6 +108,8 @@
|
||||
mac-address-increment = <1>;
|
||||
|
||||
ieee80211-freq-limit = <5000000 6000000>;
|
||||
|
||||
mediatek,disable-radar-background;
|
||||
};
|
||||
|
||||
&eeprom {
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
--- a/drivers/gpio/gpio-realtek-otto.c
|
||||
+++ b/drivers/gpio/gpio-realtek-otto.c
|
||||
@@ -304,6 +304,7 @@ static int realtek_gpio_irq_set_affinity
|
||||
static int realtek_gpio_irq_init(struct gpio_chip *gc)
|
||||
{
|
||||
struct realtek_gpio_ctrl *ctrl = gpiochip_get_data(gc);
|
||||
+ void __iomem *irq_cpu_mask;
|
||||
unsigned int port;
|
||||
int cpu;
|
||||
|
||||
@@ -311,8 +312,16 @@ static int realtek_gpio_irq_init(struct
|
||||
realtek_gpio_write_imr(ctrl, port, 0, 0);
|
||||
realtek_gpio_clear_isr(ctrl, port, GENMASK(7, 0));
|
||||
|
||||
- for_each_cpu(cpu, &ctrl->cpu_irq_maskable)
|
||||
- iowrite8(GENMASK(7, 0), realtek_gpio_irq_cpu_mask(ctrl, port, cpu));
|
||||
+ /*
|
||||
+ * Uniprocessor builds assume a mask always contains one CPU,
|
||||
+ * so only start the loop if we have at least one maskable CPU.
|
||||
+ */
|
||||
+ if(!cpumask_empty(&ctrl->cpu_irq_maskable)) {
|
||||
+ for_each_cpu(cpu, &ctrl->cpu_irq_maskable) {
|
||||
+ irq_cpu_mask = realtek_gpio_irq_cpu_mask(ctrl, port, cpu);
|
||||
+ iowrite8(GENMASK(7, 0), irq_cpu_mask);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -12,8 +12,8 @@ PKG_RELEASE:=1
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware-utils.git
|
||||
PKG_SOURCE_DATE:=2022-04-25
|
||||
PKG_SOURCE_VERSION:=ddc3e00e314d3fbc3f9faab2d07395722ce9b01a
|
||||
PKG_MIRROR_HASH:=246fc1d72d3a8cdb4072d81e033c92abaf614acd6f35a10fffd029d5c7f9303b
|
||||
PKG_SOURCE_VERSION:=365458e00ed76d3ff4a2e1f0655c2efbdd5a8f13
|
||||
PKG_MIRROR_HASH:=6ab19b53f8123de5408fa1cda711143b2fb80a6b862b8e8294832c2b9df7b017
|
||||
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
|
||||
Loading…
Reference in New Issue
Block a user