--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
-@@ -213,6 +213,8 @@ void ftrace_likely_update(struct ftrace_
+@@ -211,6 +211,8 @@ void ftrace_likely_update(struct ftrace_
__v; \
})
#endif /* __KERNEL__ */
/*
-@@ -245,6 +247,4 @@ static inline void *offset_to_ptr(const
+@@ -243,6 +245,4 @@ static inline void *offset_to_ptr(const
*/
#define prevent_tail_call_optimization() mb()
--- a/drivers/spi/spidev.c
+++ b/drivers/spi/spidev.c
@@ -682,6 +682,7 @@ static const struct of_device_id spidev_
- { .compatible = "lwn,bk4" },
- { .compatible = "dh,dhcom-board" },
{ .compatible = "menlo,m53cpld" },
+ { .compatible = "cisco,spi-petra" },
+ { .compatible = "micron,spi-authenta" },
+ { .compatible = "siliconlabs,si3210" },
{},
};
--- a/fs/jffs2/dir.c
+++ b/fs/jffs2/dir.c
-@@ -609,7 +609,8 @@ static int jffs2_rmdir (struct inode *di
+@@ -609,8 +609,8 @@ static int jffs2_rmdir (struct inode *di
return ret;
}
--static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, umode_t mode, dev_t rdev)
-+static int __jffs2_mknod (struct inode *dir_i, struct dentry *dentry,
-+ umode_t mode, dev_t rdev, bool whiteout)
+-static int jffs2_mknod (struct user_namespace *mnt_userns, struct inode *dir_i,
+- struct dentry *dentry, umode_t mode, dev_t rdev)
++static int __jffs2_mknod (struct user_namespace *mnt_userns, struct inode *dir_i,
++ struct dentry *dentry, umode_t mode, dev_t rdev, bool whiteout)
{
struct jffs2_inode_info *f, *dir_f;
struct jffs2_sb_info *c;
return 0;
fail:
-@@ -756,6 +761,17 @@ static int jffs2_mknod (struct inode *di
+@@ -756,6 +761,19 @@ static int jffs2_mknod (struct inode *di
return ret;
}
-+static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, umode_t mode, dev_t rdev)
++static int jffs2_mknod (struct user_namespace *mnt_userns, struct inode *dir_i,
++ struct dentry *dentry, umode_t mode, dev_t rdev)
+{
-+ return __jffs2_mknod(dir_i, dentry, mode, rdev, false);
++ return __jffs2_mknod(mnt_userns, dir_i, dentry, mode, rdev, false);
+}
+
-+static int jffs2_whiteout (struct inode *old_dir, struct dentry *old_dentry)
++static int jffs2_whiteout (struct user_namespace *mnt_userns, struct inode *old_dir,
++ struct dentry *old_dentry)
+{
-+ return __jffs2_mknod(old_dir, old_dentry, S_IFCHR | WHITEOUT_MODE,
++ return __jffs2_mknod(mnt_userns, old_dir, old_dentry, S_IFCHR | WHITEOUT_MODE,
+ WHITEOUT_DEV, true);
+}
+
- static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
+ static int jffs2_rename (struct user_namespace *mnt_userns,
+ struct inode *old_dir_i, struct dentry *old_dentry,
struct inode *new_dir_i, struct dentry *new_dentry,
- unsigned int flags)
@@ -766,7 +782,7 @@ static int jffs2_rename (struct inode *o
uint8_t type;
uint32_t now;
- old_dentry->d_name.name, old_dentry->d_name.len, NULL, now);
+ if (flags & RENAME_WHITEOUT)
+ /* Replace with whiteout */
-+ ret = jffs2_whiteout(old_dir_i, old_dentry);
++ ret = jffs2_whiteout(mnt_userns, old_dir_i, old_dentry);
+ else
+ /* Unlink the original */
+ ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i),
@@ -851,6 +864,12 @@ static int jffs2_rename (struct inode *o
if (flags & RENAME_WHITEOUT)
/* Replace with whiteout */
- ret = jffs2_whiteout(old_dir_i, old_dentry);
+ ret = jffs2_whiteout(mnt_userns, old_dir_i, old_dentry);
+ else if (flags & RENAME_EXCHANGE)
+ /* Replace the original */
+ ret = jffs2_do_link(c, JFFS2_INODE_INFO(old_dir_i),
--- a/drivers/platform/Kconfig
+++ b/drivers/platform/Kconfig
@@ -13,3 +13,5 @@ source "drivers/platform/chrome/Kconfig"
- source "drivers/platform/mellanox/Kconfig"
-
source "drivers/platform/olpc/Kconfig"
+
+ source "drivers/platform/surface/Kconfig"
+
+source "drivers/platform/mikrotik/Kconfig"
--- a/drivers/platform/Makefile
+++ b/drivers/platform/Makefile
@@ -9,3 +9,4 @@ obj-$(CONFIG_MIPS) += mips/
- obj-$(CONFIG_OLPC_EC) += olpc/
obj-$(CONFIG_GOLDFISH) += goldfish/
obj-$(CONFIG_CHROME_PLATFORMS) += chrome/
+ obj-$(CONFIG_SURFACE_PLATFORMS) += surface/
+obj-$(CONFIG_MIKROTIK) += mikrotik/
static int apply_r_mips_none(struct module *me, u32 *location,
u32 base, Elf_Addr v, bool rela)
@@ -54,9 +261,40 @@ static int apply_r_mips_32(struct module
- return 0;
+ *location = base + v;
}
+static Elf_Addr add_plt_entry_to(unsigned *plt_offset,
+
+}
+
- static int apply_r_mips_26(struct module *me, u32 *location,
- u32 base, Elf_Addr v, bool rela)
+ static int apply_r_mips_26(struct module *me, u32 *location, u32 base,
+ Elf_Addr v)
{
+ u32 ofs = base & 0x03ffffff;
+
--- a/arch/mips/kernel/proc.c
+++ b/arch/mips/kernel/proc.c
-@@ -138,6 +138,120 @@ static int show_cpuinfo(struct seq_file
+@@ -138,6 +138,116 @@ static int show_cpuinfo(struct seq_file
seq_printf(m, "micromips kernel\t: %s\n",
(read_c0_config3() & MIPS_CONF3_ISA_OE) ? "yes" : "no");
}
+ seq_printf(m, "%s", " 3k_cache");
+ if (cpu_has_4k_cache)
+ seq_printf(m, "%s", " 4k_cache");
-+ if (cpu_has_6k_cache)
-+ seq_printf(m, "%s", " 6k_cache");
-+ if (cpu_has_8k_cache)
-+ seq_printf(m, "%s", " 8k_cache");
+ if (cpu_has_tx39_cache)
+ seq_printf(m, "%s", " tx39_cache");
+ if (cpu_has_octeon_cache)
+#endif
--- a/arch/mips/kernel/relocate_kernel.S
+++ b/arch/mips/kernel/relocate_kernel.S
-@@ -10,8 +10,9 @@
+@@ -10,10 +10,11 @@
#include <asm/mipsregs.h>
#include <asm/stackframe.h>
#include <asm/addrspace.h>
+#include "machine_kexec.h"
+ #include <kernel-entry-init.h>
+
-LEAF(relocate_new_kernel)
+LEAF(kexec_relocate_new_kernel)
PTR_L a0, arg0
#ifdef CONFIG_SMP
/*
@@ -182,9 +183,15 @@ kexec_indirection_page:
- PTR 0
+ PTR_WD 0
.size kexec_indirection_page, PTRSIZE
-relocate_new_kernel_end:
-relocate_new_kernel_size:
- EXPORT(relocate_new_kernel_size)
-- PTR relocate_new_kernel_end - relocate_new_kernel
+- PTR_WD relocate_new_kernel_end - relocate_new_kernel
- .size relocate_new_kernel_size, PTRSIZE
+kexec_relocate_new_kernel_end:
+ EXPORT(kexec_relocate_new_kernel_end)
+++ /dev/null
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
-Date: Thu, 6 May 2021 12:33:58 +0200
-Subject: [PATCH] mtd: parsers: ofpart: fix parsing subpartitions
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-ofpart was recently patched to not scan random partition nodes as
-subpartitions. That change unfortunately broke scanning valid
-subpartitions like:
-
-partitions {
- compatible = "fixed-partitions";
- #address-cells = <1>;
- #size-cells = <1>;
-
- partition@0 {
- compatible = "fixed-partitions";
- label = "bootloader";
- reg = <0x0 0x100000>;
-
- partition@0 {
- label = "config";
- reg = <0x80000 0x80000>;
- };
- };
-};
-
-Fix that regression by adding 1 more code path. We actually need 3
-conditional blocks to support 3 possible cases. This change also makes
-code easier to understand & follow.
-
-Reported-by: David Bauer <mail@david-bauer.net>
-Fixes: 2d751203aacf ("mtd: parsers: ofpart: limit parsing of deprecated DT syntax
-Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
----
- drivers/mtd/parsers/ofpart_core.c | 26 ++++++++++++++------------
- 1 file changed, 14 insertions(+), 12 deletions(-)
-
---- a/drivers/mtd/parsers/ofpart_core.c
-+++ b/drivers/mtd/parsers/ofpart_core.c
-@@ -57,20 +57,22 @@ static int parse_fixed_partitions(struct
- if (!mtd_node)
- return 0;
-
-- ofpart_node = of_get_child_by_name(mtd_node, "partitions");
-- if (!ofpart_node && !master->parent) {
-- /*
-- * We might get here even when ofpart isn't used at all (e.g.,
-- * when using another parser), so don't be louder than
-- * KERN_DEBUG
-- */
-- pr_debug("%s: 'partitions' subnode not found on %pOF. Trying to parse direct subnodes as partitions.\n",
-- master->name, mtd_node);
-+ if (!master->parent) { /* Master */
-+ ofpart_node = of_get_child_by_name(mtd_node, "partitions");
-+ if (!ofpart_node) {
-+ /*
-+ * We might get here even when ofpart isn't used at all (e.g.,
-+ * when using another parser), so don't be louder than
-+ * KERN_DEBUG
-+ */
-+ pr_debug("%s: 'partitions' subnode not found on %pOF. Trying to parse direct subnodes as partitions.\n",
-+ master->name, mtd_node);
-+ ofpart_node = mtd_node;
-+ dedicated = false;
-+ }
-+ } else { /* Partition */
- ofpart_node = mtd_node;
-- dedicated = false;
- }
-- if (!ofpart_node)
-- return 0;
-
- of_id = of_match_node(parse_ofpart_match_table, ofpart_node);
- if (dedicated && !of_id) {
names += strlen(names)+1;
-#ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
- if(fl->next && fl->img->flash_base + fl->img->size + master->erasesize <= fl->next->img->flash_base) {
+ if (fl->next && fl->img->flash_base + fl->img->size + master->erasesize <= fl->next->img->flash_base) {
- i++;
-- parts[i].offset = parts[i-1].size + parts[i-1].offset;
+- parts[i].offset = parts[i - 1].size + parts[i - 1].offset;
- parts[i].size = fl->next->img->flash_base - parts[i].offset;
- parts[i].name = nullname;
- }
--- a/drivers/mtd/parsers/Kconfig
+++ b/drivers/mtd/parsers/Kconfig
@@ -195,3 +195,12 @@ config MTD_REDBOOT_PARTS_READONLY
- 'FIS directory' images, enable this option.
-
- endif # MTD_REDBOOT_PARTS
+ help
+ This provides support for parsing partitions from Shared Memory (SMEM)
+ for NAND and SPI flash on Qualcomm platforms.
+
+config MTD_ROUTERBOOT_PARTS
+ tristate "RouterBoot flash partition parser"
--- a/drivers/mtd/parsers/Makefile
+++ b/drivers/mtd/parsers/Makefile
@@ -13,3 +13,4 @@ obj-$(CONFIG_MTD_AFS_PARTS) += afs.o
- obj-$(CONFIG_MTD_PARSER_TRX) += parser_trx.o
obj-$(CONFIG_MTD_SHARPSL_PARTS) += sharpslpart.o
obj-$(CONFIG_MTD_REDBOOT_PARTS) += redboot.o
+ obj-$(CONFIG_MTD_QCOMSMEM_PARTS) += qcomsmempart.o
+obj-$(CONFIG_MTD_ROUTERBOOT_PARTS) += routerbootpart.o
+ if (!mount_ubi_rootfs())
+ return;
+#endif
- #ifdef CONFIG_BLOCK
- {
- int err = create_dev("/dev/root", ROOT_DEV);
+ if (ROOT_DEV == 0 && root_device_name && root_fs_names) {
+ if (mount_nodev_root() == 0)
+ return;
+ LZMA_FREE(address);
+}
+
-+static ISzAlloc lzma_alloc = { .Alloc = p_lzma_malloc, .Free = p_lzma_free };
++static ISzAlloc lzma_alloc = {p_lzma_malloc, p_lzma_free};
+
+#endif
--- /dev/null
+/* Do not check the TCP window for incoming packets */
+static int nf_ct_tcp_no_window_check __read_mostly = 1;
+
- /* "Be conservative in what you do,
- be liberal in what you accept from others."
- If it's non-zero, we mark only out of window RST segments as INVALID. */
+ /* FIXME: Examine ipfilter's timeouts and conntrack transitions more
+ closely. They're more complex. --RR */
+
@@ -476,6 +479,9 @@ static bool tcp_in_window(const struct n
s32 receiver_offset;
bool res, in_recv_win;
return -EINVAL;
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
-@@ -95,6 +95,8 @@ static int ip6_pkt_discard(struct sk_bu
+@@ -94,6 +94,8 @@ static int ip6_pkt_discard(struct sk_bu
static int ip6_pkt_discard_out(struct net *net, struct sock *sk, struct sk_buff *skb);
static int ip6_pkt_prohibit(struct sk_buff *skb);
static int ip6_pkt_prohibit_out(struct net *net, struct sock *sk, struct sk_buff *skb);
static void ip6_link_failure(struct sk_buff *skb);
static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb, u32 mtu,
-@@ -310,6 +312,18 @@ static const struct rt6_info ip6_prohibi
+@@ -309,6 +311,18 @@ static const struct rt6_info ip6_prohibi
.rt6i_flags = (RTF_REJECT | RTF_NONEXTHOP),
};
static const struct rt6_info ip6_blk_hole_entry_template = {
.dst = {
.__refcnt = ATOMIC_INIT(1),
-@@ -1031,6 +1045,7 @@ static const int fib6_prop[RTN_MAX + 1]
+@@ -1030,6 +1044,7 @@ static const int fib6_prop[RTN_MAX + 1]
[RTN_BLACKHOLE] = -EINVAL,
[RTN_UNREACHABLE] = -EHOSTUNREACH,
[RTN_PROHIBIT] = -EACCES,
[RTN_THROW] = -EAGAIN,
[RTN_NAT] = -EINVAL,
[RTN_XRESOLVE] = -EINVAL,
-@@ -1066,6 +1081,10 @@ static void ip6_rt_init_dst_reject(struc
+@@ -1065,6 +1080,10 @@ static void ip6_rt_init_dst_reject(struc
rt->dst.output = ip6_pkt_prohibit_out;
rt->dst.input = ip6_pkt_prohibit;
break;
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
---
- drivers/of/of_net.c | 43 +++++++++++++++++++++++++++++++++++++++----
+ net/core/of_net.c | 43 +++++++++++++++++++++++++++++++++++++++----
1 file changed, 39 insertions(+), 4 deletions(-)
---- a/drivers/of/of_net.c
-+++ b/drivers/of/of_net.c
+--- a/net/core/of_net.c
++++ b/net/core/of_net.c
@@ -115,27 +115,62 @@ static int of_get_mac_addr_nvmem(struct
* this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
* but is all zeros.
---- a/drivers/of/of_net.c
-+++ b/drivers/of/of_net.c
+--- a/net/core/of_net.c
++++ b/net/core/of_net.c
@@ -95,6 +95,27 @@ static int of_get_mac_addr_nvmem(struct
return 0;
}
sysfs_remove_link(&dev->dev.kobj, "phydev");
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -765,6 +765,12 @@ struct phy_driver {
+@@ -761,6 +761,12 @@ struct phy_driver {
/** @handle_interrupt: Override default interrupt handling */
irqreturn_t (*handle_interrupt)(struct phy_device *phydev);
--- a/include/linux/if_bridge.h
+++ b/include/linux/if_bridge.h
@@ -56,6 +56,7 @@ struct br_ip_list {
- #define BR_MRP_AWARE BIT(17)
#define BR_MRP_LOST_CONT BIT(18)
#define BR_MRP_LOST_IN_CONT BIT(19)
-+#define BR_BPDU_FILTER BIT(20)
+ #define BR_TX_FWD_OFFLOAD BIT(20)
++#define BR_BPDU_FILTER BIT(21)
#define BR_DEFAULT_AGEING_TIME (300 * HZ)
--- a/include/uapi/linux/if_link.h
+++ b/include/uapi/linux/if_link.h
@@ -524,6 +524,7 @@ enum {
- IFLA_BRPORT_BACKUP_PORT,
- IFLA_BRPORT_MRP_RING_OPEN,
IFLA_BRPORT_MRP_IN_OPEN,
+ IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT,
+ IFLA_BRPORT_MCAST_EHT_HOSTS_CNT,
+ IFLA_BRPORT_BPDU_FILTER,
__IFLA_BRPORT_MAX
};
timerval = br_timer_value(&p->message_age_timer);
@@ -728,6 +730,7 @@ static const struct nla_policy br_port_p
- [IFLA_BRPORT_NEIGH_SUPPRESS] = { .type = NLA_U8 },
[IFLA_BRPORT_ISOLATED] = { .type = NLA_U8 },
[IFLA_BRPORT_BACKUP_PORT] = { .type = NLA_U32 },
+ [IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT] = { .type = NLA_U32 },
+ [IFLA_BRPORT_BPDU_FILTER] = { .type = NLA_U8 },
};
/* Change the state of the port and notify spanning tree */
-@@ -826,6 +829,10 @@ static int br_setport(struct net_bridge_
- if (err)
- return err;
+@@ -826,6 +829,7 @@ static int br_setport(struct net_bridge_
+ br_set_port_flag(p, tb, IFLA_BRPORT_VLAN_TUNNEL, BR_VLAN_TUNNEL);
+ br_set_port_flag(p, tb, IFLA_BRPORT_NEIGH_SUPPRESS, BR_NEIGH_SUPPRESS);
+ br_set_port_flag(p, tb, IFLA_BRPORT_ISOLATED, BR_ISOLATED);
++ br_set_port_flag(p, tb, IFLA_BRPORT_BPDU_FILTER, BR_BPDU_FILTER);
+
+ changed_mask = old_flags ^ p->flags;
-+ err = br_set_port_flag(p, tb, IFLA_BRPORT_BPDU_FILTER, BR_BPDU_FILTER);
-+ if (err)
-+ return err;
-+
- br_vlan_tunnel_old = (p->flags & BR_VLAN_TUNNEL) ? true : false;
- err = br_set_port_flag(p, tb, IFLA_BRPORT_VLAN_TUNNEL, BR_VLAN_TUNNEL);
- if (err)
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -55,7 +55,7 @@
#include <net/net_namespace.h>
#define RTNL_MAX_TYPE 50
--#define RTNL_SLAVE_MAX_TYPE 36
-+#define RTNL_SLAVE_MAX_TYPE 37
+-#define RTNL_SLAVE_MAX_TYPE 40
++#define RTNL_SLAVE_MAX_TYPE 41
struct rtnl_link {
rtnl_doit_func doit;
+++ /dev/null
-From 97ca310aa18a93329ef5cd68c20de89761962f45 Mon Sep 17 00:00:00 2001
-From: David Bauer <mail@david-bauer.net>
-Date: Sun, 13 Jun 2021 12:19:36 +0200
-Subject: [PATCH] net: phy: at803x: fix feature detection
-
-AR8031/AR8033 have different status registers for copper
-and fiber operation. However, the extended status register
-is the same for both operation modes.
-
-As a result of that, ESTATUS_1000_XFULL is set to 1 even when
-operating in copper TP mode.
-
-Remove this mode from the supported link modes, as this driver
-currently only supports copper operation.
-
-Signed-off-by: David Bauer <mail@david-bauer.net>
----
- drivers/net/phy/at803x.c | 30 +++++++++++++++++++++++++++++-
- 1 file changed, 29 insertions(+), 1 deletion(-)
-
---- a/drivers/net/phy/at803x.c
-+++ b/drivers/net/phy/at803x.c
-@@ -1032,6 +1032,34 @@ static int at803x_set_tunable(struct phy
- }
- }
-
-+static int at803x_get_features(struct phy_device *phydev)
-+{
-+ int err;
-+
-+ err = genphy_read_abilities(phydev);
-+ if (err)
-+ return err;
-+
-+ if (!at803x_match_phy_id(phydev, ATH8031_PHY_ID))
-+ return 0;
-+
-+ /* AR8031/AR8033 have different status registers
-+ * for copper and fiber operation. However, the
-+ * extended status register is the same for both
-+ * operation modes.
-+ *
-+ * As a result of that, ESTATUS_1000_XFULL is set
-+ * to 1 even when operating in copper TP mode.
-+ *
-+ * Remove this mode from the supported link modes,
-+ * as this driver currently only supports copper
-+ * operation.
-+ */
-+ linkmode_clear_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
-+ phydev->supported);
-+ return 0;
-+}
-+
- static int at803x_cable_test_result_trans(u16 status)
- {
- switch (FIELD_GET(AT803X_CDT_STATUS_STAT_MASK, status)) {
-@@ -1364,7 +1392,7 @@ static struct phy_driver at803x_driver[]
- .resume = at803x_resume,
- .read_page = at803x_read_page,
- .write_page = at803x_write_page,
-- /* PHY_GBIT_FEATURES */
-+ .get_features = at803x_get_features,
- .read_status = at803x_read_status,
- .aneg_done = at803x_aneg_done,
- .ack_interrupt = &at803x_ack_interrupt,
+++ /dev/null
-From 46fe6cecb296d850c1ee2b333e57093ac4b733f3 Mon Sep 17 00:00:00 2001
-From: Tobias Waldekranz <tobias@waldekranz.com>
-Date: Sat, 16 Jan 2021 02:25:09 +0100
-Subject: [PATCH] net: bridge: switchdev: Refactor br_switchdev_fdb_notify
-
-Instead of having to add more and more arguments to
-br_switchdev_fdb_call_notifiers, get rid of it and build the info
-struct directly in br_switchdev_fdb_notify.
-
-Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
-Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
----
- net/bridge/br_switchdev.c | 41 +++++++++++----------------------------
- 1 file changed, 11 insertions(+), 30 deletions(-)
-
---- a/net/bridge/br_switchdev.c
-+++ b/net/bridge/br_switchdev.c
-@@ -102,25 +102,16 @@ int br_switchdev_set_port_flag(struct ne
- return 0;
- }
-
--static void
--br_switchdev_fdb_call_notifiers(bool adding, const unsigned char *mac,
-- u16 vid, struct net_device *dev,
-- bool added_by_user, bool offloaded)
--{
-- struct switchdev_notifier_fdb_info info;
-- unsigned long notifier_type;
--
-- info.addr = mac;
-- info.vid = vid;
-- info.added_by_user = added_by_user;
-- info.offloaded = offloaded;
-- notifier_type = adding ? SWITCHDEV_FDB_ADD_TO_DEVICE : SWITCHDEV_FDB_DEL_TO_DEVICE;
-- call_switchdev_notifiers(notifier_type, dev, &info.info, NULL);
--}
--
- void
- br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb, int type)
- {
-+ struct switchdev_notifier_fdb_info info = {
-+ .addr = fdb->key.addr.addr,
-+ .vid = fdb->key.vlan_id,
-+ .added_by_user = test_bit(BR_FDB_ADDED_BY_USER, &fdb->flags),
-+ .offloaded = test_bit(BR_FDB_OFFLOADED, &fdb->flags),
-+ };
-+
- if (!fdb->dst)
- return;
- if (test_bit(BR_FDB_LOCAL, &fdb->flags))
-@@ -128,22 +119,12 @@ br_switchdev_fdb_notify(const struct net
-
- switch (type) {
- case RTM_DELNEIGH:
-- br_switchdev_fdb_call_notifiers(false, fdb->key.addr.addr,
-- fdb->key.vlan_id,
-- fdb->dst->dev,
-- test_bit(BR_FDB_ADDED_BY_USER,
-- &fdb->flags),
-- test_bit(BR_FDB_OFFLOADED,
-- &fdb->flags));
-+ call_switchdev_notifiers(SWITCHDEV_FDB_DEL_TO_DEVICE,
-+ fdb->dst->dev, &info.info, NULL);
- break;
- case RTM_NEWNEIGH:
-- br_switchdev_fdb_call_notifiers(true, fdb->key.addr.addr,
-- fdb->key.vlan_id,
-- fdb->dst->dev,
-- test_bit(BR_FDB_ADDED_BY_USER,
-- &fdb->flags),
-- test_bit(BR_FDB_OFFLOADED,
-- &fdb->flags));
-+ call_switchdev_notifiers(SWITCHDEV_FDB_ADD_TO_DEVICE,
-+ fdb->dst->dev, &info.info, NULL);
- break;
- }
- }
+++ /dev/null
-From ec5be4f79026282925ae383caa431a8d41e3456a Mon Sep 17 00:00:00 2001
-From: Tobias Waldekranz <tobias@waldekranz.com>
-Date: Sat, 16 Jan 2021 02:25:10 +0100
-Subject: [PATCH] net: bridge: switchdev: Include local flag in FDB
- notifications
-
-Some switchdev drivers, notably DSA, ignore all dynamically learned
-address notifications (!added_by_user) as these are autonomously added
-by the switch. Previously, such a notification was indistinguishable
-from a local address notification. Include a local bit in the
-notification so that the two classes can be discriminated.
-
-This allows DSA-like devices to add local addresses to the hardware
-FDB (with the CPU as the destination), thereby avoiding flows towards
-the CPU being flooded by the switch as unknown unicast.
-
-Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
----
- include/net/switchdev.h | 1 +
- net/bridge/br_switchdev.c | 1 +
- 2 files changed, 2 insertions(+)
-
---- a/include/net/switchdev.h
-+++ b/include/net/switchdev.h
-@@ -224,6 +224,7 @@ struct switchdev_notifier_fdb_info {
- const unsigned char *addr;
- u16 vid;
- u8 added_by_user:1,
-+ local:1,
- offloaded:1;
- };
-
---- a/net/bridge/br_switchdev.c
-+++ b/net/bridge/br_switchdev.c
-@@ -109,6 +109,7 @@ br_switchdev_fdb_notify(const struct net
- .addr = fdb->key.addr.addr,
- .vid = fdb->key.vlan_id,
- .added_by_user = test_bit(BR_FDB_ADDED_BY_USER, &fdb->flags),
-+ .local = test_bit(BR_FDB_LOCAL, &fdb->flags),
- .offloaded = test_bit(BR_FDB_OFFLOADED, &fdb->flags),
- };
-
+++ /dev/null
-From 2e50fd9322047253c327550b4485cf8761035a8c Mon Sep 17 00:00:00 2001
-From: Tobias Waldekranz <tobias@waldekranz.com>
-Date: Sat, 16 Jan 2021 02:25:11 +0100
-Subject: [PATCH] net: bridge: switchdev: Send FDB notifications for host
- addresses
-
-Treat addresses added to the bridge itself in the same way as regular
-ports and send out a notification so that drivers may sync it down to
-the hardware FDB.
-
-Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
----
- net/bridge/br_fdb.c | 4 ++--
- net/bridge/br_private.h | 7 ++++---
- net/bridge/br_switchdev.c | 11 +++++------
- 3 files changed, 11 insertions(+), 11 deletions(-)
-
---- a/net/bridge/br_fdb.c
-+++ b/net/bridge/br_fdb.c
-@@ -602,7 +602,7 @@ void br_fdb_update(struct net_bridge *br
- /* fastpath: update of existing entry */
- if (unlikely(source != fdb->dst &&
- !test_bit(BR_FDB_STICKY, &fdb->flags))) {
-- br_switchdev_fdb_notify(fdb, RTM_DELNEIGH);
-+ br_switchdev_fdb_notify(br, fdb, RTM_DELNEIGH);
- fdb->dst = source;
- fdb_modified = true;
- /* Take over HW learned entry */
-@@ -735,7 +735,7 @@ static void fdb_notify(struct net_bridge
- int err = -ENOBUFS;
-
- if (swdev_notify)
-- br_switchdev_fdb_notify(fdb, type);
-+ br_switchdev_fdb_notify(br, fdb, type);
-
- skb = nlmsg_new(fdb_nlmsg_size(), GFP_ATOMIC);
- if (skb == NULL)
---- a/net/bridge/br_private.h
-+++ b/net/bridge/br_private.h
-@@ -1525,8 +1525,8 @@ bool nbp_switchdev_allowed_egress(const
- int br_switchdev_set_port_flag(struct net_bridge_port *p,
- unsigned long flags,
- unsigned long mask);
--void br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb,
-- int type);
-+void br_switchdev_fdb_notify(struct net_bridge *br,
-+ const struct net_bridge_fdb_entry *fdb, int type);
- int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, u16 flags,
- struct netlink_ext_ack *extack);
- int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid);
-@@ -1572,7 +1572,8 @@ static inline int br_switchdev_port_vlan
- }
-
- static inline void
--br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb, int type)
-+br_switchdev_fdb_notify(struct net_bridge *br,
-+ const struct net_bridge_fdb_entry *fdb, int type)
- {
- }
-
---- a/net/bridge/br_switchdev.c
-+++ b/net/bridge/br_switchdev.c
-@@ -103,7 +103,8 @@ int br_switchdev_set_port_flag(struct ne
- }
-
- void
--br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb, int type)
-+br_switchdev_fdb_notify(struct net_bridge *br,
-+ const struct net_bridge_fdb_entry *fdb, int type)
- {
- struct switchdev_notifier_fdb_info info = {
- .addr = fdb->key.addr.addr,
-@@ -112,20 +113,19 @@ br_switchdev_fdb_notify(const struct net
- .local = test_bit(BR_FDB_LOCAL, &fdb->flags),
- .offloaded = test_bit(BR_FDB_OFFLOADED, &fdb->flags),
- };
-+ struct net_device *dev = fdb->dst ? fdb->dst->dev : br->dev;
-
-- if (!fdb->dst)
-- return;
- if (test_bit(BR_FDB_LOCAL, &fdb->flags))
- return;
-
- switch (type) {
- case RTM_DELNEIGH:
- call_switchdev_notifiers(SWITCHDEV_FDB_DEL_TO_DEVICE,
-- fdb->dst->dev, &info.info, NULL);
-+ dev, &info.info, NULL);
- break;
- case RTM_NEWNEIGH:
- call_switchdev_notifiers(SWITCHDEV_FDB_ADD_TO_DEVICE,
-- fdb->dst->dev, &info.info, NULL);
-+ dev, &info.info, NULL);
- break;
- }
- }
+++ /dev/null
-From dd082716b43a3684b2f473ae5d1e76d1c076d86d Mon Sep 17 00:00:00 2001
-From: Tobias Waldekranz <tobias@waldekranz.com>
-Date: Sat, 16 Jan 2021 02:25:12 +0100
-Subject: [PATCH] net: dsa: Include local addresses in assisted CPU port
- learning
-
-Add local addresses (i.e. the ports' MAC addresses) to the hardware
-FDB when assisted CPU port learning is enabled.
-
-NOTE: The bridge's own MAC address is also "local". If that address is
-not shared with any port, the bridge's MAC is not be added by this
-functionality - but the following commit takes care of that case.
-
-Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
----
- net/dsa/slave.c | 8 +++++---
- 1 file changed, 5 insertions(+), 3 deletions(-)
-
---- a/net/dsa/slave.c
-+++ b/net/dsa/slave.c
-@@ -2192,10 +2192,12 @@ static int dsa_slave_switchdev_event(str
- fdb_info = ptr;
-
- if (dsa_slave_dev_check(dev)) {
-- if (!fdb_info->added_by_user)
-- return NOTIFY_OK;
--
- dp = dsa_slave_to_port(dev);
-+
-+ if (fdb_info->local && dp->ds->assisted_learning_on_cpu_port)
-+ dp = dp->cpu_dp;
-+ else if (!fdb_info->added_by_user)
-+ return NOTIFY_OK;
- } else {
- /* Snoop addresses learnt on foreign interfaces
- * bridged with us, for switches that don't
+++ /dev/null
-From 0663ebde114a6fb2c28c622ba5212b302d4d2581 Mon Sep 17 00:00:00 2001
-From: Tobias Waldekranz <tobias@waldekranz.com>
-Date: Sat, 16 Jan 2021 02:25:13 +0100
-Subject: [PATCH] net: dsa: Include bridge addresses in assisted CPU port
- learning
-
-Now that notifications are sent out for addresses added to the bridge
-itself, extend DSA to include those addresses in the hardware FDB when
-assisted CPU port learning is enabled.
-
-Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
----
- net/dsa/slave.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
---- a/net/dsa/slave.c
-+++ b/net/dsa/slave.c
-@@ -2206,7 +2206,11 @@ static int dsa_slave_switchdev_event(str
- struct net_device *br_dev;
- struct dsa_slave_priv *p;
-
-- br_dev = netdev_master_upper_dev_get_rcu(dev);
-+ if (netif_is_bridge_master(dev))
-+ br_dev = dev;
-+ else
-+ br_dev = netdev_master_upper_dev_get_rcu(dev);
-+
- if (!br_dev)
- return NOTIFY_DONE;
-
+++ /dev/null
-From 81e39fd78db82fb51b05fff309b9c521f1a0bc5a Mon Sep 17 00:00:00 2001
-From: Tobias Waldekranz <tobias@waldekranz.com>
-Date: Sat, 16 Jan 2021 02:25:14 +0100
-Subject: [PATCH] net: dsa: Sync static FDB entries on foreign interfaces to
- hardware
-
-Reuse the "assisted_learning_on_cpu_port" functionality to always add
-entries for user-configured entries on foreign interfaces, even if
-assisted_learning_on_cpu_port is not enabled. E.g. in this situation:
-
- br0
- / \
-swp0 dummy0
-
-$ bridge fdb add 02:00:de:ad:00:01 dev dummy0 vlan 1 master
-
-Results in DSA adding an entry in the hardware FDB, pointing this
-address towards the CPU port.
-
-The same is true for entries added to the bridge itself, e.g:
-
-$ bridge fdb add 02:00:de:ad:00:01 dev br0 vlan 1 self
-
-Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
----
- net/dsa/slave.c | 12 ++++++++----
- 1 file changed, 8 insertions(+), 4 deletions(-)
-
---- a/net/dsa/slave.c
-+++ b/net/dsa/slave.c
-@@ -2199,9 +2199,12 @@ static int dsa_slave_switchdev_event(str
- else if (!fdb_info->added_by_user)
- return NOTIFY_OK;
- } else {
-- /* Snoop addresses learnt on foreign interfaces
-- * bridged with us, for switches that don't
-- * automatically learn SA from CPU-injected traffic
-+ /* Snoop addresses added to foreign interfaces
-+ * bridged with us, or the bridge
-+ * itself. Dynamically learned addresses can
-+ * also be added for switches that don't
-+ * automatically learn SA from CPU-injected
-+ * traffic.
- */
- struct net_device *br_dev;
- struct dsa_slave_priv *p;
-@@ -2223,7 +2226,8 @@ static int dsa_slave_switchdev_event(str
-
- dp = p->dp->cpu_dp;
-
-- if (!dp->ds->assisted_learning_on_cpu_port)
-+ if (!fdb_info->added_by_user &&
-+ !dp->ds->assisted_learning_on_cpu_port)
- return NOTIFY_DONE;
- }
-
if (err)
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
-@@ -241,8 +241,10 @@ void bcma_prepare_core(struct bcma_bus *
+@@ -236,13 +236,17 @@ EXPORT_SYMBOL(bcma_core_irq);
+
+ void bcma_prepare_core(struct bcma_bus *bus, struct bcma_device *core)
+ {
+- device_initialize(&core->dev);
++ struct device *dev = &core->dev;
++
++ device_initialize(dev);
+ core->dev.release = bcma_release_core_dev;
core->dev.bus = &bcma_bus_type;
- dev_set_name(&core->dev, "bcma%d:%d", bus->num, core->core_index);
+- dev_set_name(&core->dev, "bcma%d:%d", bus->num, core->core_index);
++ dev_set_name(dev, "bcma%d:%d", bus->num, core->core_index);
core->dev.parent = bus->dev;
- if (bus->dev)
+ if (bus->dev) {
bcma_of_fill_device(bus->dev, core);
-+ dma_coerce_mask_and_coherent(&core->dev, bus->dev->coherent_dma_mask);
++ dma_coerce_mask_and_coherent(dev, bus->dev->coherent_dma_mask);
+ }
switch (bus->hosttype) {
/*
* The Mellanox Tavor device gives false positive parity errors. Mark this
* device with a broken_parity_status to allow PCI scanning code to "skip"
-@@ -3323,6 +3324,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
+@@ -3322,6 +3323,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata);
/*
* Ivytown NTB BAR sizes are misreported by the hardware due to an erratum.
* To work around this, query the size it should be configured to by the
-@@ -3348,6 +3351,8 @@ static void quirk_intel_ntb(struct pci_d
+@@ -3347,6 +3350,8 @@ static void quirk_intel_ntb(struct pci_d
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e08, quirk_intel_ntb);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e0d, quirk_intel_ntb);
/*
* Some BIOS implementations leave the Intel GPU interrupts enabled, even
* though no one is handling them (e.g., if the i915 driver is never
-@@ -3386,6 +3391,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
+@@ -3385,6 +3390,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq);
/*
* Define if arch has non-standard setup. This is a _PCI_ standard
-@@ -883,6 +886,12 @@ struct ata_port {
+@@ -882,6 +885,12 @@ struct ata_port {
#ifdef CONFIG_ATA_ACPI
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
#endif
--- a/drivers/pci/controller/pci-aardvark.c
+++ b/drivers/pci/controller/pci-aardvark.c
@@ -1439,7 +1439,9 @@ static void advk_pcie_handle_int(struct
+ advk_writel(pcie, PCIE_ISR1_INTX_ASSERT(i),
PCIE_ISR1_REG);
- virq = irq_find_mapping(pcie->irq_domain, i);
-- generic_handle_irq(virq);
-+ if (generic_handle_irq(virq) == -EINVAL)
+- generic_handle_domain_irq(pcie->irq_domain, i);
++ if (generic_handle_domain_irq(pcie->irq_domain, i) == -EINVAL)
+ dev_err_ratelimited(&pcie->pdev->dev, "unexpected INT%c IRQ\n",
+ (char)i + 'A');
}
early_security_init();
setup_arch(&command_line);
+ mangle_bootargs(command_line);
- setup_boot_config(command_line);
+ setup_boot_config();
setup_command_line(command_line);
setup_nr_cpu_ids();