--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
-@@ -191,6 +191,8 @@ void ftrace_likely_update(struct ftrace_
- __v; \
- })
+@@ -246,6 +246,8 @@ void ftrace_likely_update(struct ftrace_
+ # define TYPEOF_UNQUAL(exp) __typeof__(exp)
+ #endif
+#include <asm/rwonce.h>
+
#endif /* __KERNEL__ */
- /**
-@@ -298,6 +300,4 @@ static inline void *offset_to_ptr(const
+ #if defined(CONFIG_CFI) && !defined(__DISABLE_EXPORTS) && !defined(BUILD_VDSO)
+@@ -379,6 +381,4 @@ static inline void *offset_to_ptr(const
*/
#define prevent_tail_call_optimization() mb()
--- a/Makefile
+++ b/Makefile
-@@ -589,7 +589,7 @@ export RUSTC_BOOTSTRAP := 1
+@@ -625,7 +625,7 @@ export RUSTC_BOOTSTRAP := 1
# Allows finding `.clippy.toml` in out-of-srctree builds.
export CLIPPY_CONF_DIR := $(srctree)
--- a/fs/jffs2/file.c
+++ b/fs/jffs2/file.c
-@@ -53,6 +53,8 @@ const struct file_operations jffs2_file_
+@@ -55,6 +55,8 @@ const struct file_operations jffs2_file_
.open = generic_file_open,
.read_iter = generic_file_read_iter,
.write_iter = generic_file_write_iter,
+ .splice_read = filemap_splice_read,
+ .splice_write = iter_file_splice_write,
.unlocked_ioctl=jffs2_ioctl,
- .mmap = generic_file_readonly_mmap,
+ .mmap_prepare = generic_file_readonly_mmap_prepare,
.fsync = jffs2_fsync,
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
-@@ -245,6 +245,9 @@ static void __br_handle_local_finish(str
+@@ -258,6 +258,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)
{
__br_handle_local_finish(skb);
/* return 1 to signal the okfn() was called so it's ok to use the skb */
-@@ -416,6 +419,17 @@ forward:
+@@ -433,6 +436,17 @@ forward:
goto defer_stp_filtering;
switch (p->state) {
--- a/net/bridge/br_arp_nd_proxy.c
+++ b/net/bridge/br_arp_nd_proxy.c
-@@ -204,7 +204,10 @@ void br_do_proxy_suppress_arp(struct sk_
+@@ -207,7 +207,10 @@ void br_do_proxy_suppress_arp(struct sk_
if ((p && (p->flags & BR_PROXYARP)) ||
(f->dst && (f->dst->flags & BR_PROXYARP_WIFI)) ||
br_is_neigh_suppress_enabled(f->dst, vid)) {
br_arp_send(br, p, skb->dev, sip, tip,
sha, n->ha, sha, 0, 0);
else
-@@ -212,7 +215,6 @@ void br_do_proxy_suppress_arp(struct sk_
+@@ -215,7 +218,6 @@ void br_do_proxy_suppress_arp(struct sk_
sha, n->ha, sha,
skb->vlan_proto,
skb_vlan_tag_get(skb));
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
-@@ -983,8 +983,12 @@ char *symbol_string(char *buf, char *end
+@@ -990,8 +990,12 @@ char *symbol_string(char *buf, char *end
struct printf_spec spec, const char *fmt)
{
unsigned long value;
#endif
if (fmt[1] == 'R')
-@@ -1005,8 +1009,16 @@ char *symbol_string(char *buf, char *end
+@@ -1012,8 +1016,16 @@ char *symbol_string(char *buf, char *end
return string_nocheck(buf, end, sym, spec);
#else
--- a/kernel/fork.c
+++ b/kernel/fork.c
-@@ -123,7 +123,7 @@
+@@ -126,7 +126,7 @@
/*
* Minimum number of threads to boot the kernel
*/
---
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -1055,9 +1055,6 @@ config FW_ARC
+@@ -1101,9 +1101,6 @@ config FW_ARC
config ARCH_MAY_HAVE_PC_FDC
bool
config CEVT_BCM1480
bool
-@@ -2990,6 +2987,18 @@ choice
+@@ -3005,6 +3002,18 @@ choice
bool "Extend builtin kernel arguments with bootloader arguments"
endchoice
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
-@@ -153,7 +153,7 @@ cflags-$(CONFIG_CPU_R4300) += $(call cc-
+@@ -149,7 +149,7 @@ cflags-$(CONFIG_CPU_R4300) += $(call cc-
cflags-$(CONFIG_CPU_R4X00) += $(call cc-option,-march=r4600,-march=mips3) -Wa,--trap
cflags-$(CONFIG_CPU_TX49XX) += $(call cc-option,-march=r4600,-march=mips3) -Wa,--trap
cflags-$(CONFIG_CPU_MIPS32_R1) += -march=mips32 -Wa,--trap
--- a/arch/arc/kernel/unaligned.c
+++ b/arch/arc/kernel/unaligned.c
-@@ -203,7 +203,7 @@ int misaligned_fixup(unsigned long addre
- char buf[TASK_COMM_LEN];
+@@ -202,7 +202,7 @@ int misaligned_fixup(unsigned long addre
+ struct disasm_state state;
/* handle user mode only and only if enabled by sysadmin */
- if (!user_mode(regs) || !unaligned_enabled)
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
-@@ -254,7 +254,7 @@ config PPC
+@@ -263,7 +263,7 @@ config PPC
select HAVE_KERNEL_GZIP
select HAVE_KERNEL_LZMA if DEFAULT_UIMAGE
select HAVE_KERNEL_LZO if DEFAULT_UIMAGE
default y
--- a/drivers/mtd/spi-nor/core.c
+++ b/drivers/mtd/spi-nor/core.c
-@@ -1158,6 +1158,8 @@ static u8 spi_nor_convert_3to4_erase(u8
+@@ -1157,6 +1157,8 @@ static u8 spi_nor_convert_3to4_erase(u8
static bool spi_nor_has_uniform_erase(const struct spi_nor *nor)
{
return !!nor->params->erase_map.uniform_region.erase_mask;
}
-@@ -2516,6 +2518,7 @@ static int spi_nor_select_erase(struct s
+@@ -2634,6 +2636,7 @@ static int spi_nor_select_erase(struct s
{
struct spi_nor_erase_map *map = &nor->params->erase_map;
const struct spi_nor_erase_type *erase = NULL;
struct mtd_info *mtd = &nor->mtd;
int i;
-@@ -2542,8 +2545,9 @@ static int spi_nor_select_erase(struct s
+@@ -2660,8 +2663,9 @@ static int spi_nor_select_erase(struct s
*/
for (i = SNOR_ERASE_TYPE_MAX - 1; i >= 0; i--) {
if (map->erase_type[i].size) {
}
}
-@@ -2551,6 +2555,9 @@ static int spi_nor_select_erase(struct s
+@@ -2669,6 +2673,9 @@ static int spi_nor_select_erase(struct s
return -EINVAL;
mtd->erasesize = erase->size;
#include <linux/raid/detect.h>
#include "check.h"
-@@ -290,7 +291,8 @@ static const DEVICE_ATTR(whole_disk, 044
+@@ -292,7 +293,8 @@ static const DEVICE_ATTR(whole_disk, 044
*/
static struct block_device *add_partition(struct gendisk *disk, int partno,
sector_t start, sector_t len, int flags,
{
dev_t devt = MKDEV(0, 0);
struct device *ddev = disk_to_dev(disk);
-@@ -339,6 +341,7 @@ static struct block_device *add_partitio
+@@ -341,6 +343,7 @@ static struct block_device *add_partitio
pdev->class = &block_class;
pdev->type = &part_type;
pdev->parent = ddev;
/* in consecutive minor range? */
if (bdev_partno(bdev) < disk->minors) {
-@@ -445,7 +448,7 @@ int bdev_add_partition(struct gendisk *d
+@@ -447,7 +450,7 @@ int bdev_add_partition(struct gendisk *d
}
part = add_partition(disk, partno, start, length,
ret = PTR_ERR_OR_ZERO(part);
out:
mutex_unlock(&disk->open_mutex);
-@@ -559,8 +562,13 @@ static bool blk_add_partition(struct gen
+@@ -561,8 +564,13 @@ static bool blk_add_partition(struct gen
size = get_capacity(disk) - from;
}
+
source "block/partitions/Kconfig"
- config BLK_MQ_PCI
+ config BLK_PM
--- a/block/Makefile
+++ b/block/Makefile
-@@ -38,3 +38,4 @@ obj-$(CONFIG_BLK_INLINE_ENCRYPTION) += b
+@@ -36,3 +36,4 @@ obj-$(CONFIG_BLK_INLINE_ENCRYPTION) += b
blk-crypto-sysfs.o
obj-$(CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK) += blk-crypto-fallback.o
obj-$(CONFIG_BLOCK_HOLDER_DEPRECATED) += holder.o
+device_initcall(blk_notifications_init);
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
-@@ -1753,4 +1753,12 @@ static inline bool bdev_can_atomic_write
+@@ -1875,4 +1875,12 @@ static inline int bio_split_rw_at(struct
#define DEFINE_IO_COMP_BATCH(name) struct io_comp_batch name = { }
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
-@@ -40,6 +40,17 @@ config NVMEM_APPLE_EFUSES
- This driver can also be built as a module. If so, the module will
- be called nvmem-apple-efuses.
+@@ -63,6 +63,17 @@ config NVMEM_APPLE_SPMI
+ This driver can also be built as a module. If so, the module
+ will be called apple-nvmem-spmi.
+config NVMEM_BLOCK
+ tristate "Block device NVMEM provider"
depends on ARCH_BCM_IPROC || COMPILE_TEST
--- a/drivers/nvmem/Makefile
+++ b/drivers/nvmem/Makefile
-@@ -14,6 +14,8 @@ obj-$(CONFIG_NVMEM_APPLE_EFUSES) += nvme
- nvmem-apple-efuses-y := apple-efuses.o
+@@ -18,6 +18,8 @@ obj-$(CONFIG_NVMEM_APPLE_SPMI) += apple
+ apple_nvmem_spmi-y := apple-spmi-nvmem.o
obj-$(CONFIG_NVMEM_BCM_OCOTP) += nvmem-bcm-ocotp.o
nvmem-bcm-ocotp-y := bcm-ocotp.o
+obj-$(CONFIG_NVMEM_BLOCK) += nvmem-block.o
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
-@@ -2644,6 +2644,7 @@ static struct mmc_blk_data *mmc_blk_allo
+@@ -2607,6 +2607,7 @@ static struct mmc_blk_data *mmc_blk_allo
md->disk->major = MMC_BLOCK_MAJOR;
md->disk->minors = perdev_minors;
md->disk->first_minor = devidx * perdev_minors;
1 file changed, 1 insertion(+)
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -2050,6 +2050,7 @@ static int __xipram do_write_buffer(stru
+@@ -2048,6 +2048,7 @@ static int __xipram do_write_buffer(stru
/* Write Buffer Load */
map_write(map, CMD(0x25), cmd_adr);
+};
--- a/drivers/mtd/spi-nor/core.c
+++ b/drivers/mtd/spi-nor/core.c
-@@ -1979,6 +1979,7 @@ static const struct spi_nor_manufacturer
+@@ -1956,6 +1956,7 @@ static const struct spi_nor_manufacturer
&spi_nor_sst,
&spi_nor_winbond,
&spi_nor_xmc,
static const struct flash_info spi_nor_generic_flash = {
--- a/drivers/mtd/spi-nor/core.h
+++ b/drivers/mtd/spi-nor/core.h
-@@ -593,6 +593,7 @@ extern const struct spi_nor_manufacturer
+@@ -598,6 +598,7 @@ extern const struct spi_nor_manufacturer
extern const struct spi_nor_manufacturer spi_nor_sst;
extern const struct spi_nor_manufacturer spi_nor_winbond;
extern const struct spi_nor_manufacturer spi_nor_xmc;
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -23677,6 +23677,12 @@ F: Documentation/filesystems/ubifs-authe
+@@ -26274,6 +26274,12 @@ F: Documentation/filesystems/ubifs-authe
F: Documentation/filesystems/ubifs.rst
F: fs/ubifs/
L: linux-block@vger.kernel.org
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
-@@ -363,6 +363,18 @@ config BLK_DEV_RUST_NULL
-
- If unsure, say N.
+@@ -312,6 +312,18 @@ config VIRTIO_BLK
+ This is the virtual block driver for virtio. It can be used with
+ QEMU based VMMs (like KVM or Xen). Say Y or M.
+config UIMAGE_FIT_BLK
+ bool "uImage.FIT block driver"
depends on INET && BLOCK
--- a/drivers/block/Makefile
+++ b/drivers/block/Makefile
-@@ -42,4 +42,6 @@ obj-$(CONFIG_BLK_DEV_NULL_BLK) += null_b
-
+@@ -40,4 +40,6 @@ obj-$(CONFIG_BLK_DEV_RUST_NULL) += rnull
obj-$(CONFIG_BLK_DEV_UBLK) += ublk_drv.o
+ obj-$(CONFIG_BLK_DEV_ZONED_LOOP) += zloop.o
+obj-$(CONFIG_UIMAGE_FIT_BLK) += fitblk.o
+
#include <net/net_namespace.h>
#ifdef CONFIG_SYSCTL
#include <linux/sysctl.h>
-@@ -458,6 +459,58 @@ static int ct_cpu_seq_show(struct seq_fi
+@@ -473,6 +474,58 @@ static int ct_cpu_seq_show(struct seq_fi
return 0;
}
static const struct seq_operations ct_cpu_seq_ops = {
.start = ct_cpu_seq_start,
.next = ct_cpu_seq_next,
-@@ -471,8 +524,9 @@ static int nf_conntrack_standalone_init_
+@@ -486,8 +539,9 @@ static int nf_conntrack_standalone_init_
kuid_t root_uid;
kgid_t root_gid;
/* Switch to alternate jumpstack if we're being invoked via TEE.
@@ -298,7 +326,16 @@ ipt_do_table(void *priv,
if (static_key_false(&xt_tee_enabled))
- jumpstack += private->stacksize * __this_cpu_read(nf_skb_duplicated);
+ jumpstack += private->stacksize * current->in_nf_duplicate;
- e = get_entry(table_base, private->hook_entry[hook]);
+ /* We handle fragments by dealing with the first fragment as
#define PACKET_FANOUT_LB 1
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
-@@ -1911,6 +1911,7 @@ static int packet_rcv_spkt(struct sk_buf
+@@ -1858,6 +1858,7 @@ static int packet_rcv_spkt(struct sk_buf
{
struct sock *sk;
struct sockaddr_pkt *spkt;
/*
* When we registered the protocol we saved the socket in the data
-@@ -1918,6 +1919,7 @@ static int packet_rcv_spkt(struct sk_buf
+@@ -1865,6 +1866,7 @@ static int packet_rcv_spkt(struct sk_buf
*/
sk = pt->af_packet_priv;
/*
* Yank back the headers [hope the device set this
-@@ -1930,7 +1932,7 @@ static int packet_rcv_spkt(struct sk_buf
+@@ -1877,7 +1879,7 @@ static int packet_rcv_spkt(struct sk_buf
* so that this procedure is noop.
*/
goto out;
if (!net_eq(dev_net(dev), sock_net(sk)))
-@@ -2175,12 +2177,12 @@ static int packet_rcv(struct sk_buff *sk
+@@ -2122,12 +2124,12 @@ static int packet_rcv(struct sk_buff *sk
int skb_len = skb->len;
unsigned int snaplen, res;
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
-@@ -2304,12 +2306,12 @@ static int tpacket_rcv(struct sk_buff *s
+@@ -2251,12 +2253,12 @@ static int tpacket_rcv(struct sk_buff *s
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
-@@ -3429,6 +3431,7 @@ static int packet_create(struct net *net
+@@ -3375,6 +3377,7 @@ static int packet_create(struct net *net
mutex_init(&po->pg_vec_lock);
po->rollover = NULL;
po->prot_hook.func = packet_rcv;
if (sock->type == SOCK_PACKET)
po->prot_hook.func = packet_rcv_spkt;
-@@ -4096,6 +4099,16 @@ packet_setsockopt(struct socket *sock, i
+@@ -4043,6 +4046,16 @@ packet_setsockopt(struct socket *sock, i
packet_sock_flag_set(po, PACKET_SOCK_QDISC_BYPASS, val);
return 0;
}
default:
return -ENOPROTOOPT;
}
-@@ -4158,6 +4171,13 @@ static int packet_getsockopt(struct sock
+@@ -4105,6 +4118,13 @@ static int packet_getsockopt(struct sock
case PACKET_COPY_THRESH:
val = READ_ONCE(pkt_sk(sk)->copy_thresh);
break;
break;
--- a/net/packet/internal.h
+++ b/net/packet/internal.h
-@@ -131,6 +131,7 @@ struct packet_sock {
+@@ -126,6 +126,7 @@ struct packet_sock {
struct net_device __rcu *cached_dev;
struct packet_type prot_hook ____cacheline_aligned_in_smp;
atomic_t tp_drops ____cacheline_aligned_in_smp;
--- a/net/bridge/br_switchdev.c
+++ b/net/bridge/br_switchdev.c
-@@ -571,10 +571,18 @@ static void br_switchdev_host_mdb(struct
+@@ -576,10 +576,18 @@ static void br_switchdev_host_mdb(struct
struct net_bridge_mdb_entry *mp, int type)
{
struct net_device *lower_dev;
unregister_pernet_device(&pppoe_net_ops);
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
-@@ -1546,6 +1546,7 @@ out:
+@@ -1531,6 +1531,7 @@ out:
return pp;
}
static struct sk_buff *ipip_gro_receive(struct list_head *head,
struct sk_buff *skb)
-@@ -1631,6 +1632,7 @@ int inet_gro_complete(struct sk_buff *sk
+@@ -1616,6 +1617,7 @@ int inet_gro_complete(struct sk_buff *sk
out:
return err;
}
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -3241,7 +3241,7 @@ static inline int pskb_network_may_pull(
+@@ -3299,7 +3299,7 @@ static inline int pskb_network_may_pull(
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
*/
#ifndef NET_SKB_PAD
*/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-@@ -68,9 +71,9 @@ static bool log_ecn_error = true;
+@@ -69,9 +72,9 @@ static bool log_ecn_error = true;
module_param(log_ecn_error, bool, 0644);
MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
return hash_32(hash, IP6_TUNNEL_HASH_SIZE_SHIFT);
}
-@@ -115,17 +118,33 @@ static struct ip6_tnl *
+@@ -116,17 +119,33 @@ static struct ip6_tnl *
ip6_tnl_lookup(struct net *net, int link,
const struct in6_addr *remote, const struct in6_addr *local)
{
if (link == t->parms.link)
return t;
else
-@@ -133,7 +152,7 @@ ip6_tnl_lookup(struct net *net, int link
+@@ -134,7 +153,7 @@ ip6_tnl_lookup(struct net *net, int link
}
memset(&any, 0, sizeof(any));
for_each_ip6_tunnel_rcu(ip6n->tnls_r_l[hash]) {
if (!ipv6_addr_equal(local, &t->parms.laddr) ||
!ipv6_addr_any(&t->parms.raddr) ||
-@@ -146,7 +165,7 @@ ip6_tnl_lookup(struct net *net, int link
+@@ -147,7 +166,7 @@ ip6_tnl_lookup(struct net *net, int link
cand = t;
}
for_each_ip6_tunnel_rcu(ip6n->tnls_r_l[hash]) {
if (!ipv6_addr_equal(remote, &t->parms.raddr) ||
!ipv6_addr_any(&t->parms.laddr) ||
-@@ -195,7 +214,7 @@ ip6_tnl_bucket(struct ip6_tnl_net *ip6n,
+@@ -196,7 +215,7 @@ ip6_tnl_bucket(struct ip6_tnl_net *ip6n,
if (!ipv6_addr_any(remote) || !ipv6_addr_any(local)) {
prio = 1;
dst_cache_reset(&t->dst_cache);
ip6_tnl_link_config(t);
}
-@@ -1579,6 +1748,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
+@@ -1590,6 +1759,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
p->flowinfo = u->flowinfo;
p->link = u->link;
p->proto = u->proto;
memcpy(p->name, u->name, sizeof(u->name));
}
-@@ -1962,6 +2132,15 @@ static int ip6_tnl_validate(struct nlatt
+@@ -1973,6 +2143,15 @@ static int ip6_tnl_validate(struct nlatt
return 0;
}
static void ip6_tnl_netlink_parms(struct nlattr *data[],
struct __ip6_tnl_parm *parms)
{
-@@ -1999,6 +2178,46 @@ static void ip6_tnl_netlink_parms(struct
+@@ -2010,6 +2189,46 @@ static void ip6_tnl_netlink_parms(struct
if (data[IFLA_IPTUN_FWMARK])
parms->fwmark = nla_get_u32(data[IFLA_IPTUN_FWMARK]);
+ }
}
- static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev,
-@@ -2083,6 +2302,12 @@ static void ip6_tnl_dellink(struct net_d
+ static int ip6_tnl_newlink(struct net_device *dev,
+@@ -2118,6 +2337,12 @@ static void ip6_tnl_dellink(struct net_d
static size_t ip6_tnl_get_size(const struct net_device *dev)
{
return
/* IFLA_IPTUN_LINK */
nla_total_size(4) +
-@@ -2112,6 +2337,24 @@ static size_t ip6_tnl_get_size(const str
+@@ -2147,6 +2372,24 @@ static size_t ip6_tnl_get_size(const str
nla_total_size(0) +
/* IFLA_IPTUN_FWMARK */
nla_total_size(4) +
0;
}
-@@ -2119,6 +2362,9 @@ static int ip6_tnl_fill_info(struct sk_b
+@@ -2154,6 +2397,9 @@ static int ip6_tnl_fill_info(struct sk_b
{
struct ip6_tnl *tunnel = netdev_priv(dev);
struct __ip6_tnl_parm *parm = &tunnel->parms;
if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) ||
nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) ||
-@@ -2128,9 +2374,27 @@ static int ip6_tnl_fill_info(struct sk_b
+@@ -2163,9 +2409,27 @@ static int ip6_tnl_fill_info(struct sk_b
nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) ||
nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) ||
nla_put_u8(skb, IFLA_IPTUN_PROTO, parm->proto) ||
if (nla_put_u16(skb, IFLA_IPTUN_ENCAP_TYPE, tunnel->encap.type) ||
nla_put_be16(skb, IFLA_IPTUN_ENCAP_SPORT, tunnel->encap.sport) ||
nla_put_be16(skb, IFLA_IPTUN_ENCAP_DPORT, tunnel->encap.dport) ||
-@@ -2170,6 +2434,7 @@ static const struct nla_policy ip6_tnl_p
+@@ -2205,6 +2469,7 @@ static const struct nla_policy ip6_tnl_p
[IFLA_IPTUN_ENCAP_DPORT] = { .type = NLA_U16 },
[IFLA_IPTUN_COLLECT_METADATA] = { .type = NLA_FLAG },
[IFLA_IPTUN_FWMARK] = { .type = NLA_U32 },
--- a/include/net/netns/ipv6.h
+++ b/include/net/netns/ipv6.h
-@@ -86,6 +86,7 @@ struct netns_ipv6 {
+@@ -87,6 +87,7 @@ struct netns_ipv6 {
unsigned int fib6_routes_require_src;
#endif
struct rt6_info *ip6_prohibit_entry;
struct fib_rules_ops *fib6_rules_ops;
--- a/include/uapi/linux/fib_rules.h
+++ b/include/uapi/linux/fib_rules.h
-@@ -83,6 +83,10 @@ enum {
+@@ -88,6 +88,10 @@ enum {
FR_ACT_BLACKHOLE, /* Drop without notification */
FR_ACT_UNREACHABLE, /* Drop with ENETUNREACH */
FR_ACT_PROHIBIT, /* Drop with EACCES */
--- a/include/uapi/linux/rtnetlink.h
+++ b/include/uapi/linux/rtnetlink.h
-@@ -265,6 +265,7 @@ enum {
+@@ -273,6 +273,7 @@ enum {
RTN_THROW, /* Not in this table */
RTN_NAT, /* Translate this address */
RTN_XRESOLVE, /* Use external resolver */
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
-@@ -145,6 +145,10 @@ const struct fib_prop fib_props[RTN_MAX
+@@ -134,6 +134,10 @@ const struct fib_prop fib_props[RTN_MAX
.error = -EINVAL,
.scope = RT_SCOPE_NOWHERE,
},
static void rt_fibinfo_free(struct rtable __rcu **rtp)
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
-@@ -2763,6 +2763,7 @@ static const char *const rtn_type_names[
+@@ -2757,6 +2757,7 @@ static const char *const rtn_type_names[
[RTN_THROW] = "THROW",
[RTN_NAT] = "NAT",
[RTN_XRESOLVE] = "XRESOLVE",
static inline const char *rtn_type(char *buf, size_t len, unsigned int t)
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
-@@ -191,6 +191,7 @@ static int ipmr_rule_action(struct fib_r
+@@ -192,6 +192,7 @@ static int ipmr_rule_action(struct fib_r
case FR_ACT_UNREACHABLE:
return -ENETUNREACH;
case FR_ACT_PROHIBIT:
default:
--- a/net/ipv6/fib6_rules.c
+++ b/net/ipv6/fib6_rules.c
-@@ -222,6 +222,10 @@ static int __fib6_rule_action(struct fib
+@@ -225,6 +225,10 @@ static int __fib6_rule_action(struct fib
err = -EACCES;
rt = net->ipv6.ip6_prohibit_entry;
goto discard_pkt;
static const struct rt6_info ip6_blk_hole_entry_template = {
.dst = {
.__rcuref = RCUREF_INIT(1),
-@@ -1086,6 +1100,7 @@ static const int fib6_prop[RTN_MAX + 1]
+@@ -1085,6 +1099,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,
-@@ -1121,6 +1136,10 @@ static void ip6_rt_init_dst_reject(struc
+@@ -1120,6 +1135,10 @@ static void ip6_rt_init_dst_reject(struc
rt->dst.output = ip6_pkt_prohibit_out;
rt->dst.input = ip6_pkt_prohibit;
break;
case RTN_THROW:
case RTN_UNREACHABLE:
default:
-@@ -4609,6 +4628,17 @@ static int ip6_pkt_prohibit_out(struct n
+@@ -4654,6 +4673,17 @@ static int ip6_pkt_prohibit_out(struct n
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
}
/*
* Allocate a dst for local (unicast / anycast) address.
*/
-@@ -5100,7 +5130,8 @@ static int rtm_to_fib6_config(struct sk_
+@@ -5206,7 +5236,8 @@ static int rtm_to_fib6_config(struct sk_
if (rtm->rtm_type == RTN_UNREACHABLE ||
rtm->rtm_type == RTN_BLACKHOLE ||
rtm->rtm_type == RTN_PROHIBIT ||
cfg->fc_flags |= RTF_REJECT;
if (rtm->rtm_type == RTN_LOCAL)
-@@ -6371,6 +6402,8 @@ static int ip6_route_dev_notify(struct n
+@@ -6475,6 +6506,8 @@ static int ip6_route_dev_notify(struct n
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
#endif
-@@ -6382,6 +6415,7 @@ static int ip6_route_dev_notify(struct n
+@@ -6486,6 +6519,7 @@ static int ip6_route_dev_notify(struct n
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
#endif
}
-@@ -6577,6 +6611,8 @@ static int __net_init ip6_route_net_init
+@@ -6681,6 +6715,8 @@ static int __net_init ip6_route_net_init
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
net->ipv6.fib6_has_custom_rules = false;
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
sizeof(*net->ipv6.ip6_prohibit_entry),
GFP_KERNEL);
-@@ -6587,11 +6623,21 @@ static int __net_init ip6_route_net_init
+@@ -6691,11 +6727,21 @@ static int __net_init ip6_route_net_init
ip6_template_metrics, true);
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->dst.rt_uncached);
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
ip6_template_metrics, true);
-@@ -6618,6 +6664,8 @@ out:
+@@ -6722,6 +6768,8 @@ out:
return ret;
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
out_ip6_prohibit_entry:
kfree(net->ipv6.ip6_prohibit_entry);
out_ip6_null_entry:
-@@ -6637,6 +6685,7 @@ static void __net_exit ip6_route_net_exi
+@@ -6741,6 +6789,7 @@ static void __net_exit ip6_route_net_exi
kfree(net->ipv6.ip6_null_entry);
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
kfree(net->ipv6.ip6_prohibit_entry);
kfree(net->ipv6.ip6_blk_hole_entry);
#endif
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
-@@ -6720,6 +6769,9 @@ void __init ip6_route_init_special_entri
+@@ -6824,6 +6873,9 @@ void __init ip6_route_init_special_entri
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
--- a/include/uapi/linux/fib_rules.h
+++ b/include/uapi/linux/fib_rules.h
-@@ -90,6 +90,8 @@ enum {
+@@ -95,6 +95,8 @@ enum {
__FR_ACT_MAX,
};
*/
--- a/include/uapi/linux/rtnetlink.h
+++ b/include/uapi/linux/rtnetlink.h
-@@ -269,6 +269,8 @@ enum {
+@@ -277,6 +277,8 @@ enum {
__RTN_MAX
};
--- a/net/ipv4/tcp_offload.c
+++ b/net/ipv4/tcp_offload.c
-@@ -355,6 +355,7 @@ struct sk_buff *tcp_gro_receive(struct l
+@@ -359,6 +359,7 @@ struct sk_buff *tcp_gro_receive(struct l
flush |= (__force int)(flags ^ tcp_flag_word(th2));
flush |= skb->ip_summed != p->ip_summed;
flush |= skb->csum_level != p->csum_level;
--- a/net/netfilter/nf_flow_table_core.c
+++ b/net/netfilter/nf_flow_table_core.c
-@@ -658,6 +658,23 @@ static struct pernet_operations nf_flow_
+@@ -805,6 +805,23 @@ static struct pernet_operations nf_flow_
.exit_batch = nf_flow_table_pernet_exit,
};
static int __init nf_flow_table_module_init(void)
{
int ret;
-@@ -674,6 +691,10 @@ static int __init nf_flow_table_module_i
+@@ -821,6 +838,10 @@ static int __init nf_flow_table_module_i
if (ret)
goto out_bpf;
return 0;
out_bpf:
-@@ -685,6 +706,7 @@ out_offload:
+@@ -832,6 +853,7 @@ out_offload:
static void __exit nf_flow_table_module_exit(void)
{
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -5157,6 +5157,8 @@ static int mtk_probe(struct platform_dev
+@@ -5298,6 +5298,8 @@ static int mtk_probe(struct platform_dev
dev_err(eth->dev, "failed to allocated dummy device\n");
goto err_unreg_netdev;
}
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
-@@ -2037,6 +2037,9 @@ void phy_detach(struct phy_device *phyde
+@@ -1836,6 +1836,9 @@ void phy_detach(struct phy_device *phyde
phydev->devlink = NULL;
}
sysfs_remove_link(&dev->dev.kobj, "phydev");
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
-@@ -1037,6 +1037,12 @@ struct phy_driver {
+@@ -1013,6 +1013,12 @@ struct phy_driver {
/** @handle_interrupt: Override default interrupt handling */
irqreturn_t (*handle_interrupt)(struct phy_device *phydev);
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
-@@ -2273,7 +2273,7 @@ int phylink_fwnode_phy_connect(struct ph
+@@ -2279,7 +2279,7 @@ int phylink_fwnode_phy_connect(struct ph
{
struct fwnode_handle *phy_fwnode;
struct phy_device *phy_dev;
/* Fixed links and 802.3z are handled without needing a PHY */
if (pl->cfg_link_an_mode == MLO_AN_FIXED ||
-@@ -2303,6 +2303,25 @@ int phylink_fwnode_phy_connect(struct ph
+@@ -2309,6 +2309,25 @@ int phylink_fwnode_phy_connect(struct ph
if (pl->config->mac_requires_rxc)
flags |= PHY_F_RXC_ALWAYS_ON;
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
-@@ -2031,6 +2031,8 @@ static const struct dsa_switch_ops qca8k
+@@ -2030,6 +2030,8 @@ static const struct dsa_switch_ops qca8k
.port_fdb_add = qca8k_port_fdb_add,
.port_fdb_del = qca8k_port_fdb_del,
.port_fdb_dump = qca8k_port_fdb_dump,
.port_mirror_add = qca8k_port_mirror_add,
--- a/drivers/net/dsa/qca/qca8k-common.c
+++ b/drivers/net/dsa/qca/qca8k-common.c
-@@ -1234,6 +1234,42 @@ int qca8k_port_lag_leave(struct dsa_swit
+@@ -1227,6 +1227,42 @@ int qca8k_port_lag_leave(struct dsa_swit
return qca8k_lag_refresh_portmap(ds, port, lag, true);
}
u32 val;
--- a/drivers/net/dsa/qca/qca8k.h
+++ b/drivers/net/dsa/qca/qca8k.h
-@@ -592,5 +592,11 @@ int qca8k_port_lag_join(struct dsa_switc
+@@ -591,5 +591,11 @@ int qca8k_port_lag_join(struct dsa_switc
struct netlink_ext_ack *extack);
int qca8k_port_lag_leave(struct dsa_switch *ds, int port,
struct dsa_lag lag);
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
-@@ -1913,15 +1913,12 @@ qca8k_setup(struct dsa_switch *ds)
+@@ -1912,15 +1912,12 @@ qca8k_setup(struct dsa_switch *ds)
}
}
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
-@@ -1750,6 +1750,117 @@ qca8k_get_tag_protocol(struct dsa_switch
+@@ -1749,6 +1749,117 @@ qca8k_get_tag_protocol(struct dsa_switch
return DSA_TAG_PROTO_QCA;
}
static void
qca8k_conduit_change(struct dsa_switch *ds, const struct net_device *conduit,
bool operational)
-@@ -2039,8 +2150,9 @@ static const struct dsa_switch_ops qca8k
+@@ -2038,8 +2149,9 @@ static const struct dsa_switch_ops qca8k
.port_vlan_del = qca8k_port_vlan_del,
.phylink_get_caps = qca8k_phylink_get_caps,
.get_phy_flags = qca8k_get_phy_flags,
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
-@@ -2022,6 +2022,12 @@ qca8k_setup(struct dsa_switch *ds)
+@@ -2021,6 +2021,12 @@ qca8k_setup(struct dsa_switch *ds)
dev_err(priv->dev, "failed enabling QCA header mode on port %d", dp->index);
return ret;
}
}
/* Forward all unknown frames to CPU port for Linux processing */
-@@ -2051,11 +2057,6 @@ qca8k_setup(struct dsa_switch *ds)
+@@ -2050,11 +2056,6 @@ qca8k_setup(struct dsa_switch *ds)
if (ret)
return ret;
/* For port based vlans to work we need to set the
* default egress vid
*/
-@@ -2107,6 +2108,9 @@ qca8k_setup(struct dsa_switch *ds)
+@@ -2106,6 +2107,9 @@ qca8k_setup(struct dsa_switch *ds)
/* Set max number of LAGs supported */
ds->num_lag_ids = QCA8K_NUM_LAGS;
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/include/linux/mdio.h
+++ b/include/linux/mdio.h
-@@ -323,8 +323,14 @@ static inline u32 linkmode_adv_to_mii_10
+@@ -303,8 +303,14 @@ static inline u32 linkmode_adv_to_mii_10
* to linkmode advertisement settings. Other bits in advertising aren't changed.
*/
static inline void mii_10gbt_stat_mod_linkmode_lpa_t(unsigned long *advertising,
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -2224,7 +2224,7 @@ struct net_device {
+@@ -2301,7 +2301,7 @@ struct net_device {
#if IS_ENABLED(CONFIG_AX25)
struct ax25_dev __rcu *ax25_ptr;
#endif
#if IS_ENABLED(CONFIG_IEEE802154) || IS_ENABLED(CONFIG_6LOWPAN)
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
-@@ -309,7 +309,7 @@ static bool batadv_is_cfg80211_netdev(st
+@@ -310,7 +310,7 @@ static bool batadv_is_cfg80211_netdev(st
if (!net_device)
return false;
return true;
--- a/net/wireless/Kconfig
+++ b/net/wireless/Kconfig
-@@ -26,6 +26,7 @@ config CFG80211
+@@ -23,6 +23,7 @@ config CFG80211
# using a different algorithm, though right now they shouldn't
# (this is here rather than below to allow it to be a module)
select CRYPTO_SHA256 if CFG80211_USE_KERNEL_REGDB_KEYS
help
cfg80211 is the Linux wireless LAN (802.11) configuration API.
Enable this if you have a wireless device.
-@@ -36,6 +37,9 @@ config CFG80211
+@@ -33,6 +34,9 @@ config CFG80211
When built as a module it will be called cfg80211.
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -1344,6 +1344,22 @@ struct mtk_mac {
+@@ -1383,6 +1383,22 @@ struct mtk_mac {
/* the struct describing the SoC. these are declared in the soc_xyz.c files */
extern const struct of_device_id of_mtk_match[];
static inline bool mtk_is_netsys_v1(struct mtk_eth *eth)
{
return eth->soc->version == 1;
-@@ -1358,6 +1374,7 @@ static inline bool mtk_is_netsys_v3_or_g
+@@ -1397,6 +1413,7 @@ static inline bool mtk_is_netsys_v3_or_g
{
return eth->soc->version > 2;
}
#include <net/dst_metadata.h>
+#include <net/gso.h>
#include <net/page_pool/helpers.h>
+ #include <linux/genalloc.h>
- #include "mtk_eth_soc.h"
-@@ -1607,12 +1608,28 @@ static void mtk_wake_queue(struct mtk_et
+@@ -1752,12 +1753,28 @@ static void mtk_wake_queue(struct mtk_et
}
}
bool gso = false;
int tx_num;
-@@ -1641,6 +1658,18 @@ static netdev_tx_t mtk_start_xmit(struct
+@@ -1786,6 +1803,18 @@ static netdev_tx_t mtk_start_xmit(struct
return NETDEV_TX_BUSY;
}
/* TSO: fill MSS info in tcp checksum field */
if (skb_is_gso(skb)) {
if (skb_cow_head(skb, 0)) {
-@@ -1656,8 +1685,14 @@ static netdev_tx_t mtk_start_xmit(struct
+@@ -1801,8 +1830,14 @@ static netdev_tx_t mtk_start_xmit(struct
}
}
netif_tx_stop_all_queues(dev);
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -278,7 +278,7 @@
+@@ -280,7 +280,7 @@
#define MTK_CHK_DDONE_EN BIT(28)
#define MTK_DMAD_WR_WDONE BIT(26)
#define MTK_WCOMP_EN BIT(24)
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -1246,32 +1246,19 @@ static int txd_to_idx(struct mtk_tx_ring
+@@ -1391,32 +1391,19 @@ static int txd_to_idx(struct mtk_tx_ring
static void mtk_tx_unmap(struct mtk_eth *eth, struct mtk_tx_buf *tx_buf,
struct xdp_frame_bulk *bq, bool napi)
{
}
if (tx_buf->data && tx_buf->data != (void *)MTK_DMA_DUMMY_DESC) {
-@@ -1293,7 +1280,6 @@ static void mtk_tx_unmap(struct mtk_eth
+@@ -1438,7 +1425,6 @@ static void mtk_tx_unmap(struct mtk_eth
xdp_return_frame(xdpf);
}
}
tx_buf->data = NULL;
}
-@@ -1458,7 +1444,6 @@ static int mtk_tx_map(struct sk_buff *sk
+@@ -1603,7 +1589,6 @@ static int mtk_tx_map(struct sk_buff *sk
mtk_tx_set_dma_desc(dev, itxd, &txd_info);
itx_buf->mac_id = mac->id;
setup_tx_buf(eth, itx_buf, itxd_pdma, txd_info.addr, txd_info.size,
k++);
-@@ -1506,7 +1491,6 @@ static int mtk_tx_map(struct sk_buff *sk
+@@ -1651,7 +1636,6 @@ static int mtk_tx_map(struct sk_buff *sk
if (new_desc)
memset(tx_buf, 0, sizeof(*tx_buf));
tx_buf->data = (void *)MTK_DMA_DUMMY_DESC;
tx_buf->mac_id = mac->id;
setup_tx_buf(eth, tx_buf, txd_pdma, txd_info.addr,
-@@ -1839,8 +1823,6 @@ static int mtk_xdp_frame_map(struct mtk_
+@@ -1984,8 +1968,6 @@ static int mtk_xdp_frame_map(struct mtk_
txd_info->size, DMA_TO_DEVICE);
if (unlikely(dma_mapping_error(eth->dma_dev, txd_info->addr)))
return -ENOMEM;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -701,14 +701,6 @@ struct mtk_hw_stats {
+@@ -728,14 +728,6 @@ struct mtk_hw_stats {
struct u64_stats_sync syncp;
};
/* This enum allows us to identify how the clock is defined on the array of the
* clock in the order
*/
-@@ -881,13 +873,12 @@ enum mtk_tx_buf_type {
+@@ -908,13 +900,12 @@ enum mtk_tx_buf_type {
*/
struct mtk_tx_buf {
enum mtk_tx_buf_type type;
#include <net/gso.h>
+#include <net/checksum.h>
#include <net/page_pool/helpers.h>
+ #include <linux/genalloc.h>
- #include "mtk_eth_soc.h"
-@@ -1404,119 +1407,251 @@ static void mtk_tx_set_dma_desc(struct n
+@@ -1549,119 +1552,251 @@ static void mtk_tx_set_dma_desc(struct n
mtk_tx_set_dma_desc_v1(dev, txd, info);
}
/* make sure that all changes to the dma ring are flushed before we
* continue
-@@ -1525,11 +1660,11 @@ static int mtk_tx_map(struct sk_buff *sk
+@@ -1670,11 +1805,11 @@ static int mtk_tx_map(struct sk_buff *sk
if (MTK_HAS_CAPS(soc->caps, MTK_QDMA)) {
if (netif_xmit_stopped(txq) || !netdev_xmit_more())
ring->dma_size);
mtk_w32(eth, next_idx, MT7628_TX_CTX_IDX0);
}
-@@ -1538,18 +1673,20 @@ static int mtk_tx_map(struct sk_buff *sk
+@@ -1683,18 +1818,20 @@ static int mtk_tx_map(struct sk_buff *sk
err_dma:
do {
return -ENOMEM;
}
-@@ -1569,6 +1706,9 @@ static int mtk_cal_txd_req(struct mtk_et
+@@ -1714,6 +1851,9 @@ static int mtk_cal_txd_req(struct mtk_et
nfrags += skb_shinfo(skb)->nr_frags;
}
return nfrags;
}
-@@ -1609,9 +1749,29 @@ static bool mtk_skb_has_small_frag(struc
+@@ -1754,9 +1894,29 @@ static bool mtk_skb_has_small_frag(struc
if (skb_frag_size(&skb_shinfo(skb)->frags[i]) < min_size)
return true;
static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct mtk_mac *mac = netdev_priv(dev);
-@@ -1619,6 +1779,7 @@ static netdev_tx_t mtk_start_xmit(struct
+@@ -1764,6 +1924,7 @@ static netdev_tx_t mtk_start_xmit(struct
struct mtk_tx_ring *ring = ð->tx_ring;
struct net_device_stats *stats = &dev->stats;
struct sk_buff *segs, *next;
bool gso = false;
int tx_num;
-@@ -1647,37 +1808,42 @@ static netdev_tx_t mtk_start_xmit(struct
+@@ -1792,37 +1953,42 @@ static netdev_tx_t mtk_start_xmit(struct
return NETDEV_TX_BUSY;
}
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2312,7 +2312,7 @@ static int mtk_poll_rx(struct napi_struc
+@@ -2457,7 +2457,7 @@ static int mtk_poll_rx(struct napi_struc
if (ret != XDP_PASS)
goto skip_rx;
if (unlikely(!skb)) {
page_pool_put_full_page(ring->page_pool,
page, true);
-@@ -2350,7 +2350,7 @@ static int mtk_poll_rx(struct napi_struc
+@@ -2498,7 +2498,7 @@ static int mtk_poll_rx(struct napi_struc
dma_unmap_single(eth->dma_dev, ((u64)trxd.rxd1 | addr64),
ring->buf_size, DMA_FROM_DEVICE);
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -282,6 +282,7 @@
+@@ -284,6 +284,7 @@
#define MTK_WCOMP_EN BIT(24)
#define MTK_RESV_BUF (0x80 << 16)
#define MTK_MUTLI_CNT (0x4 << 12)
/* QDMA Flow Control Register */
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3483,12 +3483,14 @@ static int mtk_start_dma(struct mtk_eth
+@@ -3657,12 +3657,14 @@ static int mtk_start_dma(struct mtk_eth
MTK_TX_BT_32DWORDS | MTK_NDP_CO_PRO |
MTK_RX_2B_OFFSET | MTK_TX_WB_DDONE;
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -5656,7 +5656,7 @@ static const struct mtk_soc_data mt2701_
+@@ -5715,7 +5715,7 @@ static const struct mtk_soc_data mt2701_
DESC_SIZE(struct mtk_rx_dma),
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID,
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
-@@ -5684,7 +5684,7 @@ static const struct mtk_soc_data mt7621_
+@@ -5743,7 +5743,7 @@ static const struct mtk_soc_data mt7621_
DESC_SIZE(struct mtk_rx_dma),
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID,
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
-@@ -5714,7 +5714,7 @@ static const struct mtk_soc_data mt7622_
+@@ -5773,7 +5773,7 @@ static const struct mtk_soc_data mt7622_
DESC_SIZE(struct mtk_rx_dma),
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID,
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
-@@ -5743,7 +5743,7 @@ static const struct mtk_soc_data mt7623_
+@@ -5802,7 +5802,7 @@ static const struct mtk_soc_data mt7623_
DESC_SIZE(struct mtk_rx_dma),
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID,
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
-@@ -5769,7 +5769,7 @@ static const struct mtk_soc_data mt7629_
+@@ -5828,7 +5828,7 @@ static const struct mtk_soc_data mt7629_
DESC_SIZE(struct mtk_rx_dma),
.irq_done_mask = MTK_RX_DONE_INT,
.dma_l4_valid = RX_DMA_L4_VALID,
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
-@@ -5801,7 +5801,7 @@ static const struct mtk_soc_data mt7981_
+@@ -5860,7 +5860,7 @@ static const struct mtk_soc_data mt7981_
.dma_l4_valid = RX_DMA_L4_VALID_V2,
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
};
-@@ -5831,7 +5831,7 @@ static const struct mtk_soc_data mt7986_
+@@ -5890,7 +5890,7 @@ static const struct mtk_soc_data mt7986_
.dma_l4_valid = RX_DMA_L4_VALID_V2,
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
},
};
-@@ -5884,7 +5884,7 @@ static const struct mtk_soc_data rt5350_
+@@ -5943,7 +5943,7 @@ static const struct mtk_soc_data rt5350_
.dma_l4_valid = RX_DMA_L4_VALID_PDMA,
.dma_max_len = MTK_TX_DMA_BUF_LEN,
.dma_len_offset = 16,
--- a/drivers/net/ethernet/mediatek/Kconfig
+++ b/drivers/net/ethernet/mediatek/Kconfig
-@@ -26,7 +26,6 @@ config NET_MEDIATEK_SOC
- select PHYLINK
+@@ -19,7 +19,6 @@ config NET_MEDIATEK_SOC
select DIMLIB
+ select GENERIC_ALLOCATOR
select PAGE_POOL
- select PAGE_POOL_STATS
select PCS_MTK_LYNXI
help
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -4756,6 +4756,7 @@ static int mtk_get_sset_count(struct net
+@@ -4845,6 +4845,7 @@ static int mtk_get_sset_count(struct net
static void mtk_ethtool_pp_stats(struct mtk_eth *eth, u64 *data)
{
struct page_pool_stats stats = {};
int i;
-@@ -4768,6 +4769,7 @@ static void mtk_ethtool_pp_stats(struct
+@@ -4857,6 +4858,7 @@ static void mtk_ethtool_pp_stats(struct
page_pool_get_stats(ring->page_pool, &stats);
}
page_pool_ethtool_stats_get(data, &stats);
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
-@@ -151,7 +151,7 @@ config BROADCOM_PHY
+@@ -156,7 +156,7 @@ config BROADCOM_PHY
tristate "Broadcom 54XX PHYs"
select BCM_NET_PHYLIB
select BCM_NET_PHYPTP if NETWORK_PHY_TIMESTAMPING
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -557,6 +557,7 @@ static const struct sfp_quirk sfp_quirks
+@@ -564,6 +564,7 @@ static const struct sfp_quirk sfp_quirks
SFP_QUIRK_S("OEM", "SFP-2.5G-BX10-U", sfp_quirk_2500basex),
SFP_QUIRK_F("OEM", "RTSFP-10", sfp_fixup_rollball_cc),
SFP_QUIRK_F("OEM", "RTSFP-10G", sfp_fixup_rollball_cc),
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
-@@ -832,6 +832,19 @@ dsa_tree_offloads_bridge_dev(struct dsa_
+@@ -833,6 +833,19 @@ dsa_tree_offloads_bridge_dev(struct dsa_
return false;
}
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
-@@ -832,15 +832,18 @@ dsa_tree_offloads_bridge_dev(struct dsa_
+@@ -833,15 +833,18 @@ dsa_tree_offloads_bridge_dev(struct dsa_
return false;
}
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
-@@ -1185,6 +1185,9 @@ struct dsa_switch_ops {
+@@ -1172,6 +1172,9 @@ struct dsa_switch_ops {
int (*devlink_info_get)(struct dsa_switch *ds,
struct devlink_info_req *req,
struct netlink_ext_ack *extack);
--- a/drivers/bus/mhi/host/main.c
+++ b/drivers/bus/mhi/host/main.c
-@@ -916,6 +916,7 @@ int mhi_process_ctrl_ev_ring(struct mhi_
+@@ -917,6 +917,7 @@ int mhi_process_ctrl_ev_ring(struct mhi_
switch (event) {
case MHI_EE_SBL:
st = DEV_ST_TRANSITION_SBL;
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
-@@ -17799,8 +17799,10 @@ static int tg3_init_one(struct pci_dev *
+@@ -17828,8 +17828,10 @@ static int tg3_init_one(struct pci_dev *
} else
persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
#include <linux/init.h>
#include <linux/kref.h>
#include <linux/module.h>
-@@ -811,6 +814,62 @@ static int nvmem_validate_keepouts(struc
+@@ -786,6 +789,62 @@ static int nvmem_validate_keepouts(struc
return 0;
}
static int nvmem_add_cells_from_dt(struct nvmem_device *nvmem, struct device_node *np)
{
struct device *dev = &nvmem->dev;
-@@ -852,6 +911,25 @@ static int nvmem_add_cells_from_dt(struc
+@@ -827,6 +886,25 @@ static int nvmem_add_cells_from_dt(struc
if (nvmem->fixup_dt_cell_info)
nvmem->fixup_dt_cell_info(nvmem, &info);
#include <linux/init.h>
#include <linux/kref.h>
#include <linux/module.h>
-@@ -814,62 +811,6 @@ static int nvmem_validate_keepouts(struc
+@@ -789,62 +786,6 @@ static int nvmem_validate_keepouts(struc
return 0;
}
static int nvmem_add_cells_from_dt(struct nvmem_device *nvmem, struct device_node *np)
{
struct device *dev = &nvmem->dev;
-@@ -911,24 +852,8 @@ static int nvmem_add_cells_from_dt(struc
+@@ -886,24 +827,8 @@ static int nvmem_add_cells_from_dt(struc
if (nvmem->fixup_dt_cell_info)
nvmem->fixup_dt_cell_info(nvmem, &info);
return of_driver_match_device(dev, drv);
--- a/include/linux/nvmem-provider.h
+++ b/include/linux/nvmem-provider.h
-@@ -242,6 +242,8 @@ static inline void nvmem_layout_unregist
+@@ -218,6 +218,8 @@ static inline void nvmem_layout_unregist
#if IS_ENABLED(CONFIG_NVMEM) && IS_ENABLED(CONFIG_OF)
/**
* of_nvmem_layout_get_container() - Get OF node of layout container
*
-@@ -254,6 +256,8 @@ struct device_node *of_nvmem_layout_get_
+@@ -230,6 +232,8 @@ struct device_node *of_nvmem_layout_get_
#else /* CONFIG_NVMEM && CONFIG_OF */
--- a/drivers/pci/Kconfig
+++ b/drivers/pci/Kconfig
-@@ -118,6 +118,13 @@ config XEN_PCIDEV_FRONTEND
+@@ -119,6 +119,13 @@ config XEN_PCIDEV_FRONTEND
The PCI device frontend driver allows the kernel to import arbitrary
PCI devices from a PCI backend to support PCI driver domains.
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
-@@ -313,6 +313,7 @@ static void quirk_mmio_always_on(struct
+@@ -316,6 +316,7 @@ static void quirk_mmio_always_on(struct
DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_ANY_ID, PCI_ANY_ID,
PCI_CLASS_BRIDGE_HOST, 8, quirk_mmio_always_on);
/*
* The Mellanox Tavor device gives false positive parity errors. Disable
* parity error reporting.
-@@ -3509,6 +3510,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
+@@ -3519,6 +3520,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
-@@ -3534,6 +3537,8 @@ static void quirk_intel_ntb(struct pci_d
+@@ -3544,6 +3547,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
-@@ -3572,6 +3577,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
+@@ -3582,6 +3587,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);
/**
* ata_build_rw_tf - Build ATA taskfile for given read/write request
* @qc: Metadata associated with the taskfile to build
-@@ -4807,6 +4818,9 @@ void __ata_qc_complete(struct ata_queued
+@@ -4867,6 +4878,9 @@ void __ata_qc_complete(struct ata_queued
link->active_tag = ATA_TAG_POISON;
ap->nr_active_links--;
}
/* clear exclusive status */
if (unlikely(qc->flags & ATA_QCFLAG_CLEAR_EXCL &&
-@@ -5536,6 +5550,9 @@ struct ata_port *ata_port_alloc(struct a
+@@ -5596,6 +5610,9 @@ struct ata_port *ata_port_alloc(struct a
ap->stats.unhandled_irq = 1;
ap->stats.idle_irq = 1;
#endif
ata_sff_port_init(ap);
ata_force_pflags(ap);
-@@ -5552,6 +5569,12 @@ void ata_port_free(struct ata_port *ap)
+@@ -5612,6 +5629,12 @@ void ata_port_free(struct ata_port *ap)
kfree(ap->pmp_link);
kfree(ap->slave_link);
ida_free(&ata_ida, ap->print_id);
kfree(ap);
}
EXPORT_SYMBOL_GPL(ata_port_free);
-@@ -5956,7 +5979,23 @@ int ata_host_register(struct ata_host *h
+@@ -6016,7 +6039,23 @@ int ata_host_register(struct ata_host *h
WARN_ON(1);
return -EINVAL;
}
/*
* Define if arch has non-standard setup. This is a _PCI_ standard
-@@ -937,6 +940,10 @@ struct ata_port {
+@@ -939,6 +942,10 @@ struct ata_port {
#ifdef CONFIG_ATA_ACPI
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
#endif
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
-@@ -4375,6 +4375,13 @@ static const struct alg_test_desc alg_te
+@@ -4177,6 +4177,13 @@ static const struct alg_test_desc alg_te
.cprng = __VECS(ansi_cprng_aes_tv_template)
}
}, {
.test = alg_test_aead,
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
-@@ -17133,6 +17133,261 @@ static const struct cipher_testvec aes_c
+@@ -15826,6 +15826,261 @@ static const struct cipher_testvec aes_c
},
};
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1888,6 +1888,15 @@ config ARCH_HAS_MEMBARRIER_CALLBACKS
- config ARCH_HAS_MEMBARRIER_SYNC_CORE
- bool
+@@ -2012,6 +2012,15 @@ config ARCH_SUPPORTS_MSEAL_SYSTEM_MAPPIN
+ For complete descriptions of memory sealing, please see
+ Documentation/userspace-api/mseal.rst
+config MANGLE_BOOTARGS
+ bool "Rename offending bootargs"
help
--- a/init/main.c
+++ b/init/main.c
-@@ -633,6 +633,29 @@ static inline void setup_nr_cpu_ids(void
+@@ -635,6 +635,29 @@ static inline void setup_nr_cpu_ids(void
static inline void smp_prepare_cpus(unsigned int maxcpus) { }
#endif
/*
* We need to store the untouched command line for future reference.
* We also need to store the touched command line since the parameter
-@@ -939,6 +962,7 @@ void start_kernel(void)
+@@ -934,6 +957,7 @@ void start_kernel(void)
jump_label_init();
static_call_init();
early_security_init();