generic: 6.1: manually refresh pending patches
Refresh pending patches for kernel 6.1. Changes: - Refresh mtd patches with new implementation. - Change 191-rtc-rs5c372-let_the_alarm_to_be_used_as_wakeup_source as uie_unsupported got dropped and we now set the bit directly. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
This commit is contained in:
		| @@ -10,12 +10,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/Makefile | --- a/Makefile | ||||||
| +++ b/Makefile | +++ b/Makefile | ||||||
| @@ -534,7 +534,7 @@ KBUILD_LDFLAGS_MODULE := | @@ -523,7 +523,7 @@ KBUILD_LDFLAGS_MODULE := | ||||||
|  KBUILD_LDFLAGS := |  # Allows the usage of unstable features in stable compilers. | ||||||
|  CLANG_FLAGS := |  export RUSTC_BOOTSTRAP := 1 | ||||||
|   |   | ||||||
| -export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC HOSTPKG_CONFIG | -export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC HOSTPKG_CONFIG | ||||||
| +export ARCH SRCARCH SUBARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC HOSTPKG_CONFIG | +export ARCH SRCARCH SUBARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC HOSTPKG_CONFIG | ||||||
|  |  export RUSTC RUSTDOC RUSTFMT RUSTC_OR_CLIPPY_QUIET RUSTC_OR_CLIPPY BINDGEN CARGO | ||||||
|  |  export HOSTRUSTC KBUILD_HOSTRUSTFLAGS | ||||||
|  export CPP AR NM STRIP OBJCOPY OBJDUMP READELF PAHOLE RESOLVE_BTFIDS LEX YACC AWK INSTALLKERNEL |  export CPP AR NM STRIP OBJCOPY OBJDUMP READELF PAHOLE RESOLVE_BTFIDS LEX YACC AWK INSTALLKERNEL | ||||||
|  export PERL PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX |  | ||||||
|  export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ ZSTD |  | ||||||
|   | |||||||
| @@ -23,10 +23,10 @@ Signed-off-by: Vincent Tremblay <vincent@vtremblay.dev> | |||||||
|  }; |  }; | ||||||
|  MODULE_DEVICE_TABLE(spi, spidev_spi_ids); |  MODULE_DEVICE_TABLE(spi, spidev_spi_ids); | ||||||
| @@ -705,6 +706,7 @@ static const struct of_device_id spidev_ | @@ -705,6 +706,7 @@ static const struct of_device_id spidev_ | ||||||
|  	{ .compatible = "menlo,m53cpld" }, |  	{ .compatible = "menlo,m53cpld", .data = &spidev_of_check }, | ||||||
|  	{ .compatible = "cisco,spi-petra" }, |  	{ .compatible = "cisco,spi-petra", .data = &spidev_of_check }, | ||||||
|  	{ .compatible = "micron,spi-authenta" }, |  	{ .compatible = "micron,spi-authenta", .data = &spidev_of_check }, | ||||||
| +	{ .compatible = "silabs,em3581" }, | +	{ .compatible = "silabs,em3581", .data = &spidev_of_check }, | ||||||
|  	{}, |  	{}, | ||||||
|  }; |  }; | ||||||
|  MODULE_DEVICE_TABLE(of, spidev_dt_ids); |  MODULE_DEVICE_TABLE(of, spidev_dt_ids); | ||||||
|   | |||||||
| @@ -23,10 +23,10 @@ Signed-off-by: Vincent Tremblay <vincent@vtremblay.dev> | |||||||
|  }; |  }; | ||||||
|  MODULE_DEVICE_TABLE(spi, spidev_spi_ids); |  MODULE_DEVICE_TABLE(spi, spidev_spi_ids); | ||||||
| @@ -707,6 +708,7 @@ static const struct of_device_id spidev_ | @@ -707,6 +708,7 @@ static const struct of_device_id spidev_ | ||||||
|  	{ .compatible = "cisco,spi-petra" }, |  	{ .compatible = "cisco,spi-petra", .data = &spidev_of_check }, | ||||||
|  	{ .compatible = "micron,spi-authenta" }, |  	{ .compatible = "micron,spi-authenta", .data = &spidev_of_check }, | ||||||
|  	{ .compatible = "silabs,em3581" }, |  	{ .compatible = "silabs,em3581", .data = &spidev_of_check }, | ||||||
| +	{ .compatible = "silabs,si3210" }, | +	{ .compatible = "silabs,si3210", .data = &spidev_of_check }, | ||||||
|  	{}, |  	{}, | ||||||
|  }; |  }; | ||||||
|  MODULE_DEVICE_TABLE(of, spidev_dt_ids); |  MODULE_DEVICE_TABLE(of, spidev_dt_ids); | ||||||
|   | |||||||
| @@ -71,7 +71,7 @@ Signed-off-by: Tobias Wolf <dev-NTEO@vplace.de> | |||||||
|  |  | ||||||
| --- a/mm/page_alloc.c | --- a/mm/page_alloc.c | ||||||
| +++ b/mm/page_alloc.c | +++ b/mm/page_alloc.c | ||||||
| @@ -7620,7 +7620,7 @@ static void __init alloc_node_mem_map(st | @@ -7556,7 +7556,7 @@ static void __init alloc_node_mem_map(st | ||||||
|  	if (pgdat == NODE_DATA(0)) { |  	if (pgdat == NODE_DATA(0)) { | ||||||
|  		mem_map = NODE_DATA(0)->node_mem_map; |  		mem_map = NODE_DATA(0)->node_mem_map; | ||||||
|  		if (page_to_pfn(mem_map) != pgdat->node_start_pfn) |  		if (page_to_pfn(mem_map) != pgdat->node_start_pfn) | ||||||
|   | |||||||
| @@ -58,12 +58,13 @@ Signed-off-by: Daniel González Cabanelas <dgcbueu@gmail.com> | |||||||
|  	rs5c372->rtc = devm_rtc_device_register(&client->dev, |  	rs5c372->rtc = devm_rtc_device_register(&client->dev, | ||||||
|  					rs5c372_driver.driver.name, |  					rs5c372_driver.driver.name, | ||||||
|  					&rs5c372_rtc_ops, THIS_MODULE); |  					&rs5c372_rtc_ops, THIS_MODULE); | ||||||
| @@ -761,6 +774,9 @@ static int rs5c372_probe(struct i2c_clie | @@ -761,6 +774,10 @@ static int rs5c372_probe(struct i2c_clie | ||||||
|  	if (err) |  	if (err) | ||||||
|  		goto exit; |  		goto exit; | ||||||
|   |   | ||||||
| +	/* the rs5c372 alarm only supports a minute accuracy */ | +	/* the rs5c372 alarm only supports a minute accuracy */ | ||||||
| +	rs5c372->rtc->uie_unsupported = 1; | +	set_bit(RTC_FEATURE_ALARM_RES_MINUTE, rs5c372->rtc->features); | ||||||
|  | +	clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, rs5c372->rtc->features); | ||||||
| + | + | ||||||
|  	return 0; |  	return 0; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -95,22 +95,21 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	/* using the '\0' symbol last allows compress_symbols to use standard |  	/* using the '\0' symbol last allows compress_symbols to use standard | ||||||
|  	 * fast string functions */ |  	 * fast string functions */ | ||||||
|  	for (i = 255; i >= 0; i--) { |  	for (i = 255; i >= 0; i--) { | ||||||
| @@ -773,6 +783,8 @@ int main(int argc, char **argv) | @@ -773,6 +783,7 @@ int main(int argc, char **argv) | ||||||
|  				absolute_percpu = 1; |  			{"all-symbols",     no_argument, &all_symbols,     1}, | ||||||
|  			else if (strcmp(argv[i], "--base-relative") == 0) |  			{"absolute-percpu", no_argument, &absolute_percpu, 1}, | ||||||
|  				base_relative = 1; |  			{"base-relative",   no_argument, &base_relative,   1}, | ||||||
| +			else if (strcmp(argv[i], "--uncompressed") == 0) | +			{"uncompressed",   no_argument, &uncompressed,   1}, | ||||||
| +				uncompressed = 1; |  			{}, | ||||||
|  			else |  		}; | ||||||
|  				usage(); |   | ||||||
|  		} |  | ||||||
| --- a/scripts/link-vmlinux.sh | --- a/scripts/link-vmlinux.sh | ||||||
| +++ b/scripts/link-vmlinux.sh | +++ b/scripts/link-vmlinux.sh | ||||||
| @@ -257,6 +257,10 @@ kallsyms() | @@ -266,6 +266,10 @@ kallsyms() | ||||||
|  		kallsymopt="${kallsymopt} --base-relative" |  		kallsymopt="${kallsymopt} --base-relative" | ||||||
|  	fi |  	fi | ||||||
|   |   | ||||||
| +	if [ -n "${CONFIG_KALLSYMS_UNCOMPRESSED}" ]; then | +	if is_enabled CONFIG_KALLSYMS_UNCOMPRESSED; then | ||||||
| +		kallsymopt="${kallsymopt} --uncompressed" | +		kallsymopt="${kallsymopt} --uncompressed" | ||||||
| +	fi | +	fi | ||||||
| + | + | ||||||
|   | |||||||
| @@ -17,9 +17,9 @@ Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org> | |||||||
| --- a/drivers/platform/Kconfig | --- a/drivers/platform/Kconfig | ||||||
| +++ b/drivers/platform/Kconfig | +++ b/drivers/platform/Kconfig | ||||||
| @@ -15,3 +15,5 @@ source "drivers/platform/mellanox/Kconfi | @@ -15,3 +15,5 @@ source "drivers/platform/mellanox/Kconfi | ||||||
|  source "drivers/platform/olpc/Kconfig" |  | ||||||
|   |  | ||||||
|  source "drivers/platform/surface/Kconfig" |  source "drivers/platform/surface/Kconfig" | ||||||
|  |   | ||||||
|  |  source "drivers/platform/x86/Kconfig" | ||||||
| + | + | ||||||
| +source "drivers/platform/mikrotik/Kconfig" | +source "drivers/platform/mikrotik/Kconfig" | ||||||
| --- a/drivers/platform/Makefile | --- a/drivers/platform/Makefile | ||||||
|   | |||||||
| @@ -289,7 +289,7 @@ Subject: [PATCH] mtd: mtdsplit support | |||||||
|  static inline uint32_t mtd_div_by_ws(uint64_t sz, struct mtd_info *mtd) |  static inline uint32_t mtd_div_by_ws(uint64_t sz, struct mtd_info *mtd) | ||||||
|  { |  { | ||||||
|  	if (mtd->writesize_shift) |  	if (mtd->writesize_shift) | ||||||
| @@ -693,6 +711,13 @@ extern struct mtd_info *of_get_mtd_devic | @@ -685,6 +703,13 @@ extern void __put_mtd_device(struct mtd_ | ||||||
|  extern struct mtd_info *get_mtd_device_nm(const char *name); |  extern struct mtd_info *get_mtd_device_nm(const char *name); | ||||||
|  extern void put_mtd_device(struct mtd_info *mtd); |  extern void put_mtd_device(struct mtd_info *mtd); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/drivers/mtd/parsers/redboot.c | --- a/drivers/mtd/parsers/redboot.c | ||||||
| +++ b/drivers/mtd/parsers/redboot.c | +++ b/drivers/mtd/parsers/redboot.c | ||||||
| @@ -278,14 +278,21 @@ nogood: | @@ -277,14 +277,21 @@ nogood: | ||||||
|  #endif |  #endif | ||||||
|  		names += strlen(names) + 1; |  		names += strlen(names) + 1; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -8,11 +8,12 @@ Signed-off-by: Piotr Dymacz <pepe2k@gmail.com> | |||||||
|  |  | ||||||
| --- a/drivers/mtd/spi-nor/eon.c | --- a/drivers/mtd/spi-nor/eon.c | ||||||
| +++ b/drivers/mtd/spi-nor/eon.c | +++ b/drivers/mtd/spi-nor/eon.c | ||||||
| @@ -25,6 +25,7 @@ static const struct flash_info eon_parts | @@ -15,6 +15,8 @@ static const struct flash_info eon_parts | ||||||
|  	{ "en25q32b",   INFO(0x1c3016, 0, 64 * 1024,   64, 0) }, |  	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128) }, | ||||||
|  	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) }, |  	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128) | ||||||
|  	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) }, |  		NO_SFDP_FLAGS(SECT_4K) }, | ||||||
| +	{ "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256, SECT_4K) }, | +	{ "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256) | ||||||
|  	{ "en25q80a",   INFO(0x1c3014, 0, 64 * 1024,   16, | +		NO_SFDP_FLAGS(SECT_4K) }, | ||||||
|  			     SECT_4K | SPI_NOR_DUAL_READ) }, |  	{ "en25q80a",   INFO(0x1c3014, 0, 64 * 1024,   16) | ||||||
|  	{ "en25qh16",   INFO(0x1c7015, 0, 64 * 1024,   32, |  		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ) }, | ||||||
|  |  	{ "en25qh16",   INFO(0x1c7015, 0, 64 * 1024,   32) | ||||||
|   | |||||||
| @@ -12,10 +12,10 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> | |||||||
| --- a/drivers/mtd/spi-nor/eon.c | --- a/drivers/mtd/spi-nor/eon.c | ||||||
| +++ b/drivers/mtd/spi-nor/eon.c | +++ b/drivers/mtd/spi-nor/eon.c | ||||||
| @@ -26,6 +26,7 @@ static const struct flash_info eon_parts | @@ -26,6 +26,7 @@ static const struct flash_info eon_parts | ||||||
|  	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) }, |  		NO_SFDP_FLAGS(SECT_4K) }, | ||||||
|  	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) }, |  	{ "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256) | ||||||
|  	{ "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256, SECT_4K) }, |  		NO_SFDP_FLAGS(SECT_4K) }, | ||||||
| +	{ "en25qx128a", INFO(0x1c7118, 0, 64 * 1024, 256, 0) }, | +	{ "en25qx128a", INFO(0x1c7118, 0, 64 * 1024, 256) }, | ||||||
|  	{ "en25q80a",   INFO(0x1c3014, 0, 64 * 1024,   16, |  	{ "en25q80a",   INFO(0x1c3014, 0, 64 * 1024,   16) | ||||||
|  			     SECT_4K | SPI_NOR_DUAL_READ) }, |  		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ) }, | ||||||
|  	{ "en25qh16",   INFO(0x1c7015, 0, 64 * 1024,   32, |  	{ "en25qh16",   INFO(0x1c7015, 0, 64 * 1024,   32) | ||||||
|   | |||||||
| @@ -31,17 +31,18 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/drivers/mtd/spi-nor/Makefile | --- a/drivers/mtd/spi-nor/Makefile | ||||||
| +++ b/drivers/mtd/spi-nor/Makefile | +++ b/drivers/mtd/spi-nor/Makefile | ||||||
| @@ -17,6 +17,7 @@ spi-nor-objs			+= sst.o | @@ -17,7 +17,8 @@ spi-nor-objs			+= sst.o | ||||||
|  spi-nor-objs			+= winbond.o |  spi-nor-objs			+= winbond.o | ||||||
|  spi-nor-objs			+= xilinx.o |  spi-nor-objs			+= xilinx.o | ||||||
|  spi-nor-objs			+= xmc.o |  spi-nor-objs			+= xmc.o | ||||||
| +spi-nor-objs			+= xtx.o | +spi-nor-objs			+= xtx.o | ||||||
|  |  spi-nor-$(CONFIG_DEBUG_FS)	+= debugfs.o | ||||||
|  obj-$(CONFIG_MTD_SPI_NOR)	+= spi-nor.o |  obj-$(CONFIG_MTD_SPI_NOR)	+= spi-nor.o | ||||||
|   |   | ||||||
|  obj-$(CONFIG_MTD_SPI_NOR)	+= controllers/ |  obj-$(CONFIG_MTD_SPI_NOR)	+= controllers/ | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/drivers/mtd/spi-nor/xtx.c | +++ b/drivers/mtd/spi-nor/xtx.c | ||||||
| @@ -0,0 +1,15 @@ | @@ -0,0 +1,17 @@ | ||||||
| +// SPDX-License-Identifier: GPL-2.0 | +// SPDX-License-Identifier: GPL-2.0 | ||||||
| +#include <linux/mtd/spi-nor.h> | +#include <linux/mtd/spi-nor.h> | ||||||
| + | + | ||||||
| @@ -49,7 +50,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| + | + | ||||||
| +static const struct flash_info xtx_parts[] = { | +static const struct flash_info xtx_parts[] = { | ||||||
| +	/* XTX Technology (Shenzhen) Limited */ | +	/* XTX Technology (Shenzhen) Limited */ | ||||||
| +	{ "xt25f128b", INFO(0x0B4018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, | +	{ "xt25f128b", INFO(0x0B4018, 0, 64 * 1024, 256) | ||||||
|  | +		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | | ||||||
|  | +			      SPI_NOR_QUAD_READ) }, | ||||||
| +}; | +}; | ||||||
| + | + | ||||||
| +const struct spi_nor_manufacturer spi_nor_xtx = { | +const struct spi_nor_manufacturer spi_nor_xtx = { | ||||||
|   | |||||||
| @@ -10,13 +10,14 @@ Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com> | |||||||
|  |  | ||||||
| --- a/drivers/mtd/spi-nor/gigadevice.c | --- a/drivers/mtd/spi-nor/gigadevice.c | ||||||
| +++ b/drivers/mtd/spi-nor/gigadevice.c | +++ b/drivers/mtd/spi-nor/gigadevice.c | ||||||
| @@ -24,6 +24,9 @@ static struct spi_nor_fixups gd25q256_fi | @@ -24,6 +24,10 @@ static struct spi_nor_fixups gd25q256_fi | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  static const struct flash_info gigadevice_parts[] = { |  static const struct flash_info gigadevice_nor_parts[] = { | ||||||
| +	{ "gd25q05", INFO(0xc84010, 0, 64 * 1024,  1, | +	{ "gd25q05", INFO(0xc84010, 0, 64 * 1024,  1) | ||||||
| +			  SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | | +		FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)  | ||||||
| +			  SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) }, | +		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | | ||||||
|  	{ "gd25q16", INFO(0xc84015, 0, 64 * 1024,  32, | +			      SPI_NOR_QUAD_READ) }, | ||||||
|  			  SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | |  	{ "gd25q16", INFO(0xc84015, 0, 64 * 1024,  32) | ||||||
|  			  SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) }, |  		FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) | ||||||
|  |  		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | | ||||||
|   | |||||||
| @@ -9,13 +9,15 @@ Subject: [PATCH] spi-nor/gigadevic: add gd25q512 | |||||||
|  |  | ||||||
| --- a/drivers/mtd/spi-nor/gigadevice.c | --- a/drivers/mtd/spi-nor/gigadevice.c | ||||||
| +++ b/drivers/mtd/spi-nor/gigadevice.c | +++ b/drivers/mtd/spi-nor/gigadevice.c | ||||||
| @@ -53,6 +53,9 @@ static const struct flash_info gigadevic | @@ -53,6 +53,11 @@ static const struct flash_info gigadevic | ||||||
|  			   SPI_NOR_4B_OPCODES | SPI_NOR_HAS_LOCK | |  		FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_TB_SR_BIT6) | ||||||
|  			   SPI_NOR_HAS_TB | SPI_NOR_TB_SR_BIT6) |  		FIXUP_FLAGS(SPI_NOR_4B_OPCODES) | ||||||
|  		.fixups = &gd25q256_fixups }, |  		.fixups = &gd25q256_fixups }, | ||||||
| +	{ "gd25q512", INFO(0xc84020, 0, 64 * 1024, 1024, | +	{ "gd25q512", INFO(0xc84020, 0, 64 * 1024, 1024) | ||||||
| +			   SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | | +		FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) | ||||||
| +			   SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_4B_OPCODES) }, | +		FIXUP_FLAGS(SPI_NOR_4B_OPCODES) | ||||||
|  | +		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | | ||||||
|  | +			      SPI_NOR_QUAD_READ) }, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  const struct spi_nor_manufacturer spi_nor_gigadevice = { |  const struct spi_nor_manufacturer spi_nor_gigadevice = { | ||||||
|   | |||||||
| @@ -12,12 +12,13 @@ flash. | |||||||
|  |  | ||||||
| --- a/drivers/mtd/spi-nor/esmt.c | --- a/drivers/mtd/spi-nor/esmt.c | ||||||
| +++ b/drivers/mtd/spi-nor/esmt.c | +++ b/drivers/mtd/spi-nor/esmt.c | ||||||
| @@ -10,6 +10,8 @@ | @@ -10,6 +10,9 @@ | ||||||
|   |   | ||||||
|  static const struct flash_info esmt_parts[] = { |  static const struct flash_info esmt_parts[] = { | ||||||
|  	/* ESMT */ |  	/* ESMT */ | ||||||
| +	{ "f25l16pa-2s", INFO(0x8c2115, 0, 64 * 1024, 32, | +	{ "f25l16pa-2s", INFO(0x8c2115, 0, 64 * 1024, 32) | ||||||
| +			   SECT_4K | SPI_NOR_HAS_LOCK) }, | +			FLAGS(SPI_NOR_HAS_LOCK) | ||||||
|  	{ "f25l32pa", INFO(0x8c2016, 0, 64 * 1024, 64, | +			NO_SFDP_FLAGS(SECT_4K) }, | ||||||
|  			   SECT_4K | SPI_NOR_HAS_LOCK | SPI_NOR_SWP_IS_VOLATILE) }, |  	{ "f25l32pa", INFO(0x8c2016, 0, 64 * 1024, 64) | ||||||
|  	{ "f25l32qa", INFO(0x8c4116, 0, 64 * 1024, 64, |  			FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_SWP_IS_VOLATILE) | ||||||
|  |  			NO_SFDP_FLAGS(SECT_4K) }, | ||||||
|   | |||||||
| @@ -13,12 +13,13 @@ Datasheet available at https://www.xmcwh.com/uploads/435/XM25QH128C.pdf | |||||||
|  |  | ||||||
| --- a/drivers/mtd/spi-nor/xmc.c | --- a/drivers/mtd/spi-nor/xmc.c | ||||||
| +++ b/drivers/mtd/spi-nor/xmc.c | +++ b/drivers/mtd/spi-nor/xmc.c | ||||||
| @@ -14,6 +14,8 @@ static const struct flash_info xmc_parts | @@ -14,6 +14,9 @@ static const struct flash_info xmc_parts | ||||||
|  			    SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, | 	{ "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256) | ||||||
|  	{ "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256, | 		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | | ||||||
|  			     SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, | 			      SPI_NOR_QUAD_READ) }, | ||||||
| +	{ "XM25QH128C", INFO(0x204018, 0, 64 * 1024, 256, | +	{ "XM25QH128C", INFO(0x204018, 0, 64 * 1024, 256) | ||||||
| +			     SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, | +		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | | ||||||
|  | +			      SPI_NOR_QUAD_READ) }, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  const struct spi_nor_manufacturer spi_nor_xmc = { |  const struct spi_nor_manufacturer spi_nor_xmc = { | ||||||
|   | |||||||
| @@ -26,15 +26,15 @@ Signed-off-by: Chuanhong Guo <gch981213@gmail.com> | |||||||
| +++ b/drivers/mtd/nand/spi/Makefile | +++ b/drivers/mtd/nand/spi/Makefile | ||||||
| @@ -1,3 +1,3 @@ | @@ -1,3 +1,3 @@ | ||||||
|  # SPDX-License-Identifier: GPL-2.0 |  # SPDX-License-Identifier: GPL-2.0 | ||||||
| -spinand-objs := core.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o xtx.o | -spinand-objs := core.o ato.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o xtx.o | ||||||
| +spinand-objs := core.o esmt.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o xtx.o | +spinand-objs := core.o ato.o esmt.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o xtx.o | ||||||
|  obj-$(CONFIG_MTD_SPI_NAND) += spinand.o |  obj-$(CONFIG_MTD_SPI_NAND) += spinand.o | ||||||
| --- a/drivers/mtd/nand/spi/core.c | --- a/drivers/mtd/nand/spi/core.c | ||||||
| +++ b/drivers/mtd/nand/spi/core.c | +++ b/drivers/mtd/nand/spi/core.c | ||||||
| @@ -906,6 +906,7 @@ static const struct nand_ops spinand_ops | @@ -896,6 +896,7 @@ static const struct nand_ops spinand_ops | ||||||
|  }; |  | ||||||
|   |   | ||||||
|  static const struct spinand_manufacturer *spinand_manufacturers[] = { |  static const struct spinand_manufacturer *spinand_manufacturers[] = { | ||||||
|  |  	&ato_spinand_manufacturer, | ||||||
| +	&esmt_c8_spinand_manufacturer, | +	&esmt_c8_spinand_manufacturer, | ||||||
|  	&gigadevice_spinand_manufacturer, |  	&gigadevice_spinand_manufacturer, | ||||||
|  	¯onix_spinand_manufacturer, |  	¯onix_spinand_manufacturer, | ||||||
| @@ -134,9 +134,9 @@ Signed-off-by: Chuanhong Guo <gch981213@gmail.com> | |||||||
| --- a/include/linux/mtd/spinand.h | --- a/include/linux/mtd/spinand.h | ||||||
| +++ b/include/linux/mtd/spinand.h | +++ b/include/linux/mtd/spinand.h | ||||||
| @@ -260,6 +260,7 @@ struct spinand_manufacturer { | @@ -260,6 +260,7 @@ struct spinand_manufacturer { | ||||||
|  }; |  | ||||||
|   |   | ||||||
|  /* SPI NAND manufacturers */ |  /* SPI NAND manufacturers */ | ||||||
|  |  extern const struct spinand_manufacturer ato_spinand_manufacturer; | ||||||
| +extern const struct spinand_manufacturer esmt_c8_spinand_manufacturer; | +extern const struct spinand_manufacturer esmt_c8_spinand_manufacturer; | ||||||
|  extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; |  extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; | ||||||
|  extern const struct spinand_manufacturer macronix_spinand_manufacturer; |  extern const struct spinand_manufacturer macronix_spinand_manufacturer; | ||||||
|   | |||||||
| @@ -42,19 +42,19 @@ Submitted-by: Daniel Danzberger <daniel@dd-wrt.com> | |||||||
| +++ b/drivers/mtd/nand/spi/Makefile | +++ b/drivers/mtd/nand/spi/Makefile | ||||||
| @@ -1,3 +1,3 @@ | @@ -1,3 +1,3 @@ | ||||||
|  # SPDX-License-Identifier: GPL-2.0 |  # SPDX-License-Identifier: GPL-2.0 | ||||||
| -spinand-objs := core.o esmt.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o xtx.o | -spinand-objs := core.o ato.o esmt.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o xtx.o | ||||||
| +spinand-objs := core.o esmt.o etron.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o xtx.o | +spinand-objs := core.o ato.o esmt.o etron.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o xtx.o | ||||||
|  obj-$(CONFIG_MTD_SPI_NAND) += spinand.o |  obj-$(CONFIG_MTD_SPI_NAND) += spinand.o | ||||||
| --- a/drivers/mtd/nand/spi/core.c | --- a/drivers/mtd/nand/spi/core.c | ||||||
| +++ b/drivers/mtd/nand/spi/core.c | +++ b/drivers/mtd/nand/spi/core.c | ||||||
| @@ -908,6 +908,7 @@ static const struct nand_ops spinand_ops | @@ -908,6 +908,7 @@ static const struct nand_ops spinand_ops | ||||||
|  static const struct spinand_manufacturer *spinand_manufacturers[] = { |  static const struct spinand_manufacturer *spinand_manufacturers[] = { | ||||||
|  |  	&ato_spinand_manufacturer, | ||||||
|  	&esmt_c8_spinand_manufacturer, |  	&esmt_c8_spinand_manufacturer, | ||||||
|  	&gigadevice_spinand_manufacturer, |  | ||||||
| +	&etron_spinand_manufacturer, | +	&etron_spinand_manufacturer, | ||||||
|  |  	&gigadevice_spinand_manufacturer, | ||||||
|  	¯onix_spinand_manufacturer, |  	¯onix_spinand_manufacturer, | ||||||
|  	µn_spinand_manufacturer, |  	µn_spinand_manufacturer, | ||||||
|  	¶gon_spinand_manufacturer, |  | ||||||
| --- /dev/null | --- /dev/null | ||||||
| +++ b/drivers/mtd/nand/spi/etron.c | +++ b/drivers/mtd/nand/spi/etron.c | ||||||
| @@ -0,0 +1,98 @@ | @@ -0,0 +1,98 @@ | ||||||
|   | |||||||
| @@ -11,12 +11,13 @@ Signed-off-by: Joe Mullally <jwmullally@gmail.com> | |||||||
|  |  | ||||||
| --- a/drivers/mtd/spi-nor/xmc.c | --- a/drivers/mtd/spi-nor/xmc.c | ||||||
| +++ b/drivers/mtd/spi-nor/xmc.c | +++ b/drivers/mtd/spi-nor/xmc.c | ||||||
| @@ -12,6 +12,8 @@ static const struct flash_info xmc_parts | @@ -12,6 +12,9 @@ static const struct flash_info xmc_parts | ||||||
|  	/* XMC (Wuhan Xinxin Semiconductor Manufacturing Corp.) */ |  	{ "XM25QH64A", INFO(0x207017, 0, 64 * 1024, 128) | ||||||
|  	{ "XM25QH64A", INFO(0x207017, 0, 64 * 1024, 128, |  		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | | ||||||
|  			    SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, |  			      SPI_NOR_QUAD_READ) }, | ||||||
| +	{ "XM25QH64C", INFO(0x204017, 0, 64 * 1024, 128, | +	{ "XM25QH64C", INFO(0x204017, 0, 64 * 1024, 128) | ||||||
| +			    SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, | +		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | | ||||||
|  	{ "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256, | +			      SPI_NOR_QUAD_READ) }, | ||||||
|  			     SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, |  	{ "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256) | ||||||
|  	{ "XM25QH128C", INFO(0x204018, 0, 64 * 1024, 256, |  		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | | ||||||
|  |  			      SPI_NOR_QUAD_READ) }, | ||||||
|   | |||||||
| @@ -66,7 +66,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
| + | + | ||||||
| +	mutex_lock(&ubi_devices_mutex); | +	mutex_lock(&ubi_devices_mutex); | ||||||
| +	pr_notice("UBI: auto-attach mtd%d\n", mtd->index); | +	pr_notice("UBI: auto-attach mtd%d\n", mtd->index); | ||||||
| +	err = ubi_attach_mtd_dev(mtd, UBI_DEV_NUM_AUTO, 0, 0); | +	err = ubi_attach_mtd_dev(mtd, UBI_DEV_NUM_AUTO, 0, 0, false); | ||||||
| +	mutex_unlock(&ubi_devices_mutex); | +	mutex_unlock(&ubi_devices_mutex); | ||||||
| +	if (err < 0) { | +	if (err < 0) { | ||||||
| +		pr_err("UBI error: cannot attach mtd%d\n", mtd->index); | +		pr_err("UBI error: cannot attach mtd%d\n", mtd->index); | ||||||
|   | |||||||
| @@ -23,12 +23,12 @@ Signed-off-by: Nick Hainke <vincent@systemli.org> | |||||||
| --- a/drivers/mtd/spi-nor/macronix.c | --- a/drivers/mtd/spi-nor/macronix.c | ||||||
| +++ b/drivers/mtd/spi-nor/macronix.c | +++ b/drivers/mtd/spi-nor/macronix.c | ||||||
| @@ -41,7 +41,8 @@ static const struct flash_info macronix_ | @@ -41,7 +41,8 @@ static const struct flash_info macronix_ | ||||||
|  	{ "mx25l1606e",  INFO(0xc22015, 0, 64 * 1024,  32, SECT_4K) }, |  	{ "mx25l3255e",  INFO(0xc29e16, 0, 64 * 1024,  64) | ||||||
|  	{ "mx25l3205d",  INFO(0xc22016, 0, 64 * 1024,  64, SECT_4K) }, |  		NO_SFDP_FLAGS(SECT_4K) }, | ||||||
|  	{ "mx25l3255e",  INFO(0xc29e16, 0, 64 * 1024,  64, SECT_4K) }, |  	{ "mx25l6405d",  INFO(0xc22017, 0, 64 * 1024, 128) | ||||||
| -	{ "mx25l6405d",  INFO(0xc22017, 0, 64 * 1024, 128, SECT_4K) }, | -		NO_SFDP_FLAGS(SECT_4K) }, | ||||||
| +	{ "mx25l6405d",  INFO(0xc22017, 0, 64 * 1024, 128, SECT_4K | | +		FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_4BIT_BP) | ||||||
| +			      SPI_NOR_HAS_LOCK | SPI_NOR_4BIT_BP) }, | +		NO_SFDP_FLAGS(SECT_4K) }, | ||||||
|  	{ "mx25u2033e",  INFO(0xc22532, 0, 64 * 1024,   4, SECT_4K) }, |  	{ "mx25u2033e",  INFO(0xc22532, 0, 64 * 1024,   4) | ||||||
|  	{ "mx25u3235f",	 INFO(0xc22536, 0, 64 * 1024,  64, |  		NO_SFDP_FLAGS(SECT_4K) }, | ||||||
|  			      SECT_4K | SPI_NOR_DUAL_READ | |  	{ "mx25u3235f",	 INFO(0xc22536, 0, 64 * 1024,  64) | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  #include <net/net_namespace.h> |  #include <net/net_namespace.h> | ||||||
|  #ifdef CONFIG_SYSCTL |  #ifdef CONFIG_SYSCTL | ||||||
|  #include <linux/sysctl.h> |  #include <linux/sysctl.h> | ||||||
| @@ -462,6 +463,56 @@ static int ct_cpu_seq_show(struct seq_fi | @@ -462,6 +463,58 @@ static int ct_cpu_seq_show(struct seq_fi | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -47,7 +47,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +static int ct_file_write(struct file *file, char *buf, size_t count) | +static int ct_file_write(struct file *file, char *buf, size_t count) | ||||||
| +{ | +{ | ||||||
| +	struct seq_file *seq = file->private_data; | +	struct seq_file *seq = file->private_data; | ||||||
| +	struct net *net = seq_file_net(seq); | +	struct nf_ct_iter_data iter_data; | ||||||
| +	struct kill_request kr = { }; | +	struct kill_request kr = { }; | ||||||
| + | + | ||||||
| +	if (count == 0) | +	if (count == 0) | ||||||
| @@ -66,7 +66,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +			return -EINVAL; | +			return -EINVAL; | ||||||
| +	} | +	} | ||||||
| + | + | ||||||
| +	nf_ct_iterate_cleanup_net(net, kill_matching, &kr, 0, 0); | +	iter_data.net = seq_file_net(seq); | ||||||
|  | +	iter_data.data = &kr; | ||||||
|  | +	nf_ct_iterate_cleanup_net(kill_matching, &iter_data); | ||||||
| + | + | ||||||
| +	return 0; | +	return 0; | ||||||
| +} | +} | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/include/linux/skbuff.h | --- a/include/linux/skbuff.h | ||||||
| +++ b/include/linux/skbuff.h | +++ b/include/linux/skbuff.h | ||||||
| @@ -2821,7 +2821,7 @@ static inline int pskb_network_may_pull( | @@ -2782,7 +2782,7 @@ static inline int pskb_network_may_pull( | ||||||
|   * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8) |   * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8) | ||||||
|   */ |   */ | ||||||
|  #ifndef NET_SKB_PAD |  #ifndef NET_SKB_PAD | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/include/linux/netdevice.h | --- a/include/linux/netdevice.h | ||||||
| +++ b/include/linux/netdevice.h | +++ b/include/linux/netdevice.h | ||||||
| @@ -2098,6 +2098,8 @@ struct net_device { | @@ -2075,6 +2075,8 @@ struct net_device { | ||||||
|  	struct netdev_hw_addr_list	mc; |  	struct netdev_hw_addr_list	mc; | ||||||
|  	struct netdev_hw_addr_list	dev_addrs; |  	struct netdev_hw_addr_list	dev_addrs; | ||||||
|   |   | ||||||
| @@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  #endif |  #endif | ||||||
| --- a/include/linux/skbuff.h | --- a/include/linux/skbuff.h | ||||||
| +++ b/include/linux/skbuff.h | +++ b/include/linux/skbuff.h | ||||||
| @@ -893,6 +893,7 @@ struct sk_buff { | @@ -890,6 +890,7 @@ struct sk_buff { | ||||||
|  #ifdef CONFIG_IPV6_NDISC_NODETYPE |  #ifdef CONFIG_IPV6_NDISC_NODETYPE | ||||||
|  	__u8			ndisc_nodetype:2; |  	__u8			ndisc_nodetype:2; | ||||||
|  #endif |  #endif | ||||||
| @@ -30,9 +30,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  	__u8			ipvs_property:1; |  	__u8			ipvs_property:1; | ||||||
|  	__u8			inner_protocol_type:1; |  	__u8			inner_protocol_type:1; | ||||||
| --- a/net/core/dev.c | --- a/net/core/gro.c | ||||||
| +++ b/net/core/dev.c | +++ b/net/core/gro.c | ||||||
| @@ -6065,6 +6065,9 @@ static enum gro_result dev_gro_receive(s | @@ -6062,6 +6062,9 @@ static enum gro_result dev_gro_receive(s | ||||||
|  	int same_flow; |  	int same_flow; | ||||||
|  	int grow; |  	int grow; | ||||||
|   |   | ||||||
| @@ -42,7 +42,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	if (netif_elide_gro(skb->dev)) |  	if (netif_elide_gro(skb->dev)) | ||||||
|  		goto normal; |  		goto normal; | ||||||
|   |   | ||||||
| @@ -8079,6 +8082,48 @@ static void __netdev_adjacent_dev_unlink | --- a/net/core/dev.c | ||||||
|  | +++ b/net/core/dev.c | ||||||
|  | @@ -8076,6 +8079,48 @@ static void __netdev_adjacent_dev_unlink | ||||||
|  					   &upper_dev->adj_list.lower); |  					   &upper_dev->adj_list.lower); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -91,7 +93,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  static int __netdev_upper_dev_link(struct net_device *dev, |  static int __netdev_upper_dev_link(struct net_device *dev, | ||||||
|  				   struct net_device *upper_dev, bool master, |  				   struct net_device *upper_dev, bool master, | ||||||
|  				   void *upper_priv, void *upper_info, |  				   void *upper_priv, void *upper_info, | ||||||
| @@ -8130,6 +8175,7 @@ static int __netdev_upper_dev_link(struc | @@ -8127,6 +8172,7 @@ static int __netdev_upper_dev_link(struc | ||||||
|  	if (ret) |  	if (ret) | ||||||
|  		return ret; |  		return ret; | ||||||
|   |   | ||||||
| @@ -99,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, |  	ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, | ||||||
|  					    &changeupper_info.info); |  					    &changeupper_info.info); | ||||||
|  	ret = notifier_to_errno(ret); |  	ret = notifier_to_errno(ret); | ||||||
| @@ -8226,6 +8272,7 @@ static void __netdev_upper_dev_unlink(st | @@ -8223,6 +8269,7 @@ static void __netdev_upper_dev_unlink(st | ||||||
|   |   | ||||||
|  	__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev); |  	__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev); | ||||||
|   |   | ||||||
| @@ -107,7 +109,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, |  	call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, | ||||||
|  				      &changeupper_info.info); |  				      &changeupper_info.info); | ||||||
|   |   | ||||||
| @@ -9045,6 +9092,7 @@ int dev_set_mac_address(struct net_devic | @@ -9042,6 +9089,7 @@ int dev_set_mac_address(struct net_devic | ||||||
|  	if (err) |  	if (err) | ||||||
|  		return err; |  		return err; | ||||||
|  	dev->addr_assign_type = NET_ADDR_SET; |  	dev->addr_assign_type = NET_ADDR_SET; | ||||||
|   | |||||||
| @@ -10,9 +10,9 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
|  |  | ||||||
| --- a/net/netfilter/nf_flow_table_core.c | --- a/net/netfilter/nf_flow_table_core.c | ||||||
| +++ b/net/netfilter/nf_flow_table_core.c | +++ b/net/netfilter/nf_flow_table_core.c | ||||||
| @@ -613,13 +613,41 @@ void nf_flow_table_free(struct nf_flowta | @@ -608,28 +608,52 @@ void nf_flow_table_free(struct nf_flowta | ||||||
|  } |  	.exit_batch = nf_flow_table_pernet_exit, | ||||||
|  EXPORT_SYMBOL_GPL(nf_flow_table_free); |  }; | ||||||
|   |   | ||||||
| +static int nf_flow_table_netdev_event(struct notifier_block *this, | +static int nf_flow_table_netdev_event(struct notifier_block *this, | ||||||
| +				      unsigned long event, void *ptr) | +				      unsigned long event, void *ptr) | ||||||
| @@ -33,24 +33,34 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> | |||||||
| + | + | ||||||
|  static int __init nf_flow_table_module_init(void) |  static int __init nf_flow_table_module_init(void) | ||||||
|  { |  { | ||||||
| -	return nf_flow_table_offload_init(); |  	int ret; | ||||||
| +	int ret; |   | ||||||
| + |  	ret = register_pernet_subsys(&nf_flow_table_net_ops); | ||||||
| +	ret = nf_flow_table_offload_init(); |  	if (ret < 0) | ||||||
| +	if (ret) |  		return ret; | ||||||
| +		return ret; |   | ||||||
|  |  	ret = nf_flow_table_offload_init(); | ||||||
|  |  	if (ret) | ||||||
|  |  		goto out_offload; | ||||||
| + | + | ||||||
| +	ret = register_netdevice_notifier(&flow_offload_netdev_notifier); | +	ret = register_netdevice_notifier(&flow_offload_netdev_notifier); | ||||||
| +	if (ret) | +	if (ret) | ||||||
| +		nf_flow_table_offload_exit(); | +		goto out_offload_init; | ||||||
| + |   | ||||||
| +	return ret; |  	return 0; | ||||||
|  |   | ||||||
|  | +out_offload_init: | ||||||
|  | +	nf_flow_table_offload_exit(); | ||||||
|  |  out_offload: | ||||||
|  |  	unregister_pernet_subsys(&nf_flow_table_net_ops); | ||||||
|  |  	return ret; | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  static void __exit nf_flow_table_module_exit(void) |  static void __exit nf_flow_table_module_exit(void) | ||||||
|  { |  { | ||||||
| +	unregister_netdevice_notifier(&flow_offload_netdev_notifier); | +	unregister_netdevice_notifier(&flow_offload_netdev_notifier); | ||||||
|  	nf_flow_table_offload_exit(); |  	nf_flow_table_offload_exit(); | ||||||
|  | 	unregister_pernet_subsys(&nf_flow_table_net_ops); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| --- a/net/netfilter/nft_flow_offload.c | --- a/net/netfilter/nft_flow_offload.c | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c | --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||||
| @@ -2992,8 +2992,8 @@ static irqreturn_t mtk_handle_irq_rx(int | @@ -2443,8 +2443,8 @@ static irqreturn_t mtk_handle_irq_rx(int | ||||||
|   |   | ||||||
|  	eth->rx_events++; |  	eth->rx_events++; | ||||||
|  	if (likely(napi_schedule_prep(ð->rx_napi))) { |  	if (likely(napi_schedule_prep(ð->rx_napi))) { | ||||||
| @@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	return IRQ_HANDLED; |  	return IRQ_HANDLED; | ||||||
| @@ -3005,8 +3005,8 @@ static irqreturn_t mtk_handle_irq_tx(int | @@ -2456,8 +2456,8 @@ static irqreturn_t mtk_handle_irq_tx(int | ||||||
|   |   | ||||||
|  	eth->tx_events++; |  	eth->tx_events++; | ||||||
|  	if (likely(napi_schedule_prep(ð->tx_napi))) { |  	if (likely(napi_schedule_prep(ð->tx_napi))) { | ||||||
| @@ -30,12 +30,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	return IRQ_HANDLED; |  	return IRQ_HANDLED; | ||||||
| @@ -4673,6 +4673,8 @@ static int mtk_probe(struct platform_dev | @@ -3623,6 +3623,8 @@ static int mtk_probe(struct platform_dev | ||||||
|  	 * for NAPI to work |  	 * for NAPI to work | ||||||
|  	 */ |  	 */ | ||||||
|  	init_dummy_netdev(ð->dummy_dev); |  	init_dummy_netdev(ð->dummy_dev); | ||||||
| +	eth->dummy_dev.threaded = 1; | +	eth->dummy_dev.threaded = 1; | ||||||
| +	strcpy(eth->dummy_dev.name, "mtk_eth"); | +	strcpy(eth->dummy_dev.name, "mtk_eth"); | ||||||
|  	netif_napi_add(ð->dummy_dev, ð->tx_napi, mtk_napi_tx, |  	netif_napi_add(ð->dummy_dev, ð->tx_napi, mtk_napi_tx); | ||||||
|  		       NAPI_POLL_WEIGHT); |  	netif_napi_add(ð->dummy_dev, ð->rx_napi, mtk_napi_rx); | ||||||
|  	netif_napi_add(ð->dummy_dev, ð->rx_napi, mtk_napi_rx, |   | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  |  | ||||||
| --- a/drivers/net/phy/phy_device.c | --- a/drivers/net/phy/phy_device.c | ||||||
| +++ b/drivers/net/phy/phy_device.c | +++ b/drivers/net/phy/phy_device.c | ||||||
| @@ -1748,6 +1748,9 @@ void phy_detach(struct phy_device *phyde | @@ -1738,6 +1738,9 @@ void phy_detach(struct phy_device *phyde | ||||||
|  	struct module *ndev_owner = NULL; |  	struct module *ndev_owner = NULL; | ||||||
|  	struct mii_bus *bus; |  	struct mii_bus *bus; | ||||||
|   |   | ||||||
| @@ -23,7 +23,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> | |||||||
|  			sysfs_remove_link(&dev->dev.kobj, "phydev"); |  			sysfs_remove_link(&dev->dev.kobj, "phydev"); | ||||||
| --- a/include/linux/phy.h | --- a/include/linux/phy.h | ||||||
| +++ b/include/linux/phy.h | +++ b/include/linux/phy.h | ||||||
| @@ -823,6 +823,12 @@ struct phy_driver { | @@ -789,6 +789,12 @@ struct phy_driver { | ||||||
|  	/** @handle_interrupt: Override default interrupt handling */ |  	/** @handle_interrupt: Override default interrupt handling */ | ||||||
|  	irqreturn_t (*handle_interrupt)(struct phy_device *phydev); |  	irqreturn_t (*handle_interrupt)(struct phy_device *phydev); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -15,10 +15,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| --- a/include/linux/if_bridge.h | --- a/include/linux/if_bridge.h | ||||||
| +++ b/include/linux/if_bridge.h | +++ b/include/linux/if_bridge.h | ||||||
| @@ -58,6 +58,7 @@ struct br_ip_list { | @@ -58,6 +58,7 @@ struct br_ip_list { | ||||||
|  #define BR_MRP_LOST_CONT	BIT(18) |  | ||||||
|  #define BR_MRP_LOST_IN_CONT	BIT(19) |  #define BR_MRP_LOST_IN_CONT	BIT(19) | ||||||
|  #define BR_TX_FWD_OFFLOAD	BIT(20) |  #define BR_TX_FWD_OFFLOAD	BIT(20) | ||||||
| +#define BR_BPDU_FILTER		BIT(21) |  #define BR_PORT_LOCKED		BIT(21) | ||||||
|  | +#define BR_BPDU_FILTER		BIT(22) | ||||||
|   |   | ||||||
|  #define BR_DEFAULT_AGEING_TIME	(300 * HZ) |  #define BR_DEFAULT_AGEING_TIME	(300 * HZ) | ||||||
|   |   | ||||||
| @@ -107,9 +107,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| --- a/include/uapi/linux/if_link.h | --- a/include/uapi/linux/if_link.h | ||||||
| +++ b/include/uapi/linux/if_link.h | +++ b/include/uapi/linux/if_link.h | ||||||
| @@ -536,6 +536,7 @@ enum { | @@ -536,6 +536,7 @@ enum { | ||||||
|  	IFLA_BRPORT_MRP_IN_OPEN, |  | ||||||
|  	IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT, |  	IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT, | ||||||
|  	IFLA_BRPORT_MCAST_EHT_HOSTS_CNT, |  	IFLA_BRPORT_MCAST_EHT_HOSTS_CNT, | ||||||
|  |  	IFLA_BRPORT_LOCKED, | ||||||
| +	IFLA_BRPORT_BPDU_FILTER, | +	IFLA_BRPORT_BPDU_FILTER, | ||||||
|  	__IFLA_BRPORT_MAX |  	__IFLA_BRPORT_MAX | ||||||
|  }; |  }; | ||||||
| @@ -117,19 +117,19 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| --- a/net/bridge/br_netlink.c | --- a/net/bridge/br_netlink.c | ||||||
| +++ b/net/bridge/br_netlink.c | +++ b/net/bridge/br_netlink.c | ||||||
| @@ -184,6 +184,7 @@ static inline size_t br_port_info_size(v | @@ -184,6 +184,7 @@ static inline size_t br_port_info_size(v | ||||||
|  		+ nla_total_size(1)	/* IFLA_BRPORT_VLAN_TUNNEL */ |  | ||||||
|  		+ nla_total_size(1)	/* IFLA_BRPORT_NEIGH_SUPPRESS */ |  		+ nla_total_size(1)	/* IFLA_BRPORT_NEIGH_SUPPRESS */ | ||||||
|  		+ nla_total_size(1)	/* IFLA_BRPORT_ISOLATED */ |  		+ nla_total_size(1)	/* IFLA_BRPORT_ISOLATED */ | ||||||
|  |  		+ nla_total_size(1)	/* IFLA_BRPORT_LOCKED */ | ||||||
| +		+ nla_total_size(1)	/* IFLA_BRPORT_BPDU_FILTER */ | +		+ nla_total_size(1)	/* IFLA_BRPORT_BPDU_FILTER */ | ||||||
|  		+ nla_total_size(sizeof(struct ifla_bridge_id))	/* IFLA_BRPORT_ROOT_ID */ |  		+ nla_total_size(sizeof(struct ifla_bridge_id))	/* IFLA_BRPORT_ROOT_ID */ | ||||||
|  		+ nla_total_size(sizeof(struct ifla_bridge_id))	/* IFLA_BRPORT_BRIDGE_ID */ |  		+ nla_total_size(sizeof(struct ifla_bridge_id))	/* IFLA_BRPORT_BRIDGE_ID */ | ||||||
|  		+ nla_total_size(sizeof(u16))	/* IFLA_BRPORT_DESIGNATED_PORT */ |  		+ nla_total_size(sizeof(u16))	/* IFLA_BRPORT_DESIGNATED_PORT */ | ||||||
| @@ -269,7 +270,8 @@ static int br_port_fill_attrs(struct sk_ | @@ -269,7 +270,8 @@ static int br_port_fill_attrs(struct sk_ | ||||||
|  							  BR_MRP_LOST_CONT)) || |  | ||||||
|  	    nla_put_u8(skb, IFLA_BRPORT_MRP_IN_OPEN, |  	    nla_put_u8(skb, IFLA_BRPORT_MRP_IN_OPEN, | ||||||
|  		       !!(p->flags & BR_MRP_LOST_IN_CONT)) || |  		       !!(p->flags & BR_MRP_LOST_IN_CONT)) || | ||||||
| -	    nla_put_u8(skb, IFLA_BRPORT_ISOLATED, !!(p->flags & BR_ISOLATED))) |  	    nla_put_u8(skb, IFLA_BRPORT_ISOLATED, !!(p->flags & BR_ISOLATED)) || | ||||||
| +	    nla_put_u8(skb, IFLA_BRPORT_ISOLATED, !!(p->flags & BR_ISOLATED)) || | -	    nla_put_u8(skb, IFLA_BRPORT_LOCKED, !!(p->flags & BR_PORT_LOCKED))) | ||||||
|  | +	    nla_put_u8(skb, IFLA_BRPORT_LOCKED, !!(p->flags & BR_PORT_LOCKED)) || | ||||||
| +	    nla_put_u8(skb, IFLA_BRPORT_BPDU_FILTER, !!(p->flags & BR_BPDU_FILTER))) | +	    nla_put_u8(skb, IFLA_BRPORT_BPDU_FILTER, !!(p->flags & BR_BPDU_FILTER))) | ||||||
|  		return -EMSGSIZE; |  		return -EMSGSIZE; | ||||||
|   |   | ||||||
| @@ -143,9 +143,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  /* Change the state of the port and notify spanning tree */ |  /* Change the state of the port and notify spanning tree */ | ||||||
| @@ -893,6 +896,7 @@ static int br_setport(struct net_bridge_ | @@ -893,6 +896,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_NEIGH_SUPPRESS, BR_NEIGH_SUPPRESS); | ||||||
|  	br_set_port_flag(p, tb, IFLA_BRPORT_ISOLATED, BR_ISOLATED); |  	br_set_port_flag(p, tb, IFLA_BRPORT_ISOLATED, BR_ISOLATED); | ||||||
|  |  	br_set_port_flag(p, tb, IFLA_BRPORT_LOCKED, BR_PORT_LOCKED); | ||||||
| +	br_set_port_flag(p, tb, IFLA_BRPORT_BPDU_FILTER, BR_BPDU_FILTER); | +	br_set_port_flag(p, tb, IFLA_BRPORT_BPDU_FILTER, BR_BPDU_FILTER); | ||||||
|   |   | ||||||
|  	changed_mask = old_flags ^ p->flags; |  	changed_mask = old_flags ^ p->flags; | ||||||
| @@ -153,7 +153,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| --- a/net/core/rtnetlink.c | --- a/net/core/rtnetlink.c | ||||||
| +++ b/net/core/rtnetlink.c | +++ b/net/core/rtnetlink.c | ||||||
| @@ -55,7 +55,7 @@ | @@ -55,7 +55,7 @@ | ||||||
|  #include <net/net_namespace.h> |  #include "dev.h" | ||||||
|   |   | ||||||
|  #define RTNL_MAX_TYPE		50 |  #define RTNL_MAX_TYPE		50 | ||||||
| -#define RTNL_SLAVE_MAX_TYPE	40 | -#define RTNL_SLAVE_MAX_TYPE	40 | ||||||
|   | |||||||
| @@ -167,9 +167,9 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov | |||||||
|  { |  { | ||||||
|  	ppe_set(ppe, MTK_PPE_CACHE_CTL, MTK_PPE_CACHE_CTL_CLEAR); |  	ppe_set(ppe, MTK_PPE_CACHE_CTL, MTK_PPE_CACHE_CTL_CLEAR); | ||||||
| @@ -464,6 +506,13 @@ __mtk_foe_entry_clear(struct mtk_ppe *pp | @@ -464,6 +506,13 @@ __mtk_foe_entry_clear(struct mtk_ppe *pp | ||||||
|  		hwe->ib1 &= ~MTK_FOE_IB1_STATE; |  | ||||||
|  		hwe->ib1 |= FIELD_PREP(MTK_FOE_IB1_STATE, MTK_FOE_STATE_INVALID); |  		hwe->ib1 |= FIELD_PREP(MTK_FOE_IB1_STATE, MTK_FOE_STATE_INVALID); | ||||||
|  		dma_wmb(); |  		dma_wmb(); | ||||||
|  |  		mtk_ppe_cache_clear(ppe); | ||||||
| +		if (ppe->accounting) { | +		if (ppe->accounting) { | ||||||
| +			struct mtk_foe_accounting *acct; | +			struct mtk_foe_accounting *acct; | ||||||
| + | + | ||||||
| @@ -335,10 +335,10 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov | |||||||
| -struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, | -struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, | ||||||
| -			     int version, int index); | -			     int version, int index); | ||||||
| +struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, int index); | +struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, int index); | ||||||
|  |  void mtk_ppe_deinit(struct mtk_eth *eth); | ||||||
|  void mtk_ppe_start(struct mtk_ppe *ppe); |  void mtk_ppe_start(struct mtk_ppe *ppe); | ||||||
|  int mtk_ppe_stop(struct mtk_ppe *ppe); |  int mtk_ppe_stop(struct mtk_ppe *ppe); | ||||||
|  int mtk_ppe_prepare_reset(struct mtk_ppe *ppe); | @@ -354,5 +373,7 @@ int mtk_foe_entry_commit(struct mtk_ppe | ||||||
| @@ -358,5 +376,7 @@ int mtk_foe_entry_commit(struct mtk_ppe |  | ||||||
|  void mtk_foe_entry_clear(struct mtk_ppe *ppe, struct mtk_flow_entry *entry); |  void mtk_foe_entry_clear(struct mtk_ppe *ppe, struct mtk_flow_entry *entry); | ||||||
|  int mtk_foe_entry_idle_time(struct mtk_ppe *ppe, struct mtk_flow_entry *entry); |  int mtk_foe_entry_idle_time(struct mtk_ppe *ppe, struct mtk_flow_entry *entry); | ||||||
|  int mtk_ppe_debugfs_init(struct mtk_ppe *ppe, int index); |  int mtk_ppe_debugfs_init(struct mtk_ppe *ppe, int index); | ||||||
|   | |||||||
| @@ -78,9 +78,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|   |   | ||||||
|  static void mtk_ppe_cache_clear(struct mtk_ppe *ppe) |  static void mtk_ppe_cache_clear(struct mtk_ppe *ppe) | ||||||
| @@ -508,13 +523,6 @@ __mtk_foe_entry_clear(struct mtk_ppe *pp | @@ -508,13 +523,6 @@ __mtk_foe_entry_clear(struct mtk_ppe *pp | ||||||
|  		hwe->ib1 &= ~MTK_FOE_IB1_STATE; |  | ||||||
|  		hwe->ib1 |= FIELD_PREP(MTK_FOE_IB1_STATE, MTK_FOE_STATE_INVALID); |  		hwe->ib1 |= FIELD_PREP(MTK_FOE_IB1_STATE, MTK_FOE_STATE_INVALID); | ||||||
|  		dma_wmb(); |  		dma_wmb(); | ||||||
|  |  		mtk_ppe_cache_clear(ppe); | ||||||
| -		if (ppe->accounting) { | -		if (ppe->accounting) { | ||||||
| -			struct mtk_foe_accounting *acct; | -			struct mtk_foe_accounting *acct; | ||||||
| - | - | ||||||
|   | |||||||
| @@ -31,9 +31,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| --- a/net/core/dev.c | --- a/net/core/dev.c | ||||||
| +++ b/net/core/dev.c | +++ b/net/core/dev.c | ||||||
| @@ -4574,7 +4574,7 @@ static int rps_ipi_queued(struct softnet | @@ -4574,7 +4574,7 @@ static int rps_ipi_queued(struct softnet | ||||||
|  #ifdef CONFIG_RPS |  | ||||||
|  	struct softnet_data *mysd = this_cpu_ptr(&softnet_data); |  	struct softnet_data *mysd = this_cpu_ptr(&softnet_data); | ||||||
|   |   | ||||||
|  |  #ifdef CONFIG_RPS | ||||||
| -	if (sd != mysd) { | -	if (sd != mysd) { | ||||||
| +	if (sd != mysd && !test_bit(NAPI_STATE_THREADED, &sd->backlog.state)) { | +	if (sd != mysd && !test_bit(NAPI_STATE_THREADED, &sd->backlog.state)) { | ||||||
|  		sd->rps_ipi_next = mysd->rps_ipi_list; |  		sd->rps_ipi_next = mysd->rps_ipi_list; | ||||||
| @@ -48,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	struct sk_buff *skb, *tmp; |  	struct sk_buff *skb, *tmp; | ||||||
|  	struct softnet_data *sd; |  	struct softnet_data *sd; | ||||||
|   |   | ||||||
| @@ -5770,9 +5772,18 @@ static void flush_backlog(struct work_st | @@ -5770,8 +5772,17 @@ static void flush_backlog(struct work_st | ||||||
|  			input_queue_head_incr(sd); |  			input_queue_head_incr(sd); | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
| @@ -58,8 +58,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +			 !skb_queue_empty_lockless(&sd->process_queue); | +			 !skb_queue_empty_lockless(&sd->process_queue); | ||||||
| +	if (flush_processq) | +	if (flush_processq) | ||||||
| +		process_queue_empty = sd->process_queue_empty; | +		process_queue_empty = sd->process_queue_empty; | ||||||
|  	rps_unlock(sd); |  	rps_unlock_irq_enable(sd); | ||||||
|  	local_irq_enable(); |  | ||||||
|   |   | ||||||
| +	if (threaded) | +	if (threaded) | ||||||
| +		goto out; | +		goto out; | ||||||
| @@ -67,7 +66,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	skb_queue_walk_safe(&sd->process_queue, skb, tmp) { |  	skb_queue_walk_safe(&sd->process_queue, skb, tmp) { | ||||||
|  		if (skb->dev->reg_state == NETREG_UNREGISTERING) { |  		if (skb->dev->reg_state == NETREG_UNREGISTERING) { | ||||||
|  			__skb_unlink(skb, &sd->process_queue); |  			__skb_unlink(skb, &sd->process_queue); | ||||||
| @@ -5780,7 +5791,18 @@ static void flush_backlog(struct work_st | @@ -5780,7 +5791,16 @@ static void flush_backlog(struct work_st | ||||||
|  			input_queue_head_incr(sd); |  			input_queue_head_incr(sd); | ||||||
|  		} |  		} | ||||||
|  	} |  	} | ||||||
| @@ -77,19 +76,17 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| + | + | ||||||
| +	while (flush_processq) { | +	while (flush_processq) { | ||||||
| +		msleep(1); | +		msleep(1); | ||||||
| +		local_irq_disable(); | +		rps_lock_irq_disable(sd); | ||||||
| +		rps_lock(sd); |  | ||||||
| +		flush_processq = process_queue_empty == sd->process_queue_empty; | +		flush_processq = process_queue_empty == sd->process_queue_empty; | ||||||
| +		rps_unlock(sd); | +		rps_unlock_irq_enable(sd); | ||||||
| +		local_irq_enable(); |  | ||||||
| +	} | +	} | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  static bool flush_required(int cpu) |  static bool flush_required(int cpu) | ||||||
| @@ -6463,6 +6485,7 @@ static int process_backlog(struct napi_s | @@ -6463,6 +6485,7 @@ static int process_backlog(struct napi_s | ||||||
|  |  		} | ||||||
|  |  | ||||||
|  		local_irq_disable(); |  		rps_lock_irq_disable(sd); | ||||||
|  		rps_lock(sd); |  | ||||||
| +		sd->process_queue_empty++; | +		sd->process_queue_empty++; | ||||||
|  		if (skb_queue_empty(&sd->input_pkt_queue)) { |  		if (skb_queue_empty(&sd->input_pkt_queue)) { | ||||||
|  			/* |  			/* | ||||||
| @@ -104,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  			again = false; |  			again = false; | ||||||
|  		} else { |  		} else { | ||||||
|  			skb_queue_splice_tail_init(&sd->input_pkt_queue, |  			skb_queue_splice_tail_init(&sd->input_pkt_queue, | ||||||
| @@ -6889,6 +6913,57 @@ int dev_set_threaded(struct net_device * | @@ -6889,6 +6913,55 @@ int dev_set_threaded(struct net_device * | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(dev_set_threaded); |  EXPORT_SYMBOL(dev_set_threaded); | ||||||
|   |   | ||||||
| @@ -146,20 +143,18 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +		struct napi_struct *n = &sd->backlog; | +		struct napi_struct *n = &sd->backlog; | ||||||
| +		unsigned long flags; | +		unsigned long flags; | ||||||
| + | + | ||||||
| +		local_irq_save(flags); | +		rps_lock_irqsave(sd, &flags); | ||||||
| +		rps_lock(sd); |  | ||||||
| +		if (threaded) | +		if (threaded) | ||||||
| +			n->state |= NAPIF_STATE_THREADED; | +			n->state |= NAPIF_STATE_THREADED; | ||||||
| +		else | +		else | ||||||
| +			n->state &= ~NAPIF_STATE_THREADED; | +			n->state &= ~NAPIF_STATE_THREADED; | ||||||
| +		rps_unlock(sd); | +		rps_unlock_irq_restore(sd, &flags); | ||||||
| +		local_irq_restore(flags); |  | ||||||
| +	} | +	} | ||||||
| + | + | ||||||
| +	return err; | +	return err; | ||||||
| +} | +} | ||||||
| + | + | ||||||
|  void netif_napi_add(struct net_device *dev, struct napi_struct *napi, |  void netif_napi_add_weight(struct net_device *dev, struct napi_struct *napi, | ||||||
|  		    int (*poll)(struct napi_struct *, int), int weight) |  		    int (*poll)(struct napi_struct *, int), int weight) | ||||||
|  { |  { | ||||||
| @@ -11367,6 +11442,9 @@ static int dev_cpu_dead(unsigned int old | @@ -11367,6 +11442,9 @@ static int dev_cpu_dead(unsigned int old | ||||||
| @@ -187,8 +182,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  static int min_rcvbuf = SOCK_MIN_RCVBUF; |  static int min_rcvbuf = SOCK_MIN_RCVBUF; | ||||||
|  static int max_skb_frags = MAX_SKB_FRAGS; |  static int max_skb_frags = MAX_SKB_FRAGS; | ||||||
| +static int backlog_threaded; | +static int backlog_threaded; | ||||||
|  static long long_one __maybe_unused = 1; |   | ||||||
|  static long long_max __maybe_unused = LONG_MAX; |  static int net_msg_warn;	/* Unused, but still a sysctl */ | ||||||
|   |   | ||||||
| @@ -114,6 +115,23 @@ static int rps_sock_flow_sysctl(struct c | @@ -114,6 +115,23 @@ static int rps_sock_flow_sysctl(struct c | ||||||
|  } |  } | ||||||
|   | |||||||
| @@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  #endif  /*  __LINUX_USB_PCI_QUIRKS_H  */ |  #endif  /*  __LINUX_USB_PCI_QUIRKS_H  */ | ||||||
| --- a/include/linux/usb/hcd.h | --- a/include/linux/usb/hcd.h | ||||||
| +++ b/include/linux/usb/hcd.h | +++ b/include/linux/usb/hcd.h | ||||||
| @@ -498,7 +498,14 @@ extern int usb_hcd_pci_probe(struct pci_ | @@ -497,7 +497,14 @@ extern int usb_hcd_pci_probe(struct pci_ | ||||||
|  extern void usb_hcd_pci_remove(struct pci_dev *dev); |  extern void usb_hcd_pci_remove(struct pci_dev *dev); | ||||||
|  extern void usb_hcd_pci_shutdown(struct pci_dev *dev); |  extern void usb_hcd_pci_shutdown(struct pci_dev *dev); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -65,7 +65,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  /** |  /** | ||||||
|   *	ata_build_rw_tf - Build ATA taskfile for given read/write request |   *	ata_build_rw_tf - Build ATA taskfile for given read/write request | ||||||
|   *	@tf: Target ATA taskfile |   *	@tf: Target ATA taskfile | ||||||
| @@ -4580,6 +4593,9 @@ struct ata_queued_cmd *ata_qc_new_init(s | @@ -4576,6 +4589,9 @@ struct ata_queued_cmd *ata_qc_new_init(s | ||||||
|  		if (tag < 0) |  		if (tag < 0) | ||||||
|  			return NULL; |  			return NULL; | ||||||
|  	} |  	} | ||||||
| @@ -75,7 +75,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|   |   | ||||||
|  	qc = __ata_qc_from_tag(ap, tag); |  	qc = __ata_qc_from_tag(ap, tag); | ||||||
|  	qc->tag = qc->hw_tag = tag; |  	qc->tag = qc->hw_tag = tag; | ||||||
| @@ -5358,6 +5374,9 @@ struct ata_port *ata_port_alloc(struct a | @@ -5354,6 +5370,9 @@ struct ata_port *ata_port_alloc(struct a | ||||||
|  	ap->stats.unhandled_irq = 1; |  	ap->stats.unhandled_irq = 1; | ||||||
|  	ap->stats.idle_irq = 1; |  	ap->stats.idle_irq = 1; | ||||||
|  #endif |  #endif | ||||||
| @@ -85,7 +85,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  	ata_sff_port_init(ap); |  	ata_sff_port_init(ap); | ||||||
|   |   | ||||||
|  	return ap; |  	return ap; | ||||||
| @@ -5393,6 +5412,12 @@ static void ata_host_release(struct kref | @@ -5389,6 +5408,12 @@ static void ata_host_release(struct kref | ||||||
|   |   | ||||||
|  		kfree(ap->pmp_link); |  		kfree(ap->pmp_link); | ||||||
|  		kfree(ap->slave_link); |  		kfree(ap->slave_link); | ||||||
| @@ -98,7 +98,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org> | |||||||
|  		kfree(ap); |  		kfree(ap); | ||||||
|  		host->ports[i] = NULL; |  		host->ports[i] = NULL; | ||||||
|  	} |  	} | ||||||
| @@ -5799,7 +5824,23 @@ int ata_host_register(struct ata_host *h | @@ -5795,7 +5820,23 @@ int ata_host_register(struct ata_host *h | ||||||
|  		host->ports[i]->print_id = atomic_inc_return(&ata_print_id); |  		host->ports[i]->print_id = atomic_inc_return(&ata_print_id); | ||||||
|  		host->ports[i]->local_port_no = i + 1; |  		host->ports[i]->local_port_no = i + 1; | ||||||
|  	} |  	} | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ Signed-off-by: Marek Behún <kabel@kernel.org> | |||||||
|  |  | ||||||
| --- a/drivers/pci/controller/pci-aardvark.c | --- a/drivers/pci/controller/pci-aardvark.c | ||||||
| +++ b/drivers/pci/controller/pci-aardvark.c | +++ b/drivers/pci/controller/pci-aardvark.c | ||||||
| @@ -275,7 +275,6 @@ struct advk_pcie { | @@ -274,7 +274,6 @@ struct advk_pcie { | ||||||
|  	u8 wins_count; |  	u8 wins_count; | ||||||
|  	struct irq_domain *rp_irq_domain; |  	struct irq_domain *rp_irq_domain; | ||||||
|  	struct irq_domain *irq_domain; |  	struct irq_domain *irq_domain; | ||||||
| @@ -41,7 +41,7 @@ Signed-off-by: Marek Behún <kabel@kernel.org> | |||||||
|  	raw_spinlock_t irq_lock; |  	raw_spinlock_t irq_lock; | ||||||
|  	struct irq_domain *msi_domain; |  	struct irq_domain *msi_domain; | ||||||
|  	struct irq_domain *msi_inner_domain; |  	struct irq_domain *msi_inner_domain; | ||||||
| @@ -1345,14 +1344,19 @@ static void advk_pcie_irq_unmask(struct | @@ -1330,14 +1329,19 @@ static void advk_pcie_irq_unmask(struct | ||||||
|  	raw_spin_unlock_irqrestore(&pcie->irq_lock, flags); |  	raw_spin_unlock_irqrestore(&pcie->irq_lock, flags); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -63,7 +63,7 @@ Signed-off-by: Marek Behún <kabel@kernel.org> | |||||||
|  	irq_set_chip_data(virq, pcie); |  	irq_set_chip_data(virq, pcie); | ||||||
|   |   | ||||||
|  	return 0; |  	return 0; | ||||||
| @@ -1411,7 +1415,6 @@ static int advk_pcie_init_irq_domain(str | @@ -1396,7 +1400,6 @@ static int advk_pcie_init_irq_domain(str | ||||||
|  	struct device *dev = &pcie->pdev->dev; |  	struct device *dev = &pcie->pdev->dev; | ||||||
|  	struct device_node *node = dev->of_node; |  	struct device_node *node = dev->of_node; | ||||||
|  	struct device_node *pcie_intc_node; |  	struct device_node *pcie_intc_node; | ||||||
| @@ -71,7 +71,7 @@ Signed-off-by: Marek Behún <kabel@kernel.org> | |||||||
|  	int ret = 0; |  	int ret = 0; | ||||||
|   |   | ||||||
|  	raw_spin_lock_init(&pcie->irq_lock); |  	raw_spin_lock_init(&pcie->irq_lock); | ||||||
| @@ -1422,28 +1425,14 @@ static int advk_pcie_init_irq_domain(str | @@ -1407,28 +1410,14 @@ static int advk_pcie_init_irq_domain(str | ||||||
|  		return -ENODEV; |  		return -ENODEV; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org> | |||||||
|  	help |  	help | ||||||
| --- a/init/main.c | --- a/init/main.c | ||||||
| +++ b/init/main.c | +++ b/init/main.c | ||||||
| @@ -616,6 +616,29 @@ static inline void setup_nr_cpu_ids(void | @@ -615,6 +615,29 @@ static inline void setup_nr_cpu_ids(void | ||||||
|  static inline void smp_prepare_cpus(unsigned int maxcpus) { } |  static inline void smp_prepare_cpus(unsigned int maxcpus) { } | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
| @@ -61,7 +61,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org> | |||||||
|  /* |  /* | ||||||
|   * We need to store the untouched command line for future reference. |   * We need to store the untouched command line for future reference. | ||||||
|   * We also need to store the touched command line since the parameter |   * We also need to store the touched command line since the parameter | ||||||
| @@ -956,6 +979,7 @@ asmlinkage __visible void __init __no_sa | @@ -955,6 +978,7 @@ asmlinkage __visible void __init __no_sa | ||||||
|  	pr_notice("%s", linux_banner); |  	pr_notice("%s", linux_banner); | ||||||
|  	early_security_init(); |  	early_security_init(); | ||||||
|  	setup_arch(&command_line); |  	setup_arch(&command_line); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Christian Marangi
					Christian Marangi