generic: 6.1: manually refresh pending patches
authorChristian Marangi <ansuelsmth@gmail.com>
Tue, 18 Oct 2022 21:24:43 +0000 (23:24 +0200)
committerChristian Marangi <ansuelsmth@gmail.com>
Mon, 22 May 2023 20:28:14 +0000 (22:28 +0200)
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>
36 files changed:
target/linux/generic/pending-6.1/103-kbuild-export-SUBARCH.patch
target/linux/generic/pending-6.1/110-v6.3-0001-spidev-Add-Silicon-Labs-EM3581-device-compatible.patch
target/linux/generic/pending-6.1/110-v6.3-0002-spidev-Add-Silicon-Labs-SI3210-device-compatible.patch
target/linux/generic/pending-6.1/120-Fix-alloc_node_mem_map-with-ARCH_PFN_OFFSET-calcu.patch
target/linux/generic/pending-6.1/191-rtc-rs5c372-let_the_alarm_to_be_used_as_wakeup_source.patch
target/linux/generic/pending-6.1/203-kallsyms_uncompressed.patch
target/linux/generic/pending-6.1/270-platform-mikrotik-build-bits.patch
target/linux/generic/pending-6.1/400-mtd-mtdsplit-support.patch
target/linux/generic/pending-6.1/420-mtd-redboot_space.patch
target/linux/generic/pending-6.1/476-mtd-spi-nor-add-eon-en25q128.patch
target/linux/generic/pending-6.1/477-mtd-spi-nor-add-eon-en25qx128a.patch
target/linux/generic/pending-6.1/479-mtd-spi-nor-add-xtx-xt25f128b.patch
target/linux/generic/pending-6.1/481-mtd-spi-nor-add-support-for-Gigadevice-GD25D05.patch
target/linux/generic/pending-6.1/482-mtd-spi-nor-add-gd25q512.patch
target/linux/generic/pending-6.1/484-mtd-spi-nor-add-esmt-f25l16pa.patch
target/linux/generic/pending-6.1/485-mtd-spi-nor-add-xmc-xm25qh128c.patch
target/linux/generic/pending-6.1/486-01-mtd-spinand-add-support-for-ESMT-F50x1G41LB.patch
target/linux/generic/pending-6.1/487-mtd-spinand-Add-support-for-Etron-EM73D044VCx.patch
target/linux/generic/pending-6.1/488-mtd-spi-nor-add-xmc-xm25qh64c.patch
target/linux/generic/pending-6.1/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
target/linux/generic/pending-6.1/498-mtd-spi-nor-locking-support-for-MX25L6405D.patch
target/linux/generic/pending-6.1/530-jffs2_make_lzma_available.patch
target/linux/generic/pending-6.1/600-netfilter_conntrack_flush.patch
target/linux/generic/pending-6.1/655-increase_skb_pad.patch
target/linux/generic/pending-6.1/680-NET-skip-GRO-for-foreign-MAC-addresses.patch
target/linux/generic/pending-6.1/700-netfilter-nft_flow_offload-handle-netdevice-events-f.patch
target/linux/generic/pending-6.1/702-net-ethernet-mtk_eth_soc-enable-threaded-NAPI.patch
target/linux/generic/pending-6.1/703-phy-add-detach-callback-to-struct-phy_driver.patch
target/linux/generic/pending-6.1/710-bridge-add-knob-for-filtering-rx-tx-BPDU-pack.patch
target/linux/generic/pending-6.1/731-net-ethernet-mediatek-ppe-add-support-for-flow-accou.patch
target/linux/generic/pending-6.1/736-04-net-ethernet-mediatek-fix-ppe-flow-accounting-for-L2.patch
target/linux/generic/pending-6.1/760-net-core-add-optional-threading-for-backlog-processi.patch
target/linux/generic/pending-6.1/811-pci_disable_usb_common_quirks.patch
target/linux/generic/pending-6.1/834-ledtrig-libata.patch
target/linux/generic/pending-6.1/850-0023-PCI-aardvark-Make-main-irq_chip-structure-a-static-d.patch
target/linux/generic/pending-6.1/920-mangle_bootargs.patch

index 120b6e4cf897f874d1f2a4572491739e1ae2ff4c..513e394092afa5378b885b4eca697199ab1fb644 100644 (file)
@@ -10,12 +10,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/Makefile
 +++ b/Makefile
-@@ -534,7 +534,7 @@ KBUILD_LDFLAGS_MODULE :=
- KBUILD_LDFLAGS :=
- CLANG_FLAGS :=
+@@ -523,7 +523,7 @@ KBUILD_LDFLAGS_MODULE :=
+ # Allows the usage of unstable features in stable compilers.
+ export RUSTC_BOOTSTRAP := 1
  
 -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 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 PERL PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
- export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ ZSTD
index 5216d6a7068e104677ddf67f3932d1bb64be14b6..c2940b601bb697ab7c6684565f76cd4bcafd9f3c 100644 (file)
@@ -23,10 +23,10 @@ Signed-off-by: Vincent Tremblay <vincent@vtremblay.dev>
  };
  MODULE_DEVICE_TABLE(spi, spidev_spi_ids);
 @@ -705,6 +706,7 @@ static const struct of_device_id spidev_
-       { .compatible = "menlo,m53cpld" },
-       { .compatible = "cisco,spi-petra" },
-       { .compatible = "micron,spi-authenta" },
-+      { .compatible = "silabs,em3581" },
+       { .compatible = "menlo,m53cpld", .data = &spidev_of_check },
+       { .compatible = "cisco,spi-petra", .data = &spidev_of_check },
+       { .compatible = "micron,spi-authenta", .data = &spidev_of_check },
++      { .compatible = "silabs,em3581", .data = &spidev_of_check },
        {},
  };
  MODULE_DEVICE_TABLE(of, spidev_dt_ids);
index ffbed0c622bfcfe05d4380cc65dd9293d940cb57..d88e5106c17d6dc5e6c661150567511fbaffd12f 100644 (file)
@@ -23,10 +23,10 @@ Signed-off-by: Vincent Tremblay <vincent@vtremblay.dev>
  };
  MODULE_DEVICE_TABLE(spi, spidev_spi_ids);
 @@ -707,6 +708,7 @@ static const struct of_device_id spidev_
-       { .compatible = "cisco,spi-petra" },
-       { .compatible = "micron,spi-authenta" },
-       { .compatible = "silabs,em3581" },
-+      { .compatible = "silabs,si3210" },
+       { .compatible = "cisco,spi-petra", .data = &spidev_of_check },
+       { .compatible = "micron,spi-authenta", .data = &spidev_of_check },
+       { .compatible = "silabs,em3581", .data = &spidev_of_check },
++      { .compatible = "silabs,si3210", .data = &spidev_of_check },
        {},
  };
  MODULE_DEVICE_TABLE(of, spidev_dt_ids);
index ac5e3a69b80c65172407df7514c0f32239c78b86..4e347a467104254568d91dbd4c8f5d45005a2198 100644 (file)
@@ -71,7 +71,7 @@ Signed-off-by: Tobias Wolf <dev-NTEO@vplace.de>
 
 --- a/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)) {
                mem_map = NODE_DATA(0)->node_mem_map;
                if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
index 7e9d0e66c051e08d80273ebf1a1ef8dc37e9c6ec..a934af402ec6558ad2e390391f1fd74806052173 100644 (file)
@@ -58,12 +58,13 @@ Signed-off-by: Daniel González Cabanelas <dgcbueu@gmail.com>
        rs5c372->rtc = devm_rtc_device_register(&client->dev,
                                        rs5c372_driver.driver.name,
                                        &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)
                goto exit;
  
 +      /* 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;
  
index 930d0ff0fe426d50bc796e44905b2ea42e9cbc3e..bc9fdda9f1a68c0e01b16cc300ac5b7625b6a166 100644 (file)
@@ -95,22 +95,21 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        /* using the '\0' symbol last allows compress_symbols to use standard
         * fast string functions */
        for (i = 255; i >= 0; i--) {
-@@ -773,6 +783,8 @@ int main(int argc, char **argv)
-                               absolute_percpu = 1;
-                       else if (strcmp(argv[i], "--base-relative") == 0)
-                               base_relative = 1;
-+                      else if (strcmp(argv[i], "--uncompressed") == 0)
-+                              uncompressed = 1;
-                       else
-                               usage();
-               }
+@@ -773,6 +783,7 @@ int main(int argc, char **argv)
+                       {"all-symbols",     no_argument, &all_symbols,     1},
+                       {"absolute-percpu", no_argument, &absolute_percpu, 1},
+                       {"base-relative",   no_argument, &base_relative,   1},
++                      {"uncompressed",   no_argument, &uncompressed,   1},
+                       {},
+               };
 --- a/scripts/link-vmlinux.sh
 +++ b/scripts/link-vmlinux.sh
-@@ -257,6 +257,10 @@ kallsyms()
+@@ -266,6 +266,10 @@ kallsyms()
                kallsymopt="${kallsymopt} --base-relative"
        fi
  
-+      if [ -n "${CONFIG_KALLSYMS_UNCOMPRESSED}" ]; then
++      if is_enabled CONFIG_KALLSYMS_UNCOMPRESSED; then
 +              kallsymopt="${kallsymopt} --uncompressed"
 +      fi
 +
index 99f83bb2c4e97170036387f867970340e22079ff..f847db983a2f414bae211d5fdcde2d866c19699b 100644 (file)
@@ -17,9 +17,9 @@ Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
 --- a/drivers/platform/Kconfig
 +++ b/drivers/platform/Kconfig
 @@ -15,3 +15,5 @@ source "drivers/platform/mellanox/Kconfi
- source "drivers/platform/olpc/Kconfig"
  source "drivers/platform/surface/Kconfig"
+ source "drivers/platform/x86/Kconfig"
 +
 +source "drivers/platform/mikrotik/Kconfig"
 --- a/drivers/platform/Makefile
index 46ef15d127dfb686e4458fd5838c3eaec8aa2cd7..2360d6dcd0f446b992305015d7d34d032043ee2f 100644 (file)
@@ -289,7 +289,7 @@ Subject: [PATCH] mtd: mtdsplit support
  static inline uint32_t mtd_div_by_ws(uint64_t sz, struct mtd_info *mtd)
  {
        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 void put_mtd_device(struct mtd_info *mtd);
  
index 5518ea71dd51f9d9c908e750cccd816ce8778027..fee193659334a1b9bd19dd763c0d1fac48e7d109 100644 (file)
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/drivers/mtd/parsers/redboot.c
 +++ b/drivers/mtd/parsers/redboot.c
-@@ -278,14 +278,21 @@ nogood:
+@@ -277,14 +277,21 @@ nogood:
  #endif
                names += strlen(names) + 1;
  
index 9383e48856d91f97957a4aae4c163baa5bd37c94..4caf97fcf2b503d79ea8e52b4af5bf6a4ee58e08 100644 (file)
@@ -8,11 +8,12 @@ Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
 
 --- a/drivers/mtd/spi-nor/eon.c
 +++ b/drivers/mtd/spi-nor/eon.c
-@@ -25,6 +25,7 @@ static const struct flash_info eon_parts
-       { "en25q32b",   INFO(0x1c3016, 0, 64 * 1024,   64, 0) },
-       { "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) },
-       { "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) },
-+      { "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256, SECT_4K) },
-       { "en25q80a",   INFO(0x1c3014, 0, 64 * 1024,   16,
-                            SECT_4K | SPI_NOR_DUAL_READ) },
-       { "en25qh16",   INFO(0x1c7015, 0, 64 * 1024,   32,
+@@ -15,6 +15,8 @@ static const struct flash_info eon_parts
+       { "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128) },
+       { "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128)
+               NO_SFDP_FLAGS(SECT_4K) },
++      { "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256)
++              NO_SFDP_FLAGS(SECT_4K) },
+       { "en25q80a",   INFO(0x1c3014, 0, 64 * 1024,   16)
+               NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ) },
+       { "en25qh16",   INFO(0x1c7015, 0, 64 * 1024,   32)
index 3c579e55e34c4d64898d4b9d5f55e857fc1f658a..e94c836f62a0b12d37bd6f652dee9aff828e0cae 100644 (file)
@@ -12,10 +12,10 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
 --- a/drivers/mtd/spi-nor/eon.c
 +++ b/drivers/mtd/spi-nor/eon.c
 @@ -26,6 +26,7 @@ static const struct flash_info eon_parts
-       { "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) },
-       { "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) },
-       { "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256, SECT_4K) },
-+      { "en25qx128a", INFO(0x1c7118, 0, 64 * 1024, 256, 0) },
-       { "en25q80a",   INFO(0x1c3014, 0, 64 * 1024,   16,
-                            SECT_4K | SPI_NOR_DUAL_READ) },
-       { "en25qh16",   INFO(0x1c7015, 0, 64 * 1024,   32,
+               NO_SFDP_FLAGS(SECT_4K) },
+       { "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256)
+               NO_SFDP_FLAGS(SECT_4K) },
++      { "en25qx128a", INFO(0x1c7118, 0, 64 * 1024, 256) },
+       { "en25q80a",   INFO(0x1c3014, 0, 64 * 1024,   16)
+               NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ) },
+       { "en25qh16",   INFO(0x1c7015, 0, 64 * 1024,   32)
index 5a064b714bfdcd5b81f0345b6cb5945d15570017..8eb09596ad1323e04a4e791b1c42321ce88d518c 100644 (file)
@@ -31,17 +31,18 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/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                  += xilinx.o
  spi-nor-objs                  += xmc.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)     += controllers/
 --- /dev/null
 +++ b/drivers/mtd/spi-nor/xtx.c
-@@ -0,0 +1,15 @@
+@@ -0,0 +1,17 @@
 +// SPDX-License-Identifier: GPL-2.0
 +#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[] = {
 +      /* 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 = {
index c32cde559dbe770cde26753db9becb38189d0e6c..764dfd68cb3e40f960df7819306fc8ead0c2ca4e 100644 (file)
@@ -10,13 +10,14 @@ Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
 
 --- a/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[] = {
-+      { "gd25q05", INFO(0xc84010, 0, 64 * 1024,  1,
-+                        SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
-+                        SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) },
-       { "gd25q16", INFO(0xc84015, 0, 64 * 1024,  32,
-                         SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
-                         SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) },
+ static const struct flash_info gigadevice_nor_parts[] = {
++      { "gd25q05", INFO(0xc84010, 0, 64 * 1024,  1)
++              FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) 
++              NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ |
++                            SPI_NOR_QUAD_READ) },
+       { "gd25q16", INFO(0xc84015, 0, 64 * 1024,  32)
+               FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
+               NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ |
index 7c8b6862777814a1a5362a27c5f7e5756a9c4c1e..614263f190b17f3ce43b61d9fd85804fe9ff3487 100644 (file)
@@ -9,13 +9,15 @@ Subject: [PATCH] spi-nor/gigadevic: add gd25q512
 
 --- a/drivers/mtd/spi-nor/gigadevice.c
 +++ b/drivers/mtd/spi-nor/gigadevice.c
-@@ -53,6 +53,9 @@ static const struct flash_info gigadevic
-                          SPI_NOR_4B_OPCODES | SPI_NOR_HAS_LOCK |
-                          SPI_NOR_HAS_TB | SPI_NOR_TB_SR_BIT6)
+@@ -53,6 +53,11 @@ static const struct flash_info gigadevic
+               FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_TB_SR_BIT6)
+               FIXUP_FLAGS(SPI_NOR_4B_OPCODES)
                .fixups = &gd25q256_fixups },
-+      { "gd25q512", INFO(0xc84020, 0, 64 * 1024, 1024,
-+                         SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
-+                         SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_4B_OPCODES) },
++      { "gd25q512", INFO(0xc84020, 0, 64 * 1024, 1024)
++              FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
++              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 = {
index ab402e622a20f538d6c14f55b8ee96be738b36b1..d7223ae8c46c3b565088cf4de1b6a5401de05403 100644 (file)
@@ -12,12 +12,13 @@ flash.
 
 --- a/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[] = {
        /* ESMT */
-+      { "f25l16pa-2s", INFO(0x8c2115, 0, 64 * 1024, 32,
-+                         SECT_4K | SPI_NOR_HAS_LOCK) },
-       { "f25l32pa", INFO(0x8c2016, 0, 64 * 1024, 64,
-                          SECT_4K | SPI_NOR_HAS_LOCK | SPI_NOR_SWP_IS_VOLATILE) },
-       { "f25l32qa", INFO(0x8c4116, 0, 64 * 1024, 64,
++      { "f25l16pa-2s", INFO(0x8c2115, 0, 64 * 1024, 32)
++                      FLAGS(SPI_NOR_HAS_LOCK)
++                      NO_SFDP_FLAGS(SECT_4K) },
+       { "f25l32pa", INFO(0x8c2016, 0, 64 * 1024, 64)
+                       FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_SWP_IS_VOLATILE)
+                       NO_SFDP_FLAGS(SECT_4K) },
index 68e373ea2360d37c32dfc3f1337bef786b4f4158..4020a428bee20a9c296d3c3cdce48fa852bc2fad 100644 (file)
@@ -13,12 +13,13 @@ Datasheet available at https://www.xmcwh.com/uploads/435/XM25QH128C.pdf
 
 --- a/drivers/mtd/spi-nor/xmc.c
 +++ b/drivers/mtd/spi-nor/xmc.c
-@@ -14,6 +14,8 @@ static const struct flash_info xmc_parts
-                           SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
-       { "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256,
-                            SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
-+      { "XM25QH128C", INFO(0x204018, 0, 64 * 1024, 256,
-+                           SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
+@@ -14,6 +14,9 @@ static const struct flash_info xmc_parts
+       { "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256)
+               NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ |
+                             SPI_NOR_QUAD_READ) },
++      { "XM25QH128C", INFO(0x204018, 0, 64 * 1024, 256)
++              NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ |
++                            SPI_NOR_QUAD_READ) },
  };
  
  const struct spi_nor_manufacturer spi_nor_xmc = {
index d117cfe0a3a9cd5d891307027a3752528aa1d9c1..8191c3c61dca018f14fc032392c9caea873bec23 100644 (file)
@@ -26,15 +26,15 @@ Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
 +++ b/drivers/mtd/nand/spi/Makefile
 @@ -1,3 +1,3 @@
  # 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 esmt.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 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
 --- a/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[] = {
+       &ato_spinand_manufacturer,
 +      &esmt_c8_spinand_manufacturer,
        &gigadevice_spinand_manufacturer,
        &macronix_spinand_manufacturer,
@@ -134,9 +134,9 @@ Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
 --- a/include/linux/mtd/spinand.h
 +++ b/include/linux/mtd/spinand.h
 @@ -260,6 +260,7 @@ struct spinand_manufacturer {
- };
  
  /* 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 gigadevice_spinand_manufacturer;
  extern const struct spinand_manufacturer macronix_spinand_manufacturer;
index 7e20e14bb620ef2d09e500332b3b51f677fbe12c..00c20e37ca6d6a4a09f54bdec7e6712bb602ddd6 100644 (file)
@@ -42,19 +42,19 @@ Submitted-by: Daniel Danzberger <daniel@dd-wrt.com>
 +++ b/drivers/mtd/nand/spi/Makefile
 @@ -1,3 +1,3 @@
  # 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 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 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
 --- a/drivers/mtd/nand/spi/core.c
 +++ b/drivers/mtd/nand/spi/core.c
 @@ -908,6 +908,7 @@ static const struct nand_ops spinand_ops
  static const struct spinand_manufacturer *spinand_manufacturers[] = {
+       &ato_spinand_manufacturer,
        &esmt_c8_spinand_manufacturer,
-       &gigadevice_spinand_manufacturer,
 +      &etron_spinand_manufacturer,
+       &gigadevice_spinand_manufacturer,
        &macronix_spinand_manufacturer,
        &micron_spinand_manufacturer,
-       &paragon_spinand_manufacturer,
 --- /dev/null
 +++ b/drivers/mtd/nand/spi/etron.c
 @@ -0,0 +1,98 @@
index 236d1c2755fee25beecb744a2a0b00a2260ddf74..8c73b6031b7b5081fc21d1e3cf437aeaaaaf67f3 100644 (file)
@@ -11,12 +11,13 @@ Signed-off-by: Joe Mullally <jwmullally@gmail.com>
 
 --- a/drivers/mtd/spi-nor/xmc.c
 +++ b/drivers/mtd/spi-nor/xmc.c
-@@ -12,6 +12,8 @@ static const struct flash_info xmc_parts
-       /* XMC (Wuhan Xinxin Semiconductor Manufacturing Corp.) */
-       { "XM25QH64A", INFO(0x207017, 0, 64 * 1024, 128,
-                           SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
-+      { "XM25QH64C", INFO(0x204017, 0, 64 * 1024, 128,
-+                          SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
-       { "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256,
-                            SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
-       { "XM25QH128C", INFO(0x204018, 0, 64 * 1024, 256,
+@@ -12,6 +12,9 @@ static const struct flash_info xmc_parts
+       { "XM25QH64A", INFO(0x207017, 0, 64 * 1024, 128)
+               NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ |
+                             SPI_NOR_QUAD_READ) },
++      { "XM25QH64C", INFO(0x204017, 0, 64 * 1024, 128)
++              NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ |
++                            SPI_NOR_QUAD_READ) },
+       { "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256)
+               NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ |
+                             SPI_NOR_QUAD_READ) },
index 2751da541a0542df65382556a402b5a19da732a0..aa6700b0171a3085919624d4063397a1ad5369c3 100644 (file)
@@ -66,7 +66,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 +
 +      mutex_lock(&ubi_devices_mutex);
 +      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);
 +      if (err < 0) {
 +              pr_err("UBI error: cannot attach mtd%d\n", mtd->index);
index 81de7648760d1b993a4e46c56a213824a1f28662..6c480673c69daa9ece0e14d3e84b552fee222b4b 100644 (file)
@@ -23,12 +23,12 @@ Signed-off-by: Nick Hainke <vincent@systemli.org>
 --- a/drivers/mtd/spi-nor/macronix.c
 +++ b/drivers/mtd/spi-nor/macronix.c
 @@ -41,7 +41,8 @@ static const struct flash_info macronix_
-       { "mx25l1606e",  INFO(0xc22015, 0, 64 * 1024,  32, SECT_4K) },
-       { "mx25l3205d",  INFO(0xc22016, 0, 64 * 1024,  64, SECT_4K) },
-       { "mx25l3255e",  INFO(0xc29e16, 0, 64 * 1024,  64, SECT_4K) },
--      { "mx25l6405d",  INFO(0xc22017, 0, 64 * 1024, 128, SECT_4K) },
-+      { "mx25l6405d",  INFO(0xc22017, 0, 64 * 1024, 128, SECT_4K |
-+                            SPI_NOR_HAS_LOCK | SPI_NOR_4BIT_BP) },
-       { "mx25u2033e",  INFO(0xc22532, 0, 64 * 1024,   4, SECT_4K) },
-       { "mx25u3235f",  INFO(0xc22536, 0, 64 * 1024,  64,
-                             SECT_4K | SPI_NOR_DUAL_READ |
+       { "mx25l3255e",  INFO(0xc29e16, 0, 64 * 1024,  64)
+               NO_SFDP_FLAGS(SECT_4K) },
+       { "mx25l6405d",  INFO(0xc22017, 0, 64 * 1024, 128)
+-              NO_SFDP_FLAGS(SECT_4K) },
++              FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_4BIT_BP)
++              NO_SFDP_FLAGS(SECT_4K) },
+       { "mx25u2033e",  INFO(0xc22532, 0, 64 * 1024,   4)
+               NO_SFDP_FLAGS(SECT_4K) },
+       { "mx25u3235f",  INFO(0xc22536, 0, 64 * 1024,  64)
index ac784d0b0bb73df474f6c59c96391343f5bea73c..fd6ca784c0f9e3500948e570cb4882acab68f299 100644 (file)
@@ -356,7 +356,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +#endif
 --- /dev/null
 +++ b/include/linux/lzma/LzFind.h
-@@ -0,0 +1,98 @@
+@@ -0,0 +1,115 @@
 +/* LzFind.h -- Match finder for LZ algorithms
 +2009-04-22 : Igor Pavlov : Public domain */
 +
@@ -414,6 +414,11 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +
 +#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos)
 +
++int MatchFinder_NeedMove(CMatchFinder *p);
++Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p);
++void MatchFinder_MoveBlock(CMatchFinder *p);
++void MatchFinder_ReadIfRequired(CMatchFinder *p);
++
 +void MatchFinder_Construct(CMatchFinder *p);
 +
 +/* Conditions:
@@ -424,6 +429,12 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +    UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter,
 +    ISzAlloc *alloc);
 +void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc);
++void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems);
++void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue);
++
++UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son,
++    UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue,
++    UInt32 *distances, UInt32 maxLen);
 +
 +/*
 +Conditions:
@@ -450,6 +461,12 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +
 +void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable);
 +
++void MatchFinder_Init(CMatchFinder *p);
++UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
++UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
++void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
++void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
++
 +#ifdef __cplusplus
 +}
 +#endif
@@ -514,7 +531,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +#endif
 --- /dev/null
 +++ b/include/linux/lzma/LzmaDec.h
-@@ -0,0 +1,130 @@
+@@ -0,0 +1,231 @@
 +/* LzmaDec.h -- LZMA Decoder
 +2009-02-07 : Igor Pavlov : Public domain */
 +
@@ -548,6 +565,14 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  UInt32 dicSize;
 +} CLzmaProps;
 +
++/* LzmaProps_Decode - decodes properties
++Returns:
++  SZ_OK
++  SZ_ERROR_UNSUPPORTED - Unsupported properties
++*/
++
++SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size);
++
 +
 +/* ---------- LZMA Decoder state ---------- */
 +
@@ -579,6 +604,8 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +
 +#define LzmaDec_Construct(p) { (p)->dic = 0; (p)->probs = 0; }
 +
++void LzmaDec_Init(CLzmaDec *p);
++
 +/* There are two types of LZMA streams:
 +     0) Stream with end mark. That end mark adds about 6 bytes to compressed size.
 +     1) Stream without end mark. You must know exact uncompressed size to decompress such stream. */
@@ -615,6 +642,97 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +
 +/* ELzmaStatus is used only as output value for function call */
 +
++
++/* ---------- Interfaces ---------- */
++
++/* There are 3 levels of interfaces:
++     1) Dictionary Interface
++     2) Buffer Interface
++     3) One Call Interface
++   You can select any of these interfaces, but don't mix functions from different
++   groups for same object. */
++
++
++/* There are two variants to allocate state for Dictionary Interface:
++     1) LzmaDec_Allocate / LzmaDec_Free
++     2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs
++   You can use variant 2, if you set dictionary buffer manually.
++   For Buffer Interface you must always use variant 1.
++
++LzmaDec_Allocate* can return:
++  SZ_OK
++  SZ_ERROR_MEM         - Memory allocation error
++  SZ_ERROR_UNSUPPORTED - Unsupported properties
++*/
++
++SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc);
++void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc);
++
++SRes LzmaDec_Allocate(CLzmaDec *state, const Byte *prop, unsigned propsSize, ISzAlloc *alloc);
++void LzmaDec_Free(CLzmaDec *state, ISzAlloc *alloc);
++
++/* ---------- Dictionary Interface ---------- */
++
++/* You can use it, if you want to eliminate the overhead for data copying from
++   dictionary to some other external buffer.
++   You must work with CLzmaDec variables directly in this interface.
++
++   STEPS:
++     LzmaDec_Constr()
++     LzmaDec_Allocate()
++     for (each new stream)
++     {
++       LzmaDec_Init()
++       while (it needs more decompression)
++       {
++         LzmaDec_DecodeToDic()
++         use data from CLzmaDec::dic and update CLzmaDec::dicPos
++       }
++     }
++     LzmaDec_Free()
++*/
++
++/* LzmaDec_DecodeToDic
++
++   The decoding to internal dictionary buffer (CLzmaDec::dic).
++   You must manually update CLzmaDec::dicPos, if it reaches CLzmaDec::dicBufSize !!!
++
++finishMode:
++  It has meaning only if the decoding reaches output limit (dicLimit).
++  LZMA_FINISH_ANY - Decode just dicLimit bytes.
++  LZMA_FINISH_END - Stream must be finished after dicLimit.
++
++Returns:
++  SZ_OK
++    status:
++      LZMA_STATUS_FINISHED_WITH_MARK
++      LZMA_STATUS_NOT_FINISHED
++      LZMA_STATUS_NEEDS_MORE_INPUT
++      LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
++  SZ_ERROR_DATA - Data error
++*/
++
++SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit,
++    const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
++
++
++/* ---------- Buffer Interface ---------- */
++
++/* It's zlib-like interface.
++   See LzmaDec_DecodeToDic description for information about STEPS and return results,
++   but you must use LzmaDec_DecodeToBuf instead of LzmaDec_DecodeToDic and you don't need
++   to work with CLzmaDec variables manually.
++
++finishMode:
++  It has meaning only if the decoding reaches output limit (*destLen).
++  LZMA_FINISH_ANY - Decode just destLen bytes.
++  LZMA_FINISH_END - Stream must be finished after (*destLen).
++*/
++
++SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen,
++    const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
++
++
 +/* ---------- One Call Interface ---------- */
 +
 +/* LzmaDecode
@@ -647,7 +765,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +#endif
 --- /dev/null
 +++ b/include/linux/lzma/LzmaEnc.h
-@@ -0,0 +1,60 @@
+@@ -0,0 +1,80 @@
 +/*  LzmaEnc.h -- LZMA Encoder
 +2009-02-07 : Igor Pavlov : Public domain */
 +
@@ -681,6 +799,9 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +} CLzmaEncProps;
 +
 +void LzmaEncProps_Init(CLzmaEncProps *p);
++void LzmaEncProps_Normalize(CLzmaEncProps *p);
++UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2);
++
 +
 +/* ---------- CLzmaEncHandle Interface ---------- */
 +
@@ -700,9 +821,26 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAlloc *alloc, ISzAlloc *allocBig);
 +SRes LzmaEnc_SetProps(CLzmaEncHandle p, const CLzmaEncProps *props);
 +SRes LzmaEnc_WriteProperties(CLzmaEncHandle p, Byte *properties, SizeT *size);
++SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStream *outStream, ISeqInStream *inStream,
++    ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig);
 +SRes LzmaEnc_MemEncode(CLzmaEncHandle p, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
 +    int writeEndMark, ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig);
 +
++/* ---------- One Call Interface ---------- */
++
++/* LzmaEncode
++Return code:
++  SZ_OK               - OK
++  SZ_ERROR_MEM        - Memory allocation error
++  SZ_ERROR_PARAM      - Incorrect paramater
++  SZ_ERROR_OUTPUT_EOF - output buffer overflow
++  SZ_ERROR_THREAD     - errors in multithreading functions (only for Mt version)
++*/
++
++SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
++    const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark,
++    ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig);
++
 +#ifdef __cplusplus
 +}
 +#endif
@@ -992,7 +1130,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
  lib-$(CONFIG_DECOMPRESS_BZIP2) += decompress_bunzip2.o
 --- /dev/null
 +++ b/lib/lzma/LzFind.c
-@@ -0,0 +1,522 @@
+@@ -0,0 +1,761 @@
 +/* LzFind.c -- Match finder for LZ algorithms
 +2009-04-22 : Igor Pavlov : Public domain */
 +
@@ -1009,15 +1147,9 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +
 +#define kStartMaxLen 3
 +
-+#if 0
-+#define DIRECT_INPUT  p->directInput
-+#else
-+#define DIRECT_INPUT  1
-+#endif
-+
 +static void LzInWindow_Free(CMatchFinder *p, ISzAlloc *alloc)
 +{
-+  if (!DIRECT_INPUT)
++  if (!p->directInput)
 +  {
 +    alloc->Free(alloc, p->bufferBase);
 +    p->bufferBase = 0;
@@ -1029,7 +1161,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +static int LzInWindow_Create(CMatchFinder *p, UInt32 keepSizeReserv, ISzAlloc *alloc)
 +{
 +  UInt32 blockSize = p->keepSizeBefore + p->keepSizeAfter + keepSizeReserv;
-+  if (DIRECT_INPUT)
++  if (p->directInput)
 +  {
 +    p->blockSize = blockSize;
 +    return 1;
@@ -1043,12 +1175,12 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  return (p->bufferBase != 0);
 +}
 +
-+static Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p) { return p->buffer; }
-+static Byte MatchFinder_GetIndexByte(CMatchFinder *p, Int32 index) { return p->buffer[index]; }
++Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p) { return p->buffer; }
++Byte MatchFinder_GetIndexByte(CMatchFinder *p, Int32 index) { return p->buffer[index]; }
 +
-+static UInt32 MatchFinder_GetNumAvailableBytes(CMatchFinder *p) { return p->streamPos - p->pos; }
++UInt32 MatchFinder_GetNumAvailableBytes(CMatchFinder *p) { return p->streamPos - p->pos; }
 +
-+static void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue)
++void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue)
 +{
 +  p->posLimit -= subValue;
 +  p->pos -= subValue;
@@ -1059,7 +1191,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +{
 +  if (p->streamEndWasReached || p->result != SZ_OK)
 +    return;
-+  if (DIRECT_INPUT)
++  if (p->directInput)
 +  {
 +    UInt32 curSize = 0xFFFFFFFF - p->streamPos;
 +    if (curSize > p->directInputRem)
@@ -1090,7 +1222,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  }
 +}
 +
-+static void MatchFinder_MoveBlock(CMatchFinder *p)
++void MatchFinder_MoveBlock(CMatchFinder *p)
 +{
 +  memmove(p->bufferBase,
 +    p->buffer - p->keepSizeBefore,
@@ -1098,14 +1230,22 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  p->buffer = p->bufferBase + p->keepSizeBefore;
 +}
 +
-+static int MatchFinder_NeedMove(CMatchFinder *p)
++int MatchFinder_NeedMove(CMatchFinder *p)
 +{
-+  if (DIRECT_INPUT)
++  if (p->directInput)
 +    return 0;
 +  /* if (p->streamEndWasReached) return 0; */
 +  return ((size_t)(p->bufferBase + p->blockSize - p->buffer) <= p->keepSizeAfter);
 +}
 +
++void MatchFinder_ReadIfRequired(CMatchFinder *p)
++{
++  if (p->streamEndWasReached)
++    return;
++  if (p->keepSizeAfter >= p->streamPos - p->pos)
++    MatchFinder_ReadBlock(p);
++}
++
 +static void MatchFinder_CheckAndMoveAndRead(CMatchFinder *p)
 +{
 +  if (MatchFinder_NeedMove(p))
@@ -1261,7 +1401,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  p->posLimit = p->pos + limit;
 +}
 +
-+static void MatchFinder_Init(CMatchFinder *p)
++void MatchFinder_Init(CMatchFinder *p)
 +{
 +  UInt32 i;
 +  for (i = 0; i < p->hashSizeSum; i++)
@@ -1280,7 +1420,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  return (p->pos - p->historySize - 1) & kNormalizeMask;
 +}
 +
-+static void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems)
++void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems)
 +{
 +  UInt32 i;
 +  for (i = 0; i < numItems; i++)
@@ -1312,7 +1452,38 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  MatchFinder_SetLimits(p);
 +}
 +
-+static UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son,
++static UInt32 * Hc_GetMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son,
++    UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue,
++    UInt32 *distances, UInt32 maxLen)
++{
++  son[_cyclicBufferPos] = curMatch;
++  for (;;)
++  {
++    UInt32 delta = pos - curMatch;
++    if (cutValue-- == 0 || delta >= _cyclicBufferSize)
++      return distances;
++    {
++      const Byte *pb = cur - delta;
++      curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)];
++      if (pb[maxLen] == cur[maxLen] && *pb == *cur)
++      {
++        UInt32 len = 0;
++        while (++len != lenLimit)
++          if (pb[len] != cur[len])
++            break;
++        if (maxLen < len)
++        {
++          *distances++ = maxLen = len;
++          *distances++ = delta - 1;
++          if (len == lenLimit)
++            return distances;
++        }
++      }
++    }
++  }
++}
++
++UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son,
 +    UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue,
 +    UInt32 *distances, UInt32 maxLen)
 +{
@@ -1422,9 +1593,9 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  p->buffer++; \
 +  if (++p->pos == p->posLimit) MatchFinder_CheckLimits(p);
 +
-+static void MatchFinder_MovePos(CMatchFinder *p) { MOVE_POS; }
++#define MOVE_POS_RET MOVE_POS return offset;
 +
-+#define MOVE_POS_RET MatchFinder_MovePos(p); return offset;
++static void MatchFinder_MovePos(CMatchFinder *p) { MOVE_POS; }
 +
 +#define GET_MATCHES_HEADER2(minLen, ret_op) \
 +  UInt32 lenLimit; UInt32 hashValue; const Byte *cur; UInt32 curMatch; \
@@ -1441,7 +1612,62 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  distances + offset, maxLen) - distances); MOVE_POS_RET;
 +
 +#define SKIP_FOOTER \
-+  SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); MatchFinder_MovePos(p);
++  SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); MOVE_POS;
++
++static UInt32 Bt2_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
++{
++  UInt32 offset;
++  GET_MATCHES_HEADER(2)
++  HASH2_CALC;
++  curMatch = p->hash[hashValue];
++  p->hash[hashValue] = p->pos;
++  offset = 0;
++  GET_MATCHES_FOOTER(offset, 1)
++}
++
++UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
++{
++  UInt32 offset;
++  GET_MATCHES_HEADER(3)
++  HASH_ZIP_CALC;
++  curMatch = p->hash[hashValue];
++  p->hash[hashValue] = p->pos;
++  offset = 0;
++  GET_MATCHES_FOOTER(offset, 2)
++}
++
++static UInt32 Bt3_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
++{
++  UInt32 hash2Value, delta2, maxLen, offset;
++  GET_MATCHES_HEADER(3)
++
++  HASH3_CALC;
++
++  delta2 = p->pos - p->hash[hash2Value];
++  curMatch = p->hash[kFix3HashSize + hashValue];
++
++  p->hash[hash2Value] =
++  p->hash[kFix3HashSize + hashValue] = p->pos;
++
++
++  maxLen = 2;
++  offset = 0;
++  if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur)
++  {
++    for (; maxLen != lenLimit; maxLen++)
++      if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen])
++        break;
++    distances[0] = maxLen;
++    distances[1] = delta2 - 1;
++    offset = 2;
++    if (maxLen == lenLimit)
++    {
++      SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p));
++      MOVE_POS_RET;
++    }
++  }
++  GET_MATCHES_FOOTER(offset, maxLen)
++}
 +
 +static UInt32 Bt4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
 +{
@@ -1490,6 +1716,108 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  GET_MATCHES_FOOTER(offset, maxLen)
 +}
 +
++static UInt32 Hc4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
++{
++  UInt32 hash2Value, hash3Value, delta2, delta3, maxLen, offset;
++  GET_MATCHES_HEADER(4)
++
++  HASH4_CALC;
++
++  delta2 = p->pos - p->hash[                hash2Value];
++  delta3 = p->pos - p->hash[kFix3HashSize + hash3Value];
++  curMatch = p->hash[kFix4HashSize + hashValue];
++
++  p->hash[                hash2Value] =
++  p->hash[kFix3HashSize + hash3Value] =
++  p->hash[kFix4HashSize + hashValue] = p->pos;
++
++  maxLen = 1;
++  offset = 0;
++  if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur)
++  {
++    distances[0] = maxLen = 2;
++    distances[1] = delta2 - 1;
++    offset = 2;
++  }
++  if (delta2 != delta3 && delta3 < p->cyclicBufferSize && *(cur - delta3) == *cur)
++  {
++    maxLen = 3;
++    distances[offset + 1] = delta3 - 1;
++    offset += 2;
++    delta2 = delta3;
++  }
++  if (offset != 0)
++  {
++    for (; maxLen != lenLimit; maxLen++)
++      if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen])
++        break;
++    distances[offset - 2] = maxLen;
++    if (maxLen == lenLimit)
++    {
++      p->son[p->cyclicBufferPos] = curMatch;
++      MOVE_POS_RET;
++    }
++  }
++  if (maxLen < 3)
++    maxLen = 3;
++  offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p),
++    distances + offset, maxLen) - (distances));
++  MOVE_POS_RET
++}
++
++UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
++{
++  UInt32 offset;
++  GET_MATCHES_HEADER(3)
++  HASH_ZIP_CALC;
++  curMatch = p->hash[hashValue];
++  p->hash[hashValue] = p->pos;
++  offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p),
++    distances, 2) - (distances));
++  MOVE_POS_RET
++}
++
++static void Bt2_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
++{
++  do
++  {
++    SKIP_HEADER(2)
++    HASH2_CALC;
++    curMatch = p->hash[hashValue];
++    p->hash[hashValue] = p->pos;
++    SKIP_FOOTER
++  }
++  while (--num != 0);
++}
++
++void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
++{
++  do
++  {
++    SKIP_HEADER(3)
++    HASH_ZIP_CALC;
++    curMatch = p->hash[hashValue];
++    p->hash[hashValue] = p->pos;
++    SKIP_FOOTER
++  }
++  while (--num != 0);
++}
++
++static void Bt3_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
++{
++  do
++  {
++    UInt32 hash2Value;
++    SKIP_HEADER(3)
++    HASH3_CALC;
++    curMatch = p->hash[kFix3HashSize + hashValue];
++    p->hash[hash2Value] =
++    p->hash[kFix3HashSize + hashValue] = p->pos;
++    SKIP_FOOTER
++  }
++  while (--num != 0);
++}
++
 +static void Bt4_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
 +{
 +  do
@@ -1506,18 +1834,67 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  while (--num != 0);
 +}
 +
++static void Hc4_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
++{
++  do
++  {
++    UInt32 hash2Value, hash3Value;
++    SKIP_HEADER(4)
++    HASH4_CALC;
++    curMatch = p->hash[kFix4HashSize + hashValue];
++    p->hash[                hash2Value] =
++    p->hash[kFix3HashSize + hash3Value] =
++    p->hash[kFix4HashSize + hashValue] = p->pos;
++    p->son[p->cyclicBufferPos] = curMatch;
++    MOVE_POS
++  }
++  while (--num != 0);
++}
++
++void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
++{
++  do
++  {
++    SKIP_HEADER(3)
++    HASH_ZIP_CALC;
++    curMatch = p->hash[hashValue];
++    p->hash[hashValue] = p->pos;
++    p->son[p->cyclicBufferPos] = curMatch;
++    MOVE_POS
++  }
++  while (--num != 0);
++}
++
 +void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable)
 +{
 +  vTable->Init = (Mf_Init_Func)MatchFinder_Init;
 +  vTable->GetIndexByte = (Mf_GetIndexByte_Func)MatchFinder_GetIndexByte;
 +  vTable->GetNumAvailableBytes = (Mf_GetNumAvailableBytes_Func)MatchFinder_GetNumAvailableBytes;
 +  vTable->GetPointerToCurrentPos = (Mf_GetPointerToCurrentPos_Func)MatchFinder_GetPointerToCurrentPos;
-+  vTable->GetMatches = (Mf_GetMatches_Func)Bt4_MatchFinder_GetMatches;
-+  vTable->Skip = (Mf_Skip_Func)Bt4_MatchFinder_Skip;
++  if (!p->btMode)
++  {
++    vTable->GetMatches = (Mf_GetMatches_Func)Hc4_MatchFinder_GetMatches;
++    vTable->Skip = (Mf_Skip_Func)Hc4_MatchFinder_Skip;
++  }
++  else if (p->numHashBytes == 2)
++  {
++    vTable->GetMatches = (Mf_GetMatches_Func)Bt2_MatchFinder_GetMatches;
++    vTable->Skip = (Mf_Skip_Func)Bt2_MatchFinder_Skip;
++  }
++  else if (p->numHashBytes == 3)
++  {
++    vTable->GetMatches = (Mf_GetMatches_Func)Bt3_MatchFinder_GetMatches;
++    vTable->Skip = (Mf_Skip_Func)Bt3_MatchFinder_Skip;
++  }
++  else
++  {
++    vTable->GetMatches = (Mf_GetMatches_Func)Bt4_MatchFinder_GetMatches;
++    vTable->Skip = (Mf_Skip_Func)Bt4_MatchFinder_Skip;
++  }
 +}
 --- /dev/null
 +++ b/lib/lzma/LzmaDec.c
-@@ -0,0 +1,925 @@
+@@ -0,0 +1,999 @@
 +/* LzmaDec.c -- LZMA Decoder
 +2009-09-20 : Igor Pavlov : Public domain */
 +
@@ -2202,7 +2579,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  p->needFlush = 0;
 +}
 +
-+static void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState)
++void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState)
 +{
 +  p->needFlush = 1;
 +  p->remainLen = 0;
@@ -2218,7 +2595,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +    p->needInitState = 1;
 +}
 +
-+static void LzmaDec_Init(CLzmaDec *p)
++void LzmaDec_Init(CLzmaDec *p)
 +{
 +  p->dicPos = 0;
 +  LzmaDec_InitDicAndState(p, True, True);
@@ -2236,7 +2613,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  p->needInitState = 0;
 +}
 +
-+static SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen,
++SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen,
 +    ELzmaFinishMode finishMode, ELzmaStatus *status)
 +{
 +  SizeT inSize = *srcLen;
@@ -2357,13 +2734,65 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  return (p->code == 0) ? SZ_OK : SZ_ERROR_DATA;
 +}
 +
-+static void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc)
++SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status)
++{
++  SizeT outSize = *destLen;
++  SizeT inSize = *srcLen;
++  *srcLen = *destLen = 0;
++  for (;;)
++  {
++    SizeT inSizeCur = inSize, outSizeCur, dicPos;
++    ELzmaFinishMode curFinishMode;
++    SRes res;
++    if (p->dicPos == p->dicBufSize)
++      p->dicPos = 0;
++    dicPos = p->dicPos;
++    if (outSize > p->dicBufSize - dicPos)
++    {
++      outSizeCur = p->dicBufSize;
++      curFinishMode = LZMA_FINISH_ANY;
++    }
++    else
++    {
++      outSizeCur = dicPos + outSize;
++      curFinishMode = finishMode;
++    }
++
++    res = LzmaDec_DecodeToDic(p, outSizeCur, src, &inSizeCur, curFinishMode, status);
++    src += inSizeCur;
++    inSize -= inSizeCur;
++    *srcLen += inSizeCur;
++    outSizeCur = p->dicPos - dicPos;
++    memcpy(dest, p->dic + dicPos, outSizeCur);
++    dest += outSizeCur;
++    outSize -= outSizeCur;
++    *destLen += outSizeCur;
++    if (res != 0)
++      return res;
++    if (outSizeCur == 0 || outSize == 0)
++      return SZ_OK;
++  }
++}
++
++void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc)
 +{
 +  alloc->Free(alloc, p->probs);
 +  p->probs = 0;
 +}
 +
-+static SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size)
++static void LzmaDec_FreeDict(CLzmaDec *p, ISzAlloc *alloc)
++{
++  alloc->Free(alloc, p->dic);
++  p->dic = 0;
++}
++
++void LzmaDec_Free(CLzmaDec *p, ISzAlloc *alloc)
++{
++  LzmaDec_FreeProbs(p, alloc);
++  LzmaDec_FreeDict(p, alloc);
++}
++
++SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size)
 +{
 +  UInt32 dicSize;
 +  Byte d;
@@ -2403,11 +2832,33 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  return SZ_OK;
 +}
 +
-+static SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc)
++SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc)
++{
++  CLzmaProps propNew;
++  RINOK(LzmaProps_Decode(&propNew, props, propsSize));
++  RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc));
++  p->prop = propNew;
++  return SZ_OK;
++}
++
++SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc)
 +{
 +  CLzmaProps propNew;
++  SizeT dicBufSize;
 +  RINOK(LzmaProps_Decode(&propNew, props, propsSize));
 +  RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc));
++  dicBufSize = propNew.dicSize;
++  if (p->dic == 0 || dicBufSize != p->dicBufSize)
++  {
++    LzmaDec_FreeDict(p, alloc);
++    p->dic = (Byte *)alloc->Alloc(alloc, dicBufSize);
++    if (p->dic == 0)
++    {
++      LzmaDec_FreeProbs(p, alloc);
++      return SZ_ERROR_MEM;
++    }
++  }
++  p->dicBufSize = dicBufSize;
 +  p->prop = propNew;
 +  return SZ_OK;
 +}
@@ -2445,7 +2896,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +}
 --- /dev/null
 +++ b/lib/lzma/LzmaEnc.c
-@@ -0,0 +1,2123 @@
+@@ -0,0 +1,2271 @@
 +/* LzmaEnc.c -- LZMA Encoder
 +2009-11-24 : Igor Pavlov : Public domain */
 +
@@ -2501,7 +2952,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  p->writeEndMark = 0;
 +}
 +
-+static void LzmaEncProps_Normalize(CLzmaEncProps *p)
++void LzmaEncProps_Normalize(CLzmaEncProps *p)
 +{
 +  int level = p->level;
 +  if (level < 0) level = 5;
@@ -2524,7 +2975,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +      #endif
 +}
 +
-+static UInt32 __maybe_unused LzmaEncProps_GetDictSize(const CLzmaEncProps *props2)
++UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2)
 +{
 +  CLzmaEncProps props = *props2;
 +  LzmaEncProps_Normalize(&props);
@@ -2541,7 +2992,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +
 +#define BSR2_RET(pos, res) { unsigned long i; _BitScanReverse(&i, (pos)); res = (i + i) + ((pos >> (i - 1)) & 1); }
 +
-+static UInt32 GetPosSlot1(UInt32 pos)
++UInt32 GetPosSlot1(UInt32 pos)
 +{
 +  UInt32 res;
 +  BSR2_RET(pos, res);
@@ -2555,7 +3006,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +#define kNumLogBits (9 + (int)sizeof(size_t) / 2)
 +#define kDicLogSizeMaxCompress ((kNumLogBits - 1) * 2 + 7)
 +
-+static void LzmaEnc_FastPosInit(Byte *g_FastPos)
++void LzmaEnc_FastPosInit(Byte *g_FastPos)
 +{
 +  int c = 2, slotFast;
 +  g_FastPos[0] = 0;
@@ -2787,6 +3238,58 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  CSaveState saveState;
 +} CLzmaEnc;
 +
++void LzmaEnc_SaveState(CLzmaEncHandle pp)
++{
++  CLzmaEnc *p = (CLzmaEnc *)pp;
++  CSaveState *dest = &p->saveState;
++  int i;
++  dest->lenEnc = p->lenEnc;
++  dest->repLenEnc = p->repLenEnc;
++  dest->state = p->state;
++
++  for (i = 0; i < kNumStates; i++)
++  {
++    memcpy(dest->isMatch[i], p->isMatch[i], sizeof(p->isMatch[i]));
++    memcpy(dest->isRep0Long[i], p->isRep0Long[i], sizeof(p->isRep0Long[i]));
++  }
++  for (i = 0; i < kNumLenToPosStates; i++)
++    memcpy(dest->posSlotEncoder[i], p->posSlotEncoder[i], sizeof(p->posSlotEncoder[i]));
++  memcpy(dest->isRep, p->isRep, sizeof(p->isRep));
++  memcpy(dest->isRepG0, p->isRepG0, sizeof(p->isRepG0));
++  memcpy(dest->isRepG1, p->isRepG1, sizeof(p->isRepG1));
++  memcpy(dest->isRepG2, p->isRepG2, sizeof(p->isRepG2));
++  memcpy(dest->posEncoders, p->posEncoders, sizeof(p->posEncoders));
++  memcpy(dest->posAlignEncoder, p->posAlignEncoder, sizeof(p->posAlignEncoder));
++  memcpy(dest->reps, p->reps, sizeof(p->reps));
++  memcpy(dest->litProbs, p->litProbs, (0x300 << p->lclp) * sizeof(CLzmaProb));
++}
++
++void LzmaEnc_RestoreState(CLzmaEncHandle pp)
++{
++  CLzmaEnc *dest = (CLzmaEnc *)pp;
++  const CSaveState *p = &dest->saveState;
++  int i;
++  dest->lenEnc = p->lenEnc;
++  dest->repLenEnc = p->repLenEnc;
++  dest->state = p->state;
++
++  for (i = 0; i < kNumStates; i++)
++  {
++    memcpy(dest->isMatch[i], p->isMatch[i], sizeof(p->isMatch[i]));
++    memcpy(dest->isRep0Long[i], p->isRep0Long[i], sizeof(p->isRep0Long[i]));
++  }
++  for (i = 0; i < kNumLenToPosStates; i++)
++    memcpy(dest->posSlotEncoder[i], p->posSlotEncoder[i], sizeof(p->posSlotEncoder[i]));
++  memcpy(dest->isRep, p->isRep, sizeof(p->isRep));
++  memcpy(dest->isRepG0, p->isRepG0, sizeof(p->isRepG0));
++  memcpy(dest->isRepG1, p->isRepG1, sizeof(p->isRepG1));
++  memcpy(dest->isRepG2, p->isRepG2, sizeof(p->isRepG2));
++  memcpy(dest->posEncoders, p->posEncoders, sizeof(p->posEncoders));
++  memcpy(dest->posAlignEncoder, p->posAlignEncoder, sizeof(p->posAlignEncoder));
++  memcpy(dest->reps, p->reps, sizeof(p->reps));
++  memcpy(dest->litProbs, p->litProbs, (0x300 << dest->lclp) * sizeof(CLzmaProb));
++}
++
 +SRes LzmaEnc_SetProps(CLzmaEncHandle pp, const CLzmaEncProps *props2)
 +{
 +  CLzmaEnc *p = (CLzmaEnc *)pp;
@@ -2996,7 +3499,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  while (symbol < 0x10000);
 +}
 +
-+static void LzmaEnc_InitPriceTables(UInt32 *ProbPrices)
++void LzmaEnc_InitPriceTables(UInt32 *ProbPrices)
 +{
 +  UInt32 i;
 +  for (i = (1 << kNumMoveReducingBits) / 2; i < kBitModelTotal; i += (1 << kNumMoveReducingBits))
@@ -4072,7 +4575,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  p->matchPriceCount = 0;
 +}
 +
-+static void LzmaEnc_Construct(CLzmaEnc *p)
++void LzmaEnc_Construct(CLzmaEnc *p)
 +{
 +  RangeEnc_Construct(&p->rc);
 +  MatchFinder_Construct(&p->matchFinderBase);
@@ -4105,7 +4608,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  return p;
 +}
 +
-+static void LzmaEnc_FreeLits(CLzmaEnc *p, ISzAlloc *alloc)
++void LzmaEnc_FreeLits(CLzmaEnc *p, ISzAlloc *alloc)
 +{
 +  alloc->Free(alloc, p->litProbs);
 +  alloc->Free(alloc, p->saveState.litProbs);
@@ -4113,7 +4616,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  p->saveState.litProbs = 0;
 +}
 +
-+static void LzmaEnc_Destruct(CLzmaEnc *p, ISzAlloc *alloc, ISzAlloc *allocBig)
++void LzmaEnc_Destruct(CLzmaEnc *p, ISzAlloc *alloc, ISzAlloc *allocBig)
 +{
 +  #ifndef _7ZIP_ST
 +  MatchFinderMt_Destruct(&p->matchFinderMt, allocBig);
@@ -4343,7 +4846,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  return SZ_OK;
 +}
 +
-+static void LzmaEnc_Init(CLzmaEnc *p)
++void LzmaEnc_Init(CLzmaEnc *p)
 +{
 +  UInt32 i;
 +  p->state = 0;
@@ -4401,7 +4904,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  p->lpMask = (1 << p->lp) - 1;
 +}
 +
-+static void LzmaEnc_InitPrices(CLzmaEnc *p)
++void LzmaEnc_InitPrices(CLzmaEnc *p)
 +{
 +  if (!p->fastMode)
 +  {
@@ -4433,6 +4936,26 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  return SZ_OK;
 +}
 +
++static SRes LzmaEnc_Prepare(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream,
++    ISzAlloc *alloc, ISzAlloc *allocBig)
++{
++  CLzmaEnc *p = (CLzmaEnc *)pp;
++  p->matchFinderBase.stream = inStream;
++  p->needInit = 1;
++  p->rc.outStream = outStream;
++  return LzmaEnc_AllocAndInit(p, 0, alloc, allocBig);
++}
++
++SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp,
++    ISeqInStream *inStream, UInt32 keepWindowSize,
++    ISzAlloc *alloc, ISzAlloc *allocBig)
++{
++  CLzmaEnc *p = (CLzmaEnc *)pp;
++  p->matchFinderBase.stream = inStream;
++  p->needInit = 1;
++  return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig);
++}
++
 +static void LzmaEnc_SetInputBuf(CLzmaEnc *p, const Byte *src, SizeT srcLen)
 +{
 +  p->matchFinderBase.directInput = 1;
@@ -4440,7 +4963,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  p->matchFinderBase.directInputRem = srcLen;
 +}
 +
-+static SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen,
++SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen,
 +    UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig)
 +{
 +  CLzmaEnc *p = (CLzmaEnc *)pp;
@@ -4450,7 +4973,7 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig);
 +}
 +
-+static void LzmaEnc_Finish(CLzmaEncHandle pp)
++void LzmaEnc_Finish(CLzmaEncHandle pp)
 +{
 +  #ifndef _7ZIP_ST
 +  CLzmaEnc *p = (CLzmaEnc *)pp;
@@ -4483,6 +5006,53 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  return size;
 +}
 +
++
++UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle pp)
++{
++  const CLzmaEnc *p = (CLzmaEnc *)pp;
++  return p->matchFinder.GetNumAvailableBytes(p->matchFinderObj);
++}
++
++const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp)
++{
++  const CLzmaEnc *p = (CLzmaEnc *)pp;
++  return p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset;
++}
++
++SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, Bool reInit,
++    Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize)
++{
++  CLzmaEnc *p = (CLzmaEnc *)pp;
++  UInt64 nowPos64;
++  SRes res;
++  CSeqOutStreamBuf outStream;
++
++  outStream.funcTable.Write = MyWrite;
++  outStream.data = dest;
++  outStream.rem = *destLen;
++  outStream.overflow = False;
++
++  p->writeEndMark = False;
++  p->finished = False;
++  p->result = SZ_OK;
++
++  if (reInit)
++    LzmaEnc_Init(p);
++  LzmaEnc_InitPrices(p);
++  nowPos64 = p->nowPos64;
++  RangeEnc_Init(&p->rc);
++  p->rc.outStream = &outStream.funcTable;
++
++  res = LzmaEnc_CodeOneBlock(p, True, desiredPackSize, *unpackSize);
++
++  *unpackSize = (UInt32)(p->nowPos64 - nowPos64);
++  *destLen -= outStream.rem;
++  if (outStream.overflow)
++    return SZ_ERROR_OUTPUT_EOF;
++
++  return res;
++}
++
 +static SRes LzmaEnc_Encode2(CLzmaEnc *p, ICompressProgress *progress)
 +{
 +  SRes res = SZ_OK;
@@ -4513,6 +5083,13 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +  return res;
 +}
 +
++SRes LzmaEnc_Encode(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress,
++    ISzAlloc *alloc, ISzAlloc *allocBig)
++{
++  RINOK(LzmaEnc_Prepare(pp, outStream, inStream, alloc, allocBig));
++  return LzmaEnc_Encode2((CLzmaEnc *)pp, progress);
++}
++
 +SRes LzmaEnc_WriteProperties(CLzmaEncHandle pp, Byte *props, SizeT *size)
 +{
 +  CLzmaEnc *p = (CLzmaEnc *)pp;
@@ -4569,6 +5146,28 @@ Signed-off-by: Alexandros C. Couloumbis <alex@ozo.com>
 +    return SZ_ERROR_OUTPUT_EOF;
 +  return res;
 +}
++
++SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
++    const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark,
++    ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig)
++{
++  CLzmaEnc *p = (CLzmaEnc *)LzmaEnc_Create(alloc);
++  SRes res;
++  if (p == 0)
++    return SZ_ERROR_MEM;
++
++  res = LzmaEnc_SetProps(p, props);
++  if (res == SZ_OK)
++  {
++    res = LzmaEnc_WriteProperties(p, propsEncoded, propsSize);
++    if (res == SZ_OK)
++      res = LzmaEnc_MemEncode(p, dest, destLen, src, srcLen,
++          writeEndMark, progress, alloc, allocBig);
++  }
++
++  LzmaEnc_Destroy(p, alloc, allocBig);
++  return res;
++}
 --- /dev/null
 +++ b/lib/lzma/Makefile
 @@ -0,0 +1,7 @@
index a88e3d7d9a77eb496516dc323470c9ed7e5ec0de..d8531ed740a1b493481ecb5c0c62d72b44e472b9 100644 (file)
@@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  #include <net/net_namespace.h>
  #ifdef CONFIG_SYSCTL
  #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;
  }
  
@@ -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)
 +{
 +      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 = { };
 +
 +      if (count == 0)
@@ -66,7 +66,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +                      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;
 +}
index 5d100270a907866e686c15629331d731b4df66b3..f89ee0b8d20804358cc39908c994c68a423d0cc7 100644 (file)
@@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/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)
   */
  #ifndef NET_SKB_PAD
index 091e65f31e02ed55c28ed0b7bfddf7ce27e4bcda..e61f59f7561dc349f5c4160983305c8603300f11 100644 (file)
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/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      dev_addrs;
  
@@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  #endif
 --- a/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
        __u8                    ndisc_nodetype:2;
  #endif
@@ -30,9 +30,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        __u8                    ipvs_property:1;
        __u8                    inner_protocol_type:1;
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -6065,6 +6065,9 @@ static enum gro_result dev_gro_receive(s
+--- a/net/core/gro.c
++++ b/net/core/gro.c
+@@ -6062,6 +6062,9 @@ static enum gro_result dev_gro_receive(s
        int same_flow;
        int grow;
  
@@ -42,7 +42,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        if (netif_elide_gro(skb->dev))
                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);
  }
  
@@ -91,7 +93,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  static int __netdev_upper_dev_link(struct net_device *dev,
                                   struct net_device *upper_dev, bool master,
                                   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)
                return ret;
  
@@ -99,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
                                            &changeupper_info.info);
        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);
  
@@ -107,7 +109,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
                                      &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)
                return err;
        dev->addr_assign_type = NET_ADDR_SET;
index 488c6a8d92c7ddd9d781fafe70ce7ebec802a882..3de0201f95547e9184f05a34712848d4c5c88462 100644 (file)
@@ -10,9 +10,9 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
 
 --- a/net/netfilter/nf_flow_table_core.c
 +++ b/net/netfilter/nf_flow_table_core.c
-@@ -613,13 +613,41 @@ void nf_flow_table_free(struct nf_flowta
- }
EXPORT_SYMBOL_GPL(nf_flow_table_free);
+@@ -608,28 +608,52 @@ void nf_flow_table_free(struct nf_flowta
+       .exit_batch = nf_flow_table_pernet_exit,
};
  
 +static int nf_flow_table_netdev_event(struct notifier_block *this,
 +                                    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)
  {
--      return nf_flow_table_offload_init();
-+      int ret;
-+
-+      ret = nf_flow_table_offload_init();
-+      if (ret)
-+              return ret;
+       int ret;
+       ret = register_pernet_subsys(&nf_flow_table_net_ops);
+       if (ret < 0)
+               return ret;
+       ret = nf_flow_table_offload_init();
+       if (ret)
+               goto out_offload;
 +
 +      ret = register_netdevice_notifier(&flow_offload_netdev_notifier);
 +      if (ret)
-+              nf_flow_table_offload_exit();
-+
-+      return ret;
++              goto out_offload_init;
+       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)
  {
 +      unregister_netdevice_notifier(&flow_offload_netdev_notifier);
        nf_flow_table_offload_exit();
+       unregister_pernet_subsys(&nf_flow_table_net_ops);
  }
  
 --- a/net/netfilter/nft_flow_offload.c
index a4e3d2650333ebb1fa2270fc2aacf02c343dfb05..649b30105381cad0f9210d4d52be2ee39a56f81d 100644 (file)
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/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++;
        if (likely(napi_schedule_prep(&eth->rx_napi))) {
@@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        }
  
        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++;
        if (likely(napi_schedule_prep(&eth->tx_napi))) {
@@ -30,12 +30,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        }
  
        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
         */
        init_dummy_netdev(&eth->dummy_dev);
 +      eth->dummy_dev.threaded = 1;
 +      strcpy(eth->dummy_dev.name, "mtk_eth");
-       netif_napi_add(&eth->dummy_dev, &eth->tx_napi, mtk_napi_tx,
-                      NAPI_POLL_WEIGHT);
-       netif_napi_add(&eth->dummy_dev, &eth->rx_napi, mtk_napi_rx,
+       netif_napi_add(&eth->dummy_dev, &eth->tx_napi, mtk_napi_tx);
+       netif_napi_add(&eth->dummy_dev, &eth->rx_napi, mtk_napi_rx);
index 5baccf73cb8c7d3e4f7f1d1f75dda4d1596ce579..21c322b4f1140b812cdef86b925ad27c70ad559b 100644 (file)
@@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
 
 --- a/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 mii_bus *bus;
  
@@ -23,7 +23,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
                        sysfs_remove_link(&dev->dev.kobj, "phydev");
 --- a/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 */
        irqreturn_t (*handle_interrupt)(struct phy_device *phydev);
  
index 2a2ca7f1faeeba9184832187e306f5faa24bb983..3aa88066b502b0bdeaef254804723ab007170b7b 100644 (file)
@@ -15,10 +15,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 --- a/include/linux/if_bridge.h
 +++ b/include/linux/if_bridge.h
 @@ -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_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)
  
@@ -107,9 +107,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 --- a/include/uapi/linux/if_link.h
 +++ b/include/uapi/linux/if_link.h
 @@ -536,6 +536,7 @@ enum {
-       IFLA_BRPORT_MRP_IN_OPEN,
        IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT,
        IFLA_BRPORT_MCAST_EHT_HOSTS_CNT,
+       IFLA_BRPORT_LOCKED,
 +      IFLA_BRPORT_BPDU_FILTER,
        __IFLA_BRPORT_MAX
  };
@@ -117,19 +117,19 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 --- a/net/bridge/br_netlink.c
 +++ b/net/bridge/br_netlink.c
 @@ -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_ISOLATED */
+               + nla_total_size(1)     /* IFLA_BRPORT_LOCKED */
 +              + 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_BRIDGE_ID */
                + nla_total_size(sizeof(u16))   /* IFLA_BRPORT_DESIGNATED_PORT */
 @@ -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,
                       !!(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)))
                return -EMSGSIZE;
  
@@ -143,9 +143,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
  /* Change the state of the port and notify spanning tree */
 @@ -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_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);
  
        changed_mask = old_flags ^ p->flags;
@@ -153,7 +153,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 --- a/net/core/rtnetlink.c
 +++ b/net/core/rtnetlink.c
 @@ -55,7 +55,7 @@
- #include <net/net_namespace.h>
+ #include "dev.h"
  
  #define RTNL_MAX_TYPE         50
 -#define RTNL_SLAVE_MAX_TYPE   40
index 60c32b67057a936783d415c09662385560d13019..2071bb0f947d7cb56f62af69cafd33f2b6ea6657 100644 (file)
@@ -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);
 @@ -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);
                dma_wmb();
+               mtk_ppe_cache_clear(ppe);
 +              if (ppe->accounting) {
 +                      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,
 -                           int version, 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);
  int mtk_ppe_stop(struct mtk_ppe *ppe);
- int mtk_ppe_prepare_reset(struct mtk_ppe *ppe);
-@@ -358,5 +376,7 @@ int mtk_foe_entry_commit(struct mtk_ppe
+@@ -354,5 +373,7 @@ int mtk_foe_entry_commit(struct mtk_ppe
  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_ppe_debugfs_init(struct mtk_ppe *ppe, int index);
index fdc3d520c119fc29e090ea9fc1af1818195b627a..26b333511977f804ed8fac88ca29704950d31f3d 100644 (file)
@@ -78,9 +78,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
  static void mtk_ppe_cache_clear(struct mtk_ppe *ppe)
 @@ -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);
                dma_wmb();
+               mtk_ppe_cache_clear(ppe);
 -              if (ppe->accounting) {
 -                      struct mtk_foe_accounting *acct;
 -
index fc83416b2a916de85a325069cf1a3ac25d2515f2..8dace90b9667aa7035ca64ed6b55a78d26accd8f 100644 (file)
@@ -31,9 +31,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 --- a/net/core/dev.c
 +++ b/net/core/dev.c
 @@ -4574,7 +4574,7 @@ static int rps_ipi_queued(struct softnet
- #ifdef CONFIG_RPS
        struct softnet_data *mysd = this_cpu_ptr(&softnet_data);
  
+ #ifdef CONFIG_RPS
 -      if (sd != mysd) {
 +      if (sd != mysd && !test_bit(NAPI_STATE_THREADED, &sd->backlog.state)) {
                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 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);
                }
        }
@@ -58,8 +58,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +                       !skb_queue_empty_lockless(&sd->process_queue);
 +      if (flush_processq)
 +              process_queue_empty = sd->process_queue_empty;
-       rps_unlock(sd);
-       local_irq_enable();
+       rps_unlock_irq_enable(sd);
  
 +      if (threaded)
 +              goto out;
@@ -67,7 +66,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
                if (skb->dev->reg_state == NETREG_UNREGISTERING) {
                        __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);
                }
        }
@@ -77,19 +76,17 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +
 +      while (flush_processq) {
 +              msleep(1);
-+              local_irq_disable();
-+              rps_lock(sd);
++              rps_lock_irq_disable(sd);
 +              flush_processq = process_queue_empty == sd->process_queue_empty;
-+              rps_unlock(sd);
-+              local_irq_enable();
++              rps_unlock_irq_enable(sd);
 +      }
  }
  
  static bool flush_required(int cpu)
 @@ -6463,6 +6485,7 @@ static int process_backlog(struct napi_s
-               local_irq_disable();
-               rps_lock(sd);
+               }
+
+               rps_lock_irq_disable(sd);
 +              sd->process_queue_empty++;
                if (skb_queue_empty(&sd->input_pkt_queue)) {
                        /*
@@ -104,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                        again = false;
                } else {
                        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);
  
@@ -146,20 +143,18 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +              struct napi_struct *n = &sd->backlog;
 +              unsigned long flags;
 +
-+              local_irq_save(flags);
-+              rps_lock(sd);
++              rps_lock_irqsave(sd, &flags);
 +              if (threaded)
 +                      n->state |= NAPIF_STATE_THREADED;
 +              else
 +                      n->state &= ~NAPIF_STATE_THREADED;
-+              rps_unlock(sd);
-+              local_irq_restore(flags);
++              rps_unlock_irq_restore(sd, &flags);
 +      }
 +
 +      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)
  {
 @@ -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 max_skb_frags = MAX_SKB_FRAGS;
 +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
  }
index b498d9f700a91e70dcd525656fe73ed99f548632..67406bac84c0983fb429c52926d057125dc4148d 100644 (file)
@@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  #endif  /*  __LINUX_USB_PCI_QUIRKS_H  */
 --- a/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_shutdown(struct pci_dev *dev);
  
index 9c85862a4bd82247780da8f8dc316a226aac3b58..9654f4429a8e45a7e11cf92221c9032c0eb5748c 100644 (file)
@@ -65,7 +65,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  /**
   *    ata_build_rw_tf - Build ATA taskfile for given read/write request
   *    @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)
                        return NULL;
        }
@@ -75,7 +75,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  
        qc = __ata_qc_from_tag(ap, 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.idle_irq = 1;
  #endif
@@ -85,7 +85,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
        ata_sff_port_init(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->slave_link);
@@ -98,7 +98,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
                kfree(ap);
                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]->local_port_no = i + 1;
        }
index e180a385e11ff1cf0d07cd4c23ee98e521a1a7ed..de28ebe73aa510350f3e55fcea2fb4a917a68d63 100644 (file)
@@ -33,7 +33,7 @@ Signed-off-by: Marek Behún <kabel@kernel.org>
 
 --- a/drivers/pci/controller/pci-aardvark.c
 +++ b/drivers/pci/controller/pci-aardvark.c
-@@ -275,7 +275,6 @@ struct advk_pcie {
+@@ -274,7 +274,6 @@ struct advk_pcie {
        u8 wins_count;
        struct irq_domain *rp_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;
        struct irq_domain *msi_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);
  }
  
@@ -63,7 +63,7 @@ Signed-off-by: Marek Behún <kabel@kernel.org>
        irq_set_chip_data(virq, pcie);
  
        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_node *node = dev->of_node;
        struct device_node *pcie_intc_node;
@@ -71,7 +71,7 @@ Signed-off-by: Marek Behún <kabel@kernel.org>
        int ret = 0;
  
        raw_spin_lock_init(&pcie->irq_lock);
-@@ -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;
        }
  
index 5f0a106ae4e9d81c1bac5486f506759d5cf0dd91..23784616624933d8e31c17c4a37513d39a8aad17 100644 (file)
@@ -31,7 +31,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
        help
 --- a/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) { }
  #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 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);
        early_security_init();
        setup_arch(&command_line);