From 8651f1149dc18f6c730ae20f36a91d4eb360a9b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Mon, 19 Feb 2018 15:40:42 +0100 Subject: [PATCH] kernel: backport patches simplifying mtd_device_parse_register code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These 2 patches were recently queued for 4.17. Signed-off-by: Rafał Miłecki --- ...ding-master-MTD-out-of-mtd_add_devic.patch | 74 +++++++++++++++ ...rid-of-the-mtd_add_device_partitions.patch | 93 +++++++++++++++++++ ...ding-master-MTD-out-of-mtd_add_devic.patch | 74 +++++++++++++++ ...rid-of-the-mtd_add_device_partitions.patch | 93 +++++++++++++++++++ ...-add-of_match_table-parser-matching.patch} | 0 ...f_match_table-with-fixed-partitions.patch} | 0 .../812-pci-dwc-fix-enumeration.patch | 4 +- 7 files changed, 335 insertions(+), 3 deletions(-) create mode 100644 target/linux/generic/backport-4.14/040-v4.17-0001-mtd-move-code-adding-master-MTD-out-of-mtd_add_devic.patch create mode 100644 target/linux/generic/backport-4.14/040-v4.17-0002-mtd-get-rid-of-the-mtd_add_device_partitions.patch create mode 100644 target/linux/generic/backport-4.9/066-v4.17-0001-mtd-move-code-adding-master-MTD-out-of-mtd_add_devic.patch create mode 100644 target/linux/generic/backport-4.9/066-v4.17-0002-mtd-get-rid-of-the-mtd_add_device_partitions.patch rename target/linux/generic/backport-4.9/{066-v4.16-0001-mtd-partitions-add-of_match_table-parser-matching.patch => 067-v4.17-0001-mtd-partitions-add-of_match_table-parser-matching.patch} (100%) rename target/linux/generic/backport-4.9/{066-v4.16-0002-mtd-ofpart-add-of_match_table-with-fixed-partitions.patch => 067-v4.17-0002-mtd-ofpart-add-of_match_table-with-fixed-partitions.patch} (100%) diff --git a/target/linux/generic/backport-4.14/040-v4.17-0001-mtd-move-code-adding-master-MTD-out-of-mtd_add_devic.patch b/target/linux/generic/backport-4.14/040-v4.17-0001-mtd-move-code-adding-master-MTD-out-of-mtd_add_devic.patch new file mode 100644 index 0000000000..df6429776f --- /dev/null +++ b/target/linux/generic/backport-4.14/040-v4.17-0001-mtd-move-code-adding-master-MTD-out-of-mtd_add_devic.patch @@ -0,0 +1,74 @@ +From 2c77c57d22adb05b21cdb333a0c42bdfa0e19835 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Tue, 16 Jan 2018 16:45:41 +0100 +Subject: [PATCH] mtd: move code adding master MTD out of + mtd_add_device_partitions() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This change is a small cleanup of mtd_device_parse_register(). When +using MTD_PARTITIONED_MASTER it makes sure a master MTD is registered +before dealing with partitions. The advantage of this is not mixing +code handling master MTD with code handling partitions. + +This commit doesn't change any behavior except from a slightly different +failure code path. The new code may need to call del_mtd_device when +something goes wrong. + +Signed-off-by: Rafał Miłecki +Signed-off-by: Boris Brezillon +--- + drivers/mtd/mtdcore.c | 25 +++++++++++++------------ + 1 file changed, 13 insertions(+), 12 deletions(-) + +--- a/drivers/mtd/mtdcore.c ++++ b/drivers/mtd/mtdcore.c +@@ -641,20 +641,12 @@ static int mtd_add_device_partitions(str + { + const struct mtd_partition *real_parts = parts->parts; + int nbparts = parts->nr_parts; +- int ret; + +- if (nbparts == 0 || IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) { +- ret = add_mtd_device(mtd); +- if (ret) +- return ret; +- } ++ if (!nbparts && !device_is_registered(&mtd->dev)) ++ return add_mtd_device(mtd); + +- if (nbparts > 0) { +- ret = add_mtd_partitions(mtd, real_parts, nbparts); +- if (ret && IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) +- del_mtd_device(mtd); +- return ret; +- } ++ if (nbparts > 0) ++ return add_mtd_partitions(mtd, real_parts, nbparts); + + return 0; + } +@@ -714,6 +706,12 @@ int mtd_device_parse_register(struct mtd + + mtd_set_dev_defaults(mtd); + ++ if (IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) { ++ ret = add_mtd_device(mtd); ++ if (ret) ++ return ret; ++ } ++ + memset(&parsed, 0, sizeof(parsed)); + + ret = parse_mtd_partitions(mtd, types, &parsed, parser_data); +@@ -753,6 +751,9 @@ int mtd_device_parse_register(struct mtd + out: + /* Cleanup any parsed partitions */ + mtd_part_parser_cleanup(&parsed); ++ if (ret && device_is_registered(&mtd->dev)) ++ del_mtd_device(mtd); ++ + return ret; + } + EXPORT_SYMBOL_GPL(mtd_device_parse_register); diff --git a/target/linux/generic/backport-4.14/040-v4.17-0002-mtd-get-rid-of-the-mtd_add_device_partitions.patch b/target/linux/generic/backport-4.14/040-v4.17-0002-mtd-get-rid-of-the-mtd_add_device_partitions.patch new file mode 100644 index 0000000000..1042e674c3 --- /dev/null +++ b/target/linux/generic/backport-4.14/040-v4.17-0002-mtd-get-rid-of-the-mtd_add_device_partitions.patch @@ -0,0 +1,93 @@ +From 0dbe4ea78d69756efeb0bba0764f6bd4a9ee9567 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Tue, 16 Jan 2018 16:45:42 +0100 +Subject: [PATCH] mtd: get rid of the mtd_add_device_partitions() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This simplifies code a bit by: +1) Avoiding an extra (tiny) function +2) Checking for amount of parsed (found) partitions just once +3) Avoiding clearing/filling struct mtd_partitions manually + +With this commit proper functions are called directly from the +mtd_device_parse_register(). It doesn't need to use minor tricks like +memsetting struct to 0 to trigger an expected +mtd_add_device_partitions() behavior. + +Signed-off-by: Rafał Miłecki +Signed-off-by: Boris Brezillon +--- + drivers/mtd/mtdcore.c | 43 ++++++++++++------------------------------- + 1 file changed, 12 insertions(+), 31 deletions(-) + +--- a/drivers/mtd/mtdcore.c ++++ b/drivers/mtd/mtdcore.c +@@ -636,21 +636,6 @@ out_error: + return ret; + } + +-static int mtd_add_device_partitions(struct mtd_info *mtd, +- struct mtd_partitions *parts) +-{ +- const struct mtd_partition *real_parts = parts->parts; +- int nbparts = parts->nr_parts; +- +- if (!nbparts && !device_is_registered(&mtd->dev)) +- return add_mtd_device(mtd); +- +- if (nbparts > 0) +- return add_mtd_partitions(mtd, real_parts, nbparts); +- +- return 0; +-} +- + /* + * Set a few defaults based on the parent devices, if not provided by the + * driver +@@ -701,7 +686,7 @@ int mtd_device_parse_register(struct mtd + const struct mtd_partition *parts, + int nr_parts) + { +- struct mtd_partitions parsed; ++ struct mtd_partitions parsed = { }; + int ret; + + mtd_set_dev_defaults(mtd); +@@ -712,24 +697,20 @@ int mtd_device_parse_register(struct mtd + return ret; + } + +- memset(&parsed, 0, sizeof(parsed)); +- ++ /* Prefer parsed partitions over driver-provided fallback */ + ret = parse_mtd_partitions(mtd, types, &parsed, parser_data); +- if ((ret < 0 || parsed.nr_parts == 0) && parts && nr_parts) { +- /* Fall back to driver-provided partitions */ +- parsed = (struct mtd_partitions){ +- .parts = parts, +- .nr_parts = nr_parts, +- }; +- } else if (ret < 0) { +- /* Didn't come up with parsed OR fallback partitions */ +- pr_info("mtd: failed to find partitions; one or more parsers reports errors (%d)\n", +- ret); +- /* Don't abort on errors; we can still use unpartitioned MTD */ +- memset(&parsed, 0, sizeof(parsed)); ++ if (!ret && parsed.nr_parts) { ++ parts = parsed.parts; ++ nr_parts = parsed.nr_parts; + } + +- ret = mtd_add_device_partitions(mtd, &parsed); ++ if (nr_parts) ++ ret = add_mtd_partitions(mtd, parts, nr_parts); ++ else if (!device_is_registered(&mtd->dev)) ++ ret = add_mtd_device(mtd); ++ else ++ ret = 0; ++ + if (ret) + goto out; + diff --git a/target/linux/generic/backport-4.9/066-v4.17-0001-mtd-move-code-adding-master-MTD-out-of-mtd_add_devic.patch b/target/linux/generic/backport-4.9/066-v4.17-0001-mtd-move-code-adding-master-MTD-out-of-mtd_add_devic.patch new file mode 100644 index 0000000000..07a456d4c0 --- /dev/null +++ b/target/linux/generic/backport-4.9/066-v4.17-0001-mtd-move-code-adding-master-MTD-out-of-mtd_add_devic.patch @@ -0,0 +1,74 @@ +From 2c77c57d22adb05b21cdb333a0c42bdfa0e19835 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Tue, 16 Jan 2018 16:45:41 +0100 +Subject: [PATCH] mtd: move code adding master MTD out of + mtd_add_device_partitions() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This change is a small cleanup of mtd_device_parse_register(). When +using MTD_PARTITIONED_MASTER it makes sure a master MTD is registered +before dealing with partitions. The advantage of this is not mixing +code handling master MTD with code handling partitions. + +This commit doesn't change any behavior except from a slightly different +failure code path. The new code may need to call del_mtd_device when +something goes wrong. + +Signed-off-by: Rafał Miłecki +Signed-off-by: Boris Brezillon +--- + drivers/mtd/mtdcore.c | 25 +++++++++++++------------ + 1 file changed, 13 insertions(+), 12 deletions(-) + +--- a/drivers/mtd/mtdcore.c ++++ b/drivers/mtd/mtdcore.c +@@ -631,20 +631,12 @@ static int mtd_add_device_partitions(str + { + const struct mtd_partition *real_parts = parts->parts; + int nbparts = parts->nr_parts; +- int ret; + +- if (nbparts == 0 || IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) { +- ret = add_mtd_device(mtd); +- if (ret) +- return ret; +- } ++ if (!nbparts && !device_is_registered(&mtd->dev)) ++ return add_mtd_device(mtd); + +- if (nbparts > 0) { +- ret = add_mtd_partitions(mtd, real_parts, nbparts); +- if (ret && IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) +- del_mtd_device(mtd); +- return ret; +- } ++ if (nbparts > 0) ++ return add_mtd_partitions(mtd, real_parts, nbparts); + + return 0; + } +@@ -704,6 +696,12 @@ int mtd_device_parse_register(struct mtd + + mtd_set_dev_defaults(mtd); + ++ if (IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) { ++ ret = add_mtd_device(mtd); ++ if (ret) ++ return ret; ++ } ++ + memset(&parsed, 0, sizeof(parsed)); + + ret = parse_mtd_partitions(mtd, types, &parsed, parser_data); +@@ -743,6 +741,9 @@ int mtd_device_parse_register(struct mtd + out: + /* Cleanup any parsed partitions */ + mtd_part_parser_cleanup(&parsed); ++ if (ret && device_is_registered(&mtd->dev)) ++ del_mtd_device(mtd); ++ + return ret; + } + EXPORT_SYMBOL_GPL(mtd_device_parse_register); diff --git a/target/linux/generic/backport-4.9/066-v4.17-0002-mtd-get-rid-of-the-mtd_add_device_partitions.patch b/target/linux/generic/backport-4.9/066-v4.17-0002-mtd-get-rid-of-the-mtd_add_device_partitions.patch new file mode 100644 index 0000000000..b629d430a4 --- /dev/null +++ b/target/linux/generic/backport-4.9/066-v4.17-0002-mtd-get-rid-of-the-mtd_add_device_partitions.patch @@ -0,0 +1,93 @@ +From 0dbe4ea78d69756efeb0bba0764f6bd4a9ee9567 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Tue, 16 Jan 2018 16:45:42 +0100 +Subject: [PATCH] mtd: get rid of the mtd_add_device_partitions() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This simplifies code a bit by: +1) Avoiding an extra (tiny) function +2) Checking for amount of parsed (found) partitions just once +3) Avoiding clearing/filling struct mtd_partitions manually + +With this commit proper functions are called directly from the +mtd_device_parse_register(). It doesn't need to use minor tricks like +memsetting struct to 0 to trigger an expected +mtd_add_device_partitions() behavior. + +Signed-off-by: Rafał Miłecki +Signed-off-by: Boris Brezillon +--- + drivers/mtd/mtdcore.c | 43 ++++++++++++------------------------------- + 1 file changed, 12 insertions(+), 31 deletions(-) + +--- a/drivers/mtd/mtdcore.c ++++ b/drivers/mtd/mtdcore.c +@@ -626,21 +626,6 @@ out_error: + return ret; + } + +-static int mtd_add_device_partitions(struct mtd_info *mtd, +- struct mtd_partitions *parts) +-{ +- const struct mtd_partition *real_parts = parts->parts; +- int nbparts = parts->nr_parts; +- +- if (!nbparts && !device_is_registered(&mtd->dev)) +- return add_mtd_device(mtd); +- +- if (nbparts > 0) +- return add_mtd_partitions(mtd, real_parts, nbparts); +- +- return 0; +-} +- + /* + * Set a few defaults based on the parent devices, if not provided by the + * driver +@@ -691,7 +676,7 @@ int mtd_device_parse_register(struct mtd + const struct mtd_partition *parts, + int nr_parts) + { +- struct mtd_partitions parsed; ++ struct mtd_partitions parsed = { }; + int ret; + + mtd_set_dev_defaults(mtd); +@@ -702,24 +687,20 @@ int mtd_device_parse_register(struct mtd + return ret; + } + +- memset(&parsed, 0, sizeof(parsed)); +- ++ /* Prefer parsed partitions over driver-provided fallback */ + ret = parse_mtd_partitions(mtd, types, &parsed, parser_data); +- if ((ret < 0 || parsed.nr_parts == 0) && parts && nr_parts) { +- /* Fall back to driver-provided partitions */ +- parsed = (struct mtd_partitions){ +- .parts = parts, +- .nr_parts = nr_parts, +- }; +- } else if (ret < 0) { +- /* Didn't come up with parsed OR fallback partitions */ +- pr_info("mtd: failed to find partitions; one or more parsers reports errors (%d)\n", +- ret); +- /* Don't abort on errors; we can still use unpartitioned MTD */ +- memset(&parsed, 0, sizeof(parsed)); ++ if (!ret && parsed.nr_parts) { ++ parts = parsed.parts; ++ nr_parts = parsed.nr_parts; + } + +- ret = mtd_add_device_partitions(mtd, &parsed); ++ if (nr_parts) ++ ret = add_mtd_partitions(mtd, parts, nr_parts); ++ else if (!device_is_registered(&mtd->dev)) ++ ret = add_mtd_device(mtd); ++ else ++ ret = 0; ++ + if (ret) + goto out; + diff --git a/target/linux/generic/backport-4.9/066-v4.16-0001-mtd-partitions-add-of_match_table-parser-matching.patch b/target/linux/generic/backport-4.9/067-v4.17-0001-mtd-partitions-add-of_match_table-parser-matching.patch similarity index 100% rename from target/linux/generic/backport-4.9/066-v4.16-0001-mtd-partitions-add-of_match_table-parser-matching.patch rename to target/linux/generic/backport-4.9/067-v4.17-0001-mtd-partitions-add-of_match_table-parser-matching.patch diff --git a/target/linux/generic/backport-4.9/066-v4.16-0002-mtd-ofpart-add-of_match_table-with-fixed-partitions.patch b/target/linux/generic/backport-4.9/067-v4.17-0002-mtd-ofpart-add-of_match_table-with-fixed-partitions.patch similarity index 100% rename from target/linux/generic/backport-4.9/066-v4.16-0002-mtd-ofpart-add-of_match_table-with-fixed-partitions.patch rename to target/linux/generic/backport-4.9/067-v4.17-0002-mtd-ofpart-add-of_match_table-with-fixed-partitions.patch diff --git a/target/linux/generic/pending-4.14/812-pci-dwc-fix-enumeration.patch b/target/linux/generic/pending-4.14/812-pci-dwc-fix-enumeration.patch index 42985efdc8..f829631831 100644 --- a/target/linux/generic/pending-4.14/812-pci-dwc-fix-enumeration.patch +++ b/target/linux/generic/pending-4.14/812-pci-dwc-fix-enumeration.patch @@ -47,11 +47,9 @@ Will send separate patches to stable as this file got moved/renamed drivers/pci/dwc/pcie-designware-host.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/drivers/pci/dwc/pcie-designware-host.c b/drivers/pci/dwc/pcie-designware-host.c -index bf558df5b7b3..2b5470173196 100644 --- a/drivers/pci/dwc/pcie-designware-host.c +++ b/drivers/pci/dwc/pcie-designware-host.c -@@ -616,7 +616,7 @@ void dw_pcie_setup_rc(struct pcie_port *pp) +@@ -607,7 +607,7 @@ void dw_pcie_setup_rc(struct pcie_port * /* setup bus numbers */ val = dw_pcie_readl_dbi(pci, PCI_PRIMARY_BUS); val &= 0xff000000;