From 41e1e838fbbb0308ad7353a3714e04b8c4585e7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Fri, 8 Jul 2022 07:58:20 +0200 Subject: [PATCH 1/5] kernel: backport mtd patch adding of_platform_populate() calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is required for non-parser drivers handling MTD devices. Signed-off-by: Rafał Miłecki --- ...or-support-mtd-name-from-device-tree.patch | 6 +- ...or-support-mtd-name-from-device-tree.patch | 6 +- ...platform_populate-for-MTD-partitions.patch | 72 +++++++++++++++++++ ...platform_populate-for-MTD-partitions.patch | 72 +++++++++++++++++++ ...rans-call-add-disks-after-mtd-device.patch | 2 +- .../420-mtd-set-rootfs-to-be-root-dev.patch | 2 +- .../400-mtd-mtdsplit-support.patch | 11 +-- ...support-for-minor-aligned-partitions.patch | 6 +- ...-mtd-core-add-get_mtd_device_by_node.patch | 2 +- .../400-mtd-mtdsplit-support.patch | 11 +-- ...support-for-minor-aligned-partitions.patch | 6 +- ...or-support-mtd-name-from-device-tree.patch | 6 +- 12 files changed, 174 insertions(+), 28 deletions(-) create mode 100644 target/linux/generic/backport-5.10/412-v5.19-mtd-call-of_platform_populate-for-MTD-partitions.patch create mode 100644 target/linux/generic/backport-5.15/400-v5.19-mtd-call-of_platform_populate-for-MTD-partitions.patch diff --git a/target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch b/target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch index 38a65b183f..d7ee9e56fc 100644 --- a/target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch +++ b/target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch @@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c -@@ -3156,6 +3156,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -3141,6 +3141,7 @@ int spi_nor_scan(struct spi_nor *nor, co struct device *dev = nor->dev; struct mtd_info *mtd = &nor->mtd; struct device_node *np = spi_nor_get_flash_node(nor); @@ -18,7 +18,7 @@ Signed-off-by: Abhimanyu Vishwakarma int ret; int i; -@@ -3210,7 +3211,12 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -3195,7 +3196,12 @@ int spi_nor_scan(struct spi_nor *nor, co if (ret) return ret; @@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma mtd->type = MTD_NORFLASH; --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c -@@ -778,6 +778,17 @@ out_error: +@@ -788,6 +788,17 @@ out_error: */ static void mtd_set_dev_defaults(struct mtd_info *mtd) { diff --git a/target/linux/ath79/patches-5.15/401-mtd-nor-support-mtd-name-from-device-tree.patch b/target/linux/ath79/patches-5.15/401-mtd-nor-support-mtd-name-from-device-tree.patch index 7f49a62b3d..22a6d95462 100644 --- a/target/linux/ath79/patches-5.15/401-mtd-nor-support-mtd-name-from-device-tree.patch +++ b/target/linux/ath79/patches-5.15/401-mtd-nor-support-mtd-name-from-device-tree.patch @@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c -@@ -3110,6 +3110,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -3095,6 +3095,7 @@ int spi_nor_scan(struct spi_nor *nor, co struct device *dev = nor->dev; struct mtd_info *mtd = &nor->mtd; struct device_node *np = spi_nor_get_flash_node(nor); @@ -18,7 +18,7 @@ Signed-off-by: Abhimanyu Vishwakarma int ret; int i; -@@ -3164,7 +3165,12 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -3149,7 +3150,12 @@ int spi_nor_scan(struct spi_nor *nor, co if (ret) return ret; @@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma mtd->type = MTD_NORFLASH; --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c -@@ -778,6 +778,17 @@ out_error: +@@ -788,6 +788,17 @@ out_error: */ static void mtd_set_dev_defaults(struct mtd_info *mtd) { diff --git a/target/linux/generic/backport-5.10/412-v5.19-mtd-call-of_platform_populate-for-MTD-partitions.patch b/target/linux/generic/backport-5.10/412-v5.19-mtd-call-of_platform_populate-for-MTD-partitions.patch new file mode 100644 index 0000000000..aaeb087c89 --- /dev/null +++ b/target/linux/generic/backport-5.10/412-v5.19-mtd-call-of_platform_populate-for-MTD-partitions.patch @@ -0,0 +1,72 @@ +From bcdf0315a61a29eb753a607d3a85a4032de72d94 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Tue, 10 May 2022 15:12:59 +0200 +Subject: [PATCH] mtd: call of_platform_populate() for MTD partitions +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Until this change MTD subsystem supported handling partitions only with +MTD partitions parsers. That's a specific / limited API designed around +partitions. + +Some MTD partitions may however require different handling. They may +contain specific data that needs to be parsed and somehow extracted. For +that purpose MTD subsystem should allow binding of standard platform +drivers. + +An example can be U-Boot (sub)partition with environment variables. +There exist a "u-boot,env" DT binding for MTD (sub)partition that +requires an NVMEM driver. + +Ref: 5db1c2dbc04c ("dt-bindings: nvmem: add U-Boot environment variables binding") +Signed-off-by: Rafał Miłecki +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/20220510131259.555-1-zajec5@gmail.com +--- + drivers/mtd/mtdpart.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/drivers/mtd/mtdpart.c ++++ b/drivers/mtd/mtdpart.c +@@ -17,6 +17,7 @@ + #include + #include + #include ++#include + + #include "mtdcore.h" + +@@ -578,10 +579,16 @@ static int mtd_part_of_parse(struct mtd_ + struct mtd_part_parser *parser; + struct device_node *np; + struct property *prop; ++ struct device *dev; + const char *compat; + const char *fixed = "fixed-partitions"; + int ret, err = 0; + ++ dev = &master->dev; ++ /* Use parent device (controller) if the top level MTD is not registered */ ++ if (!IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER) && !mtd_is_partition(master)) ++ dev = master->dev.parent; ++ + np = mtd_get_of_node(master); + if (mtd_is_partition(master)) + of_node_get(np); +@@ -594,6 +601,7 @@ static int mtd_part_of_parse(struct mtd_ + continue; + ret = mtd_part_do_parse(parser, master, pparts, NULL); + if (ret > 0) { ++ of_platform_populate(np, NULL, NULL, dev); + of_node_put(np); + return ret; + } +@@ -601,6 +609,7 @@ static int mtd_part_of_parse(struct mtd_ + if (ret < 0 && !err) + err = ret; + } ++ of_platform_populate(np, NULL, NULL, dev); + of_node_put(np); + + /* diff --git a/target/linux/generic/backport-5.15/400-v5.19-mtd-call-of_platform_populate-for-MTD-partitions.patch b/target/linux/generic/backport-5.15/400-v5.19-mtd-call-of_platform_populate-for-MTD-partitions.patch new file mode 100644 index 0000000000..1f3aae13b4 --- /dev/null +++ b/target/linux/generic/backport-5.15/400-v5.19-mtd-call-of_platform_populate-for-MTD-partitions.patch @@ -0,0 +1,72 @@ +From bcdf0315a61a29eb753a607d3a85a4032de72d94 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Tue, 10 May 2022 15:12:59 +0200 +Subject: [PATCH] mtd: call of_platform_populate() for MTD partitions +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Until this change MTD subsystem supported handling partitions only with +MTD partitions parsers. That's a specific / limited API designed around +partitions. + +Some MTD partitions may however require different handling. They may +contain specific data that needs to be parsed and somehow extracted. For +that purpose MTD subsystem should allow binding of standard platform +drivers. + +An example can be U-Boot (sub)partition with environment variables. +There exist a "u-boot,env" DT binding for MTD (sub)partition that +requires an NVMEM driver. + +Ref: 5db1c2dbc04c ("dt-bindings: nvmem: add U-Boot environment variables binding") +Signed-off-by: Rafał Miłecki +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/20220510131259.555-1-zajec5@gmail.com +--- + drivers/mtd/mtdpart.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/drivers/mtd/mtdpart.c ++++ b/drivers/mtd/mtdpart.c +@@ -17,6 +17,7 @@ + #include + #include + #include ++#include + + #include "mtdcore.h" + +@@ -577,10 +578,16 @@ static int mtd_part_of_parse(struct mtd_ + struct mtd_part_parser *parser; + struct device_node *np; + struct property *prop; ++ struct device *dev; + const char *compat; + const char *fixed = "fixed-partitions"; + int ret, err = 0; + ++ dev = &master->dev; ++ /* Use parent device (controller) if the top level MTD is not registered */ ++ if (!IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER) && !mtd_is_partition(master)) ++ dev = master->dev.parent; ++ + np = mtd_get_of_node(master); + if (mtd_is_partition(master)) + of_node_get(np); +@@ -593,6 +600,7 @@ static int mtd_part_of_parse(struct mtd_ + continue; + ret = mtd_part_do_parse(parser, master, pparts, NULL); + if (ret > 0) { ++ of_platform_populate(np, NULL, NULL, dev); + of_node_put(np); + return ret; + } +@@ -600,6 +608,7 @@ static int mtd_part_of_parse(struct mtd_ + if (ret < 0 && !err) + err = ret; + } ++ of_platform_populate(np, NULL, NULL, dev); + of_node_put(np); + + /* diff --git a/target/linux/generic/hack-5.10/402-mtd-blktrans-call-add-disks-after-mtd-device.patch b/target/linux/generic/hack-5.10/402-mtd-blktrans-call-add-disks-after-mtd-device.patch index 988d900b31..a5dc72f43b 100644 --- a/target/linux/generic/hack-5.10/402-mtd-blktrans-call-add-disks-after-mtd-device.patch +++ b/target/linux/generic/hack-5.10/402-mtd-blktrans-call-add-disks-after-mtd-device.patch @@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle #include "mtdcore.h" -@@ -851,6 +852,8 @@ int mtd_device_parse_register(struct mtd +@@ -861,6 +862,8 @@ int mtd_device_parse_register(struct mtd register_reboot_notifier(&mtd->reboot_notifier); } diff --git a/target/linux/generic/hack-5.10/420-mtd-set-rootfs-to-be-root-dev.patch b/target/linux/generic/hack-5.10/420-mtd-set-rootfs-to-be-root-dev.patch index b071ac61ec..d34306b7fc 100644 --- a/target/linux/generic/hack-5.10/420-mtd-set-rootfs-to-be-root-dev.patch +++ b/target/linux/generic/hack-5.10/420-mtd-set-rootfs-to-be-root-dev.patch @@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos #include #include -@@ -694,6 +695,19 @@ int add_mtd_device(struct mtd_info *mtd) +@@ -704,6 +705,19 @@ int add_mtd_device(struct mtd_info *mtd) of this try_ nonsense, and no bitching about it either. :) */ __module_get(THIS_MODULE); diff --git a/target/linux/generic/pending-5.10/400-mtd-mtdsplit-support.patch b/target/linux/generic/pending-5.10/400-mtd-mtdsplit-support.patch index 42043a2818..f37df6d164 100644 --- a/target/linux/generic/pending-5.10/400-mtd-mtdsplit-support.patch +++ b/target/linux/generic/pending-5.10/400-mtd-mtdsplit-support.patch @@ -28,20 +28,21 @@ depends on m --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c -@@ -15,10 +15,12 @@ +@@ -15,11 +15,13 @@ #include #include #include +#include #include #include + #include #include "mtdcore.h" +#include "mtdsplit/mtdsplit.h" /* * MTD methods which simply translate the effective address and pass through -@@ -236,6 +238,146 @@ static int mtd_add_partition_attrs(struc +@@ -237,6 +239,146 @@ static int mtd_add_partition_attrs(struc return ret; } @@ -188,7 +189,7 @@ int mtd_add_partition(struct mtd_info *parent, const char *name, long long offset, long long length) { -@@ -274,6 +416,7 @@ int mtd_add_partition(struct mtd_info *p +@@ -275,6 +417,7 @@ int mtd_add_partition(struct mtd_info *p if (ret) goto err_remove_part; @@ -196,7 +197,7 @@ mtd_add_partition_attrs(child); return 0; -@@ -422,6 +565,7 @@ int add_mtd_partitions(struct mtd_info * +@@ -423,6 +566,7 @@ int add_mtd_partitions(struct mtd_info * goto err_del_partitions; } @@ -204,7 +205,7 @@ mtd_add_partition_attrs(child); /* Look for subpartitions */ -@@ -438,31 +582,6 @@ err_del_partitions: +@@ -439,31 +583,6 @@ err_del_partitions: return ret; } diff --git a/target/linux/generic/pending-5.10/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch b/target/linux/generic/pending-5.10/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch index c634ae9aeb..53d5637e41 100644 --- a/target/linux/generic/pending-5.10/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch +++ b/target/linux/generic/pending-5.10/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch @@ -106,7 +106,7 @@ Reported-by: Dan Carpenter &dev_attr_oobsize.attr, --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c -@@ -40,6 +40,7 @@ static struct mtd_info *allocate_partiti +@@ -41,6 +41,7 @@ static struct mtd_info *allocate_partiti struct mtd_info *master = mtd_get_master(parent); int wr_alignment = (parent->flags & MTD_NO_ERASE) ? master->writesize : master->erasesize; @@ -114,7 +114,7 @@ Reported-by: Dan Carpenter u64 parent_size = mtd_is_partition(parent) ? parent->part.size : parent->size; struct mtd_info *child; -@@ -164,6 +165,7 @@ static struct mtd_info *allocate_partiti +@@ -165,6 +166,7 @@ static struct mtd_info *allocate_partiti } else { /* Single erase size */ child->erasesize = master->erasesize; @@ -122,7 +122,7 @@ Reported-by: Dan Carpenter } /* -@@ -171,26 +173,39 @@ static struct mtd_info *allocate_partiti +@@ -172,26 +174,39 @@ static struct mtd_info *allocate_partiti * exposes several regions with different erasesize. Adjust * wr_alignment accordingly. */ diff --git a/target/linux/generic/pending-5.10/495-mtd-core-add-get_mtd_device_by_node.patch b/target/linux/generic/pending-5.10/495-mtd-core-add-get_mtd_device_by_node.patch index 22c3ba56d4..ac5e4086d9 100644 --- a/target/linux/generic/pending-5.10/495-mtd-core-add-get_mtd_device_by_node.patch +++ b/target/linux/generic/pending-5.10/495-mtd-core-add-get_mtd_device_by_node.patch @@ -17,7 +17,7 @@ Reviewed-by: Miquel Raynal --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c -@@ -1046,6 +1046,44 @@ out_unlock: +@@ -1056,6 +1056,44 @@ out_unlock: } EXPORT_SYMBOL_GPL(get_mtd_device_nm); diff --git a/target/linux/generic/pending-5.15/400-mtd-mtdsplit-support.patch b/target/linux/generic/pending-5.15/400-mtd-mtdsplit-support.patch index 1acb8d718f..461341ce76 100644 --- a/target/linux/generic/pending-5.15/400-mtd-mtdsplit-support.patch +++ b/target/linux/generic/pending-5.15/400-mtd-mtdsplit-support.patch @@ -28,20 +28,21 @@ depends on m --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c -@@ -15,10 +15,12 @@ +@@ -15,11 +15,13 @@ #include #include #include +#include #include #include + #include #include "mtdcore.h" +#include "mtdsplit/mtdsplit.h" /* * MTD methods which simply translate the effective address and pass through -@@ -235,6 +237,146 @@ static int mtd_add_partition_attrs(struc +@@ -236,6 +238,146 @@ static int mtd_add_partition_attrs(struc return ret; } @@ -188,7 +189,7 @@ int mtd_add_partition(struct mtd_info *parent, const char *name, long long offset, long long length) { -@@ -273,6 +415,7 @@ int mtd_add_partition(struct mtd_info *p +@@ -274,6 +416,7 @@ int mtd_add_partition(struct mtd_info *p if (ret) goto err_remove_part; @@ -196,7 +197,7 @@ mtd_add_partition_attrs(child); return 0; -@@ -421,6 +564,7 @@ int add_mtd_partitions(struct mtd_info * +@@ -422,6 +565,7 @@ int add_mtd_partitions(struct mtd_info * goto err_del_partitions; } @@ -204,7 +205,7 @@ mtd_add_partition_attrs(child); /* Look for subpartitions */ -@@ -437,31 +581,6 @@ err_del_partitions: +@@ -438,31 +582,6 @@ err_del_partitions: return ret; } diff --git a/target/linux/generic/pending-5.15/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch b/target/linux/generic/pending-5.15/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch index 43dcbdbbce..ed9d1c9dc1 100644 --- a/target/linux/generic/pending-5.15/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch +++ b/target/linux/generic/pending-5.15/402-mtd-spi-nor-write-support-for-minor-aligned-partitions.patch @@ -106,7 +106,7 @@ Reported-by: Dan Carpenter &dev_attr_oobsize.attr, --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c -@@ -40,6 +40,7 @@ static struct mtd_info *allocate_partiti +@@ -41,6 +41,7 @@ static struct mtd_info *allocate_partiti struct mtd_info *master = mtd_get_master(parent); int wr_alignment = (parent->flags & MTD_NO_ERASE) ? master->writesize : master->erasesize; @@ -114,7 +114,7 @@ Reported-by: Dan Carpenter u64 parent_size = mtd_is_partition(parent) ? parent->part.size : parent->size; struct mtd_info *child; -@@ -164,6 +165,7 @@ static struct mtd_info *allocate_partiti +@@ -165,6 +166,7 @@ static struct mtd_info *allocate_partiti } else { /* Single erase size */ child->erasesize = master->erasesize; @@ -122,7 +122,7 @@ Reported-by: Dan Carpenter } /* -@@ -171,26 +173,39 @@ static struct mtd_info *allocate_partiti +@@ -172,26 +174,39 @@ static struct mtd_info *allocate_partiti * exposes several regions with different erasesize. Adjust * wr_alignment accordingly. */ diff --git a/target/linux/pistachio/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch b/target/linux/pistachio/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch index 38a65b183f..d7ee9e56fc 100644 --- a/target/linux/pistachio/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch +++ b/target/linux/pistachio/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch @@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c -@@ -3156,6 +3156,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -3141,6 +3141,7 @@ int spi_nor_scan(struct spi_nor *nor, co struct device *dev = nor->dev; struct mtd_info *mtd = &nor->mtd; struct device_node *np = spi_nor_get_flash_node(nor); @@ -18,7 +18,7 @@ Signed-off-by: Abhimanyu Vishwakarma int ret; int i; -@@ -3210,7 +3211,12 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -3195,7 +3196,12 @@ int spi_nor_scan(struct spi_nor *nor, co if (ret) return ret; @@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma mtd->type = MTD_NORFLASH; --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c -@@ -778,6 +778,17 @@ out_error: +@@ -788,6 +788,17 @@ out_error: */ static void mtd_set_dev_defaults(struct mtd_info *mtd) { From 1a9ee367343edce263f82cc91a49d796c9d45ea3 Mon Sep 17 00:00:00 2001 From: Christian Marangi Date: Wed, 29 Jun 2022 17:34:51 +0200 Subject: [PATCH 2/5] kernel: backport mtd dynamic partition patch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backport upstream solution that permits to declare nvmem cells with dynamic partition defined by special parser. This provide an OF node for NVMEM and connect it to the defined dynamic partition. Signed-off-by: Christian Marangi Signed-off-by: Rafał Miłecki --- ...or-support-mtd-name-from-device-tree.patch | 2 +- ...or-support-mtd-name-from-device-tree.patch | 2 +- ...ce-of-support-for-dynamic-partitions.patch | 106 ++++++++++++++++++ ...ce-of-support-for-dynamic-partitions.patch | 106 ++++++++++++++++++ ...rans-call-add-disks-after-mtd-device.patch | 2 +- .../420-mtd-set-rootfs-to-be-root-dev.patch | 2 +- ...rans-call-add-disks-after-mtd-device.patch | 2 +- .../420-mtd-set-rootfs-to-be-root-dev.patch | 2 +- ...-mtd-core-add-get_mtd_device_by_node.patch | 2 +- ...-mtd-core-add-get_mtd_device_by_node.patch | 2 +- ...or-support-mtd-name-from-device-tree.patch | 2 +- 11 files changed, 221 insertions(+), 9 deletions(-) create mode 100644 target/linux/generic/backport-5.10/413-v5.20-mtd-next-mtd-core-introduce-of-support-for-dynamic-partitions.patch create mode 100644 target/linux/generic/backport-5.15/402-v5.20-mtd-next-mtd-core-introduce-of-support-for-dynamic-partitions.patch diff --git a/target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch b/target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch index d7ee9e56fc..63c05e84bd 100644 --- a/target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch +++ b/target/linux/ath79/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch @@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma mtd->type = MTD_NORFLASH; --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c -@@ -788,6 +788,17 @@ out_error: +@@ -849,6 +849,17 @@ out_error: */ static void mtd_set_dev_defaults(struct mtd_info *mtd) { diff --git a/target/linux/ath79/patches-5.15/401-mtd-nor-support-mtd-name-from-device-tree.patch b/target/linux/ath79/patches-5.15/401-mtd-nor-support-mtd-name-from-device-tree.patch index 22a6d95462..afedf0be88 100644 --- a/target/linux/ath79/patches-5.15/401-mtd-nor-support-mtd-name-from-device-tree.patch +++ b/target/linux/ath79/patches-5.15/401-mtd-nor-support-mtd-name-from-device-tree.patch @@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma mtd->type = MTD_NORFLASH; --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c -@@ -788,6 +788,17 @@ out_error: +@@ -849,6 +849,17 @@ out_error: */ static void mtd_set_dev_defaults(struct mtd_info *mtd) { diff --git a/target/linux/generic/backport-5.10/413-v5.20-mtd-next-mtd-core-introduce-of-support-for-dynamic-partitions.patch b/target/linux/generic/backport-5.10/413-v5.20-mtd-next-mtd-core-introduce-of-support-for-dynamic-partitions.patch new file mode 100644 index 0000000000..801d9a13cb --- /dev/null +++ b/target/linux/generic/backport-5.10/413-v5.20-mtd-next-mtd-core-introduce-of-support-for-dynamic-partitions.patch @@ -0,0 +1,106 @@ +From ad9b10d1eaada169bd764abcab58f08538877e26 Mon Sep 17 00:00:00 2001 +From: Christian Marangi +Date: Wed, 22 Jun 2022 03:06:28 +0200 +Subject: mtd: core: introduce of support for dynamic partitions + +We have many parser that register mtd partitions at runtime. One example +is the cmdlinepart or the smem-part parser where the compatible is defined +in the dts and the partitions gets detected and registered by the +parser. This is problematic for the NVMEM subsystem that requires an OF +node to detect NVMEM cells. + +To fix this problem, introduce an additional logic that will try to +assign an OF node to the MTD if declared. + +On MTD addition, it will be checked if the MTD has an OF node and if +not declared will check if a partition with the same label / node name is +declared in DTS. If an exact match is found, the partition dynamically +allocated by the parser will have a connected OF node. + +The NVMEM subsystem will detect the OF node and register any NVMEM cells +declared statically in the DTS. + +Signed-off-by: Christian Marangi +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/20220622010628.30414-4-ansuelsmth@gmail.com +--- + drivers/mtd/mtdcore.c | 61 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 61 insertions(+) + +--- a/drivers/mtd/mtdcore.c ++++ b/drivers/mtd/mtdcore.c +@@ -561,6 +561,66 @@ static int mtd_nvmem_add(struct mtd_info + return 0; + } + ++static void mtd_check_of_node(struct mtd_info *mtd) ++{ ++ struct device_node *partitions, *parent_dn, *mtd_dn = NULL; ++ const char *pname, *prefix = "partition-"; ++ int plen, mtd_name_len, offset, prefix_len; ++ struct mtd_info *parent; ++ bool found = false; ++ ++ /* Check if MTD already has a device node */ ++ if (dev_of_node(&mtd->dev)) ++ return; ++ ++ /* Check if a partitions node exist */ ++ parent = mtd->parent; ++ parent_dn = dev_of_node(&parent->dev); ++ if (!parent_dn) ++ return; ++ ++ partitions = of_get_child_by_name(parent_dn, "partitions"); ++ if (!partitions) ++ goto exit_parent; ++ ++ prefix_len = strlen(prefix); ++ mtd_name_len = strlen(mtd->name); ++ ++ /* Search if a partition is defined with the same name */ ++ for_each_child_of_node(partitions, mtd_dn) { ++ offset = 0; ++ ++ /* Skip partition with no/wrong prefix */ ++ if (!of_node_name_prefix(mtd_dn, "partition-")) ++ continue; ++ ++ /* Label have priority. Check that first */ ++ if (of_property_read_string(mtd_dn, "label", &pname)) { ++ of_property_read_string(mtd_dn, "name", &pname); ++ offset = prefix_len; ++ } ++ ++ plen = strlen(pname) - offset; ++ if (plen == mtd_name_len && ++ !strncmp(mtd->name, pname + offset, plen)) { ++ found = true; ++ break; ++ } ++ } ++ ++ if (!found) ++ goto exit_partitions; ++ ++ /* Set of_node only for nvmem */ ++ if (of_device_is_compatible(mtd_dn, "nvmem-cells")) ++ mtd_set_of_node(mtd, mtd_dn); ++ ++exit_partitions: ++ of_node_put(partitions); ++exit_parent: ++ of_node_put(parent_dn); ++} ++ + /** + * add_mtd_device - register an MTD device + * @mtd: pointer to new MTD device info structure +@@ -666,6 +726,7 @@ int add_mtd_device(struct mtd_info *mtd) + mtd->dev.devt = MTD_DEVT(i); + dev_set_name(&mtd->dev, "mtd%d", i); + dev_set_drvdata(&mtd->dev, mtd); ++ mtd_check_of_node(mtd); + of_node_get(mtd_get_of_node(mtd)); + error = device_register(&mtd->dev); + if (error) diff --git a/target/linux/generic/backport-5.15/402-v5.20-mtd-next-mtd-core-introduce-of-support-for-dynamic-partitions.patch b/target/linux/generic/backport-5.15/402-v5.20-mtd-next-mtd-core-introduce-of-support-for-dynamic-partitions.patch new file mode 100644 index 0000000000..8b8e478b00 --- /dev/null +++ b/target/linux/generic/backport-5.15/402-v5.20-mtd-next-mtd-core-introduce-of-support-for-dynamic-partitions.patch @@ -0,0 +1,106 @@ +From ad9b10d1eaada169bd764abcab58f08538877e26 Mon Sep 17 00:00:00 2001 +From: Christian Marangi +Date: Wed, 22 Jun 2022 03:06:28 +0200 +Subject: mtd: core: introduce of support for dynamic partitions + +We have many parser that register mtd partitions at runtime. One example +is the cmdlinepart or the smem-part parser where the compatible is defined +in the dts and the partitions gets detected and registered by the +parser. This is problematic for the NVMEM subsystem that requires an OF +node to detect NVMEM cells. + +To fix this problem, introduce an additional logic that will try to +assign an OF node to the MTD if declared. + +On MTD addition, it will be checked if the MTD has an OF node and if +not declared will check if a partition with the same label / node name is +declared in DTS. If an exact match is found, the partition dynamically +allocated by the parser will have a connected OF node. + +The NVMEM subsystem will detect the OF node and register any NVMEM cells +declared statically in the DTS. + +Signed-off-by: Christian Marangi +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/20220622010628.30414-4-ansuelsmth@gmail.com +--- + drivers/mtd/mtdcore.c | 61 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 61 insertions(+) + +--- a/drivers/mtd/mtdcore.c ++++ b/drivers/mtd/mtdcore.c +@@ -564,6 +564,66 @@ static int mtd_nvmem_add(struct mtd_info + return 0; + } + ++static void mtd_check_of_node(struct mtd_info *mtd) ++{ ++ struct device_node *partitions, *parent_dn, *mtd_dn = NULL; ++ const char *pname, *prefix = "partition-"; ++ int plen, mtd_name_len, offset, prefix_len; ++ struct mtd_info *parent; ++ bool found = false; ++ ++ /* Check if MTD already has a device node */ ++ if (dev_of_node(&mtd->dev)) ++ return; ++ ++ /* Check if a partitions node exist */ ++ parent = mtd->parent; ++ parent_dn = dev_of_node(&parent->dev); ++ if (!parent_dn) ++ return; ++ ++ partitions = of_get_child_by_name(parent_dn, "partitions"); ++ if (!partitions) ++ goto exit_parent; ++ ++ prefix_len = strlen(prefix); ++ mtd_name_len = strlen(mtd->name); ++ ++ /* Search if a partition is defined with the same name */ ++ for_each_child_of_node(partitions, mtd_dn) { ++ offset = 0; ++ ++ /* Skip partition with no/wrong prefix */ ++ if (!of_node_name_prefix(mtd_dn, "partition-")) ++ continue; ++ ++ /* Label have priority. Check that first */ ++ if (of_property_read_string(mtd_dn, "label", &pname)) { ++ of_property_read_string(mtd_dn, "name", &pname); ++ offset = prefix_len; ++ } ++ ++ plen = strlen(pname) - offset; ++ if (plen == mtd_name_len && ++ !strncmp(mtd->name, pname + offset, plen)) { ++ found = true; ++ break; ++ } ++ } ++ ++ if (!found) ++ goto exit_partitions; ++ ++ /* Set of_node only for nvmem */ ++ if (of_device_is_compatible(mtd_dn, "nvmem-cells")) ++ mtd_set_of_node(mtd, mtd_dn); ++ ++exit_partitions: ++ of_node_put(partitions); ++exit_parent: ++ of_node_put(parent_dn); ++} ++ + /** + * add_mtd_device - register an MTD device + * @mtd: pointer to new MTD device info structure +@@ -669,6 +729,7 @@ int add_mtd_device(struct mtd_info *mtd) + mtd->dev.devt = MTD_DEVT(i); + dev_set_name(&mtd->dev, "mtd%d", i); + dev_set_drvdata(&mtd->dev, mtd); ++ mtd_check_of_node(mtd); + of_node_get(mtd_get_of_node(mtd)); + error = device_register(&mtd->dev); + if (error) diff --git a/target/linux/generic/hack-5.10/402-mtd-blktrans-call-add-disks-after-mtd-device.patch b/target/linux/generic/hack-5.10/402-mtd-blktrans-call-add-disks-after-mtd-device.patch index a5dc72f43b..7de27fddb1 100644 --- a/target/linux/generic/hack-5.10/402-mtd-blktrans-call-add-disks-after-mtd-device.patch +++ b/target/linux/generic/hack-5.10/402-mtd-blktrans-call-add-disks-after-mtd-device.patch @@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle #include "mtdcore.h" -@@ -861,6 +862,8 @@ int mtd_device_parse_register(struct mtd +@@ -922,6 +923,8 @@ int mtd_device_parse_register(struct mtd register_reboot_notifier(&mtd->reboot_notifier); } diff --git a/target/linux/generic/hack-5.10/420-mtd-set-rootfs-to-be-root-dev.patch b/target/linux/generic/hack-5.10/420-mtd-set-rootfs-to-be-root-dev.patch index d34306b7fc..ad68d52c72 100644 --- a/target/linux/generic/hack-5.10/420-mtd-set-rootfs-to-be-root-dev.patch +++ b/target/linux/generic/hack-5.10/420-mtd-set-rootfs-to-be-root-dev.patch @@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos #include #include -@@ -704,6 +705,19 @@ int add_mtd_device(struct mtd_info *mtd) +@@ -765,6 +766,19 @@ int add_mtd_device(struct mtd_info *mtd) of this try_ nonsense, and no bitching about it either. :) */ __module_get(THIS_MODULE); diff --git a/target/linux/generic/hack-5.15/402-mtd-blktrans-call-add-disks-after-mtd-device.patch b/target/linux/generic/hack-5.15/402-mtd-blktrans-call-add-disks-after-mtd-device.patch index 88ca07f517..011f790fa7 100644 --- a/target/linux/generic/hack-5.15/402-mtd-blktrans-call-add-disks-after-mtd-device.patch +++ b/target/linux/generic/hack-5.15/402-mtd-blktrans-call-add-disks-after-mtd-device.patch @@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle #include "mtdcore.h" -@@ -1012,6 +1013,8 @@ int mtd_device_parse_register(struct mtd +@@ -1073,6 +1074,8 @@ int mtd_device_parse_register(struct mtd ret = mtd_otp_nvmem_add(mtd); diff --git a/target/linux/generic/hack-5.15/420-mtd-set-rootfs-to-be-root-dev.patch b/target/linux/generic/hack-5.15/420-mtd-set-rootfs-to-be-root-dev.patch index 4cefe35e55..90254c63bf 100644 --- a/target/linux/generic/hack-5.15/420-mtd-set-rootfs-to-be-root-dev.patch +++ b/target/linux/generic/hack-5.15/420-mtd-set-rootfs-to-be-root-dev.patch @@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos #include #include -@@ -707,6 +708,16 @@ int add_mtd_device(struct mtd_info *mtd) +@@ -768,6 +769,16 @@ int add_mtd_device(struct mtd_info *mtd) of this try_ nonsense, and no bitching about it either. :) */ __module_get(THIS_MODULE); diff --git a/target/linux/generic/pending-5.10/495-mtd-core-add-get_mtd_device_by_node.patch b/target/linux/generic/pending-5.10/495-mtd-core-add-get_mtd_device_by_node.patch index ac5e4086d9..cc5946ac05 100644 --- a/target/linux/generic/pending-5.10/495-mtd-core-add-get_mtd_device_by_node.patch +++ b/target/linux/generic/pending-5.10/495-mtd-core-add-get_mtd_device_by_node.patch @@ -17,7 +17,7 @@ Reviewed-by: Miquel Raynal --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c -@@ -1056,6 +1056,44 @@ out_unlock: +@@ -1117,6 +1117,44 @@ out_unlock: } EXPORT_SYMBOL_GPL(get_mtd_device_nm); diff --git a/target/linux/generic/pending-5.15/495-mtd-core-add-get_mtd_device_by_node.patch b/target/linux/generic/pending-5.15/495-mtd-core-add-get_mtd_device_by_node.patch index d1b2c9d1a5..431c80795e 100644 --- a/target/linux/generic/pending-5.15/495-mtd-core-add-get_mtd_device_by_node.patch +++ b/target/linux/generic/pending-5.15/495-mtd-core-add-get_mtd_device_by_node.patch @@ -17,7 +17,7 @@ Reviewed-by: Miquel Raynal --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c -@@ -1213,6 +1213,44 @@ out_unlock: +@@ -1274,6 +1274,44 @@ out_unlock: } EXPORT_SYMBOL_GPL(get_mtd_device_nm); diff --git a/target/linux/pistachio/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch b/target/linux/pistachio/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch index d7ee9e56fc..63c05e84bd 100644 --- a/target/linux/pistachio/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch +++ b/target/linux/pistachio/patches-5.10/401-mtd-nor-support-mtd-name-from-device-tree.patch @@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma mtd->type = MTD_NORFLASH; --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c -@@ -788,6 +788,17 @@ out_error: +@@ -849,6 +849,17 @@ out_error: */ static void mtd_set_dev_defaults(struct mtd_info *mtd) { From 2b49ec3a28ad09446f48f1f830a42bdfe3bce9be Mon Sep 17 00:00:00 2001 From: Markus Stockhausen Date: Wed, 6 Jul 2022 13:41:51 +0200 Subject: [PATCH 3/5] realtek: build factory images for all DGS-1210 models Currently we build factory images only for DGS-1210-28 model. Relax that constraint and take care about all models. Tested on DGS-1210-20 and should work on other models too because of common flash layout. Tested-by: Luiz Angelo Daros de Luca Signed-off-by: Markus Stockhausen --- target/linux/realtek/image/rtl838x.mk | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/target/linux/realtek/image/rtl838x.mk b/target/linux/realtek/image/rtl838x.mk index dc18182110..8eac72b3ef 100644 --- a/target/linux/realtek/image/rtl838x.mk +++ b/target/linux/realtek/image/rtl838x.mk @@ -17,6 +17,13 @@ define Device/d-link_dgs-1210 DEVICE_VENDOR := D-Link DLINK_KERNEL_PART_SIZE := 1572864 KERNEL := kernel-bin | append-dtb | gzip | uImage gzip | dlink-cameo + CAMEO_KERNEL_PART := 2 + CAMEO_ROOTFS_PART := 3 + CAMEO_CUSTOMER_SIGNATURE := 2 + CAMEO_BOARD_VERSION := 32 + IMAGES += factory_image1.bin + IMAGE/factory_image1.bin := append-kernel | pad-to 64k | \ + append-rootfs | pad-rootfs | pad-to 16 | check-size | dlink-headers endef define Device/d-link_dgs-1210-10p @@ -41,13 +48,6 @@ TARGET_DEVICES += d-link_dgs-1210-20 define Device/d-link_dgs-1210-28 $(Device/d-link_dgs-1210) DEVICE_MODEL := DGS-1210-28 - CAMEO_KERNEL_PART := 2 - CAMEO_ROOTFS_PART := 3 - CAMEO_CUSTOMER_SIGNATURE := 2 - CAMEO_BOARD_VERSION := 32 - IMAGES += factory_image1.bin - IMAGE/factory_image1.bin := append-kernel | pad-to 64k | \ - append-rootfs | pad-rootfs | pad-to 16 | check-size | dlink-headers endef TARGET_DEVICES += d-link_dgs-1210-28 From fae3ac3560459320a88be86b31c572c4bca42645 Mon Sep 17 00:00:00 2001 From: Markus Stockhausen Date: Wed, 6 Jul 2022 13:43:23 +0200 Subject: [PATCH 4/5] realtek: build sane factory images for DGS-1210 models During upload of firmware images the WebUI and CLI patch process extracts a version information from the uploaded file and stores it onto the jffs2 partition. To be precise it is written into the flash.txt or flash2.txt files depending on the selected target image. This data is not used anywhere else. The current OpenWrt factory image misses this label. Therefore version information shows only garbage. Fix this. Before: DGS-1210-20> show firmware information IMAGE ONE: Version : xfo/QE~WQD"A\Scxq... Size : 5505185 Bytes After: DGS-1210-20> show firmware information IMAGE ONE: Version : OpenWrt Size : 5505200 Bytes Tested-by: Luiz Angelo Daros de Luca Signed-off-by: Markus Stockhausen --- target/linux/realtek/image/Makefile | 5 +++++ target/linux/realtek/image/rtl838x.mk | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/target/linux/realtek/image/Makefile b/target/linux/realtek/image/Makefile index 3a1ba2f60e..cf779002e8 100644 --- a/target/linux/realtek/image/Makefile +++ b/target/linux/realtek/image/Makefile @@ -21,6 +21,11 @@ define Build/dlink-cameo $(SCRIPT_DIR)/cameo-tag.py $@ $(DLINK_KERNEL_PART_SIZE) endef +define Build/dlink-version + echo -n "OpenWrt" >> $@ + dd if=/dev/zero bs=25 count=1 >> $@ +endef + define Build/dlink-headers dd if=$@ bs=$(DLINK_KERNEL_PART_SIZE) count=1 of=$@.kernel_part; \ dd if=$@ bs=$(DLINK_KERNEL_PART_SIZE) skip=1 of=$@.rootfs_part; \ diff --git a/target/linux/realtek/image/rtl838x.mk b/target/linux/realtek/image/rtl838x.mk index 8eac72b3ef..887f82e385 100644 --- a/target/linux/realtek/image/rtl838x.mk +++ b/target/linux/realtek/image/rtl838x.mk @@ -23,7 +23,8 @@ define Device/d-link_dgs-1210 CAMEO_BOARD_VERSION := 32 IMAGES += factory_image1.bin IMAGE/factory_image1.bin := append-kernel | pad-to 64k | \ - append-rootfs | pad-rootfs | pad-to 16 | check-size | dlink-headers + append-rootfs | pad-rootfs | pad-to 16 | check-size | \ + dlink-version | dlink-headers endef define Device/d-link_dgs-1210-10p From c29b13cfa09ebb4e81d4c6f65a4d1190316126bc Mon Sep 17 00:00:00 2001 From: Kevin Darbyshire-Bryant Date: Tue, 5 Jul 2022 15:27:52 +0100 Subject: [PATCH 5/5] ksmbd: fix compile on kernel 5.15.52+ Backport upstream fix to build on kernel 5.15.52 or later since kernel devs backported newer functionality to older kernels. Signed-off-by: Kevin Darbyshire-Bryant --- ...ix-build-on-kernel-5.15.52-or-higher.patch | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 package/kernel/ksmbd/patches/10-fix-build-on-kernel-5.15.52-or-higher.patch diff --git a/package/kernel/ksmbd/patches/10-fix-build-on-kernel-5.15.52-or-higher.patch b/package/kernel/ksmbd/patches/10-fix-build-on-kernel-5.15.52-or-higher.patch new file mode 100644 index 0000000000..68cf168569 --- /dev/null +++ b/package/kernel/ksmbd/patches/10-fix-build-on-kernel-5.15.52-or-higher.patch @@ -0,0 +1,69 @@ +From 98bc509f92cccedd7d51d5ebadc424e2d7f5cbb4 Mon Sep 17 00:00:00 2001 +From: Chukun Pan +Date: Tue, 5 Jul 2022 15:20:10 +0800 +Subject: [PATCH] ksmbd: fixes build on kernel 5.15.52 or higher + +The 5.15.52 kernel downported two commits "fs: remove unused low-level +mapping helpers" and "fs: use low-level mapping helpers", which broken +the compilation[1]. This commit fixed it. + +1. https://cdn.kernel.org/pub/linux/kernel/v5.x/ChangeLog-5.15.52 + +Signed-off-by: Chukun Pan +Signed-off-by: Namjae Jeon +--- + smbacl.c | 6 ++++-- + smbacl.h | 6 ++++-- + 2 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/smbacl.c b/smbacl.c +index 275e357..19c682a 100644 +--- a/smbacl.c ++++ b/smbacl.c +@@ -281,7 +281,8 @@ static int sid_to_id(struct user_namespace *user_ns, + uid_t id; + + id = le32_to_cpu(psid->sub_auth[psid->num_subauth - 1]); +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) || \ ++ (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 52) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 16, 0)) + uid = mapped_kuid_user(user_ns, &init_user_ns, KUIDT_INIT(id)); + #else + /* +@@ -304,7 +305,8 @@ static int sid_to_id(struct user_namespace *user_ns, + gid_t id; + + id = le32_to_cpu(psid->sub_auth[psid->num_subauth - 1]); +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) || \ ++ (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 52) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 16, 0)) + gid = mapped_kgid_user(user_ns, &init_user_ns, KGIDT_INIT(id)); + #else + /* +diff --git a/smbacl.h b/smbacl.h +index f2bcdb4..7368bf4 100644 +--- a/smbacl.h ++++ b/smbacl.h +@@ -221,7 +221,8 @@ static inline uid_t posix_acl_uid_translate(struct user_namespace *mnt_userns, + kuid_t kuid; + + /* If this is an idmapped mount, apply the idmapping. */ +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) || \ ++ (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 52) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 16, 0)) + kuid = mapped_kuid_fs(mnt_userns, &init_user_ns, pace->e_uid); + #else + kuid = kuid_into_mnt(mnt_userns, pace->e_uid); +@@ -241,7 +242,8 @@ static inline gid_t posix_acl_gid_translate(struct user_namespace *mnt_userns, + kgid_t kgid; + + /* If this is an idmapped mount, apply the idmapping. */ +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) || \ ++ (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 52) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 16, 0)) + kgid = mapped_kgid_fs(mnt_userns, &init_user_ns, pace->e_gid); + #else + kgid = kgid_into_mnt(mnt_userns, pace->e_gid); +-- +2.36.1 +