]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Wed, 25 Oct 2023 11:48:03 +0000 (07:48 -0400)
committerSasha Levin <sashal@kernel.org>
Wed, 25 Oct 2023 11:48:03 +0000 (07:48 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/mcb-lpc-reallocate-memory-region-to-avoid-memory-ove.patch [new file with mode: 0644]
queue-4.19/mcb-return-actual-parsed-size-when-reading-chameleon.patch [new file with mode: 0644]
queue-4.19/mmc-core-sdio-hold-retuning-if-sdio-in-1-bit-mode.patch [new file with mode: 0644]
queue-4.19/mmc-sdio-don-t-re-initialize-powered-on-removable-sd.patch [new file with mode: 0644]
queue-4.19/selftests-ftrace-add-new-test-case-which-checks-non-.patch [new file with mode: 0644]
queue-4.19/series [new file with mode: 0644]

diff --git a/queue-4.19/mcb-lpc-reallocate-memory-region-to-avoid-memory-ove.patch b/queue-4.19/mcb-lpc-reallocate-memory-region-to-avoid-memory-ove.patch
new file mode 100644 (file)
index 0000000..e5dc244
--- /dev/null
@@ -0,0 +1,93 @@
+From 91f9f0e59d59aa7c6d2ecfe8abf6ff9144018e90 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 11 Apr 2023 10:33:29 +0200
+Subject: mcb-lpc: Reallocate memory region to avoid memory overlapping
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Rodríguez Barbarin, José Javier <JoseJavier.Rodriguez@duagon.com>
+
+[ Upstream commit 2025b2ca8004c04861903d076c67a73a0ec6dfca ]
+
+mcb-lpc requests a fixed-size memory region to parse the chameleon
+table, however, if the chameleon table is smaller that the allocated
+region, it could overlap with the IP Cores' memory regions.
+
+After parsing the chameleon table, drop/reallocate the memory region
+with the actual chameleon table size.
+
+Co-developed-by: Jorge Sanjuan Garcia <jorge.sanjuangarcia@duagon.com>
+Signed-off-by: Jorge Sanjuan Garcia <jorge.sanjuangarcia@duagon.com>
+Signed-off-by: Javier Rodriguez <josejavier.rodriguez@duagon.com>
+Signed-off-by: Johannes Thumshirn <jth@kernel.org>
+Link: https://lore.kernel.org/r/20230411083329.4506-4-jth@kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mcb/mcb-lpc.c | 35 +++++++++++++++++++++++++++++++----
+ 1 file changed, 31 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/mcb/mcb-lpc.c b/drivers/mcb/mcb-lpc.c
+index 945091a883546..7d292acbba539 100644
+--- a/drivers/mcb/mcb-lpc.c
++++ b/drivers/mcb/mcb-lpc.c
+@@ -26,7 +26,7 @@ static int mcb_lpc_probe(struct platform_device *pdev)
+ {
+       struct resource *res;
+       struct priv *priv;
+-      int ret = 0;
++      int ret = 0, table_size;
+       priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+       if (!priv)
+@@ -61,16 +61,43 @@ static int mcb_lpc_probe(struct platform_device *pdev)
+       ret = chameleon_parse_cells(priv->bus, priv->mem->start, priv->base);
+       if (ret < 0) {
+-              mcb_release_bus(priv->bus);
+-              return ret;
++              goto out_mcb_bus;
+       }
+-      dev_dbg(&pdev->dev, "Found %d cells\n", ret);
++      table_size = ret;
++
++      if (table_size < CHAM_HEADER_SIZE) {
++              /* Release the previous resources */
++              devm_iounmap(&pdev->dev, priv->base);
++              devm_release_mem_region(&pdev->dev, priv->mem->start, resource_size(priv->mem));
++
++              /* Then, allocate it again with the actual chameleon table size */
++              res = devm_request_mem_region(&pdev->dev, priv->mem->start,
++                                            table_size,
++                                            KBUILD_MODNAME);
++              if (!res) {
++                      dev_err(&pdev->dev, "Failed to request PCI memory\n");
++                      ret = -EBUSY;
++                      goto out_mcb_bus;
++              }
++
++              priv->base = devm_ioremap(&pdev->dev, priv->mem->start, table_size);
++              if (!priv->base) {
++                      dev_err(&pdev->dev, "Cannot ioremap\n");
++                      ret = -ENOMEM;
++                      goto out_mcb_bus;
++              }
++
++              platform_set_drvdata(pdev, priv);
++      }
+       mcb_bus_add_devices(priv->bus);
+       return 0;
++out_mcb_bus:
++      mcb_release_bus(priv->bus);
++      return ret;
+ }
+ static int mcb_lpc_remove(struct platform_device *pdev)
+-- 
+2.42.0
+
diff --git a/queue-4.19/mcb-return-actual-parsed-size-when-reading-chameleon.patch b/queue-4.19/mcb-return-actual-parsed-size-when-reading-chameleon.patch
new file mode 100644 (file)
index 0000000..cca052d
--- /dev/null
@@ -0,0 +1,81 @@
+From b7b1fc7c2b6aef4089f3d713493a7a93cc48a3b1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 11 Apr 2023 10:33:27 +0200
+Subject: mcb: Return actual parsed size when reading chameleon table
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Rodríguez Barbarin, José Javier <JoseJavier.Rodriguez@duagon.com>
+
+[ Upstream commit a889c276d33d333ae96697510f33533f6e9d9591 ]
+
+The function chameleon_parse_cells() returns the number of cells
+parsed which has an undetermined size. This return value is only
+used for error checking but the number of cells is never used.
+
+Change return value to be number of bytes parsed to allow for
+memory management improvements.
+
+Co-developed-by: Jorge Sanjuan Garcia <jorge.sanjuangarcia@duagon.com>
+Signed-off-by: Jorge Sanjuan Garcia <jorge.sanjuangarcia@duagon.com>
+Signed-off-by: Javier Rodriguez <josejavier.rodriguez@duagon.com>
+Signed-off-by: Johannes Thumshirn <jth@kernel.org>
+Link: https://lore.kernel.org/r/20230411083329.4506-2-jth@kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mcb/mcb-parse.c | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/mcb/mcb-parse.c b/drivers/mcb/mcb-parse.c
+index 08a85e43ef885..b7354232221e6 100644
+--- a/drivers/mcb/mcb-parse.c
++++ b/drivers/mcb/mcb-parse.c
+@@ -127,7 +127,7 @@ static void chameleon_parse_bar(void __iomem *base,
+       }
+ }
+-static int chameleon_get_bar(char __iomem **base, phys_addr_t mapbase,
++static int chameleon_get_bar(void __iomem **base, phys_addr_t mapbase,
+                            struct chameleon_bar **cb)
+ {
+       struct chameleon_bar *c;
+@@ -176,12 +176,13 @@ int chameleon_parse_cells(struct mcb_bus *bus, phys_addr_t mapbase,
+ {
+       struct chameleon_fpga_header *header;
+       struct chameleon_bar *cb;
+-      char __iomem *p = base;
++      void __iomem *p = base;
+       int num_cells = 0;
+       uint32_t dtype;
+       int bar_count;
+       int ret;
+       u32 hsize;
++      u32 table_size;
+       hsize = sizeof(struct chameleon_fpga_header);
+@@ -236,12 +237,16 @@ int chameleon_parse_cells(struct mcb_bus *bus, phys_addr_t mapbase,
+               num_cells++;
+       }
+-      if (num_cells == 0)
+-              num_cells = -EINVAL;
++      if (num_cells == 0) {
++              ret = -EINVAL;
++              goto free_bar;
++      }
++      table_size = p - base;
++      pr_debug("%d cell(s) found. Chameleon table size: 0x%04x bytes\n", num_cells, table_size);
+       kfree(cb);
+       kfree(header);
+-      return num_cells;
++      return table_size;
+ free_bar:
+       kfree(cb);
+-- 
+2.42.0
+
diff --git a/queue-4.19/mmc-core-sdio-hold-retuning-if-sdio-in-1-bit-mode.patch b/queue-4.19/mmc-core-sdio-hold-retuning-if-sdio-in-1-bit-mode.patch
new file mode 100644 (file)
index 0000000..07cce4f
--- /dev/null
@@ -0,0 +1,50 @@
+From 8b475cc618b4510c8e218a4fd1b8bcd198371eb8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 30 Aug 2023 17:39:22 +0800
+Subject: mmc: core: sdio: hold retuning if sdio in 1-bit mode
+
+From: Haibo Chen <haibo.chen@nxp.com>
+
+[ Upstream commit 32a9cdb8869dc111a0c96cf8e1762be9684af15b ]
+
+tuning only support in 4-bit mode or 8 bit mode, so in 1-bit mode,
+need to hold retuning.
+
+Find this issue when use manual tuning method on imx93. When system
+resume back, SDIO WIFI try to switch back to 4 bit mode, first will
+trigger retuning, and all tuning command failed.
+
+Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
+Acked-by: Adrian Hunter <adrian.hunter@intel.com>
+Fixes: dfa13ebbe334 ("mmc: host: Add facility to support re-tuning")
+Cc: stable@vger.kernel.org
+Link: https://lore.kernel.org/r/20230830093922.3095850-1-haibo.chen@nxp.com
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mmc/core/sdio.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
+index 5f6865717c9b4..4fdb5dd9748fa 100644
+--- a/drivers/mmc/core/sdio.c
++++ b/drivers/mmc/core/sdio.c
+@@ -983,8 +983,14 @@ static int mmc_sdio_resume(struct mmc_host *host)
+               }
+               err = mmc_sdio_reinit_card(host, 0);
+       } else if (mmc_card_wake_sdio_irq(host)) {
+-              /* We may have switched to 1-bit mode during suspend */
++              /*
++               * We may have switched to 1-bit mode during suspend,
++               * need to hold retuning, because tuning only supprt
++               * 4-bit mode or 8 bit mode.
++               */
++              mmc_retune_hold_now(host);
+               err = sdio_enable_4bit_bus(host->card);
++              mmc_retune_release(host);
+       }
+       if (err)
+-- 
+2.42.0
+
diff --git a/queue-4.19/mmc-sdio-don-t-re-initialize-powered-on-removable-sd.patch b/queue-4.19/mmc-sdio-don-t-re-initialize-powered-on-removable-sd.patch
new file mode 100644 (file)
index 0000000..02b96b7
--- /dev/null
@@ -0,0 +1,66 @@
+From 753670afdd7c1410868f365e488ae3fa2f6ed116 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 18 Jun 2019 00:52:59 +0200
+Subject: mmc: sdio: Don't re-initialize powered-on removable SDIO cards at
+ resume
+
+From: Ulf Hansson <ulf.hansson@linaro.org>
+
+[ Upstream commit 6ebc581c3f9e6fd11a1c9da492a5e05bbe96885a ]
+
+It looks like the original idea behind always doing a re-initialization of
+a removable SDIO card during system resume in mmc_sdio_resume(), is to try
+to play safe to detect whether the card has been removed.
+
+However, this seems like a really a bad idea as it will most likely screw
+things up, especially when the card is expected to remain powered on during
+system suspend by the SDIO func driver.
+
+Let's fix this, simply by trusting that the detect work checks if the card
+is alive and inserted, which is being scheduled at the PM_POST_SUSPEND
+notification anyway.
+
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Tested-by: Douglas Anderson <dianders@chromium.org>
+Reviewed-by: Douglas Anderson <dianders@chromium.org>
+Stable-dep-of: 32a9cdb8869d ("mmc: core: sdio: hold retuning if sdio in 1-bit mode")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mmc/core/sdio.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
+index 5f1ee88aa7615..5f6865717c9b4 100644
+--- a/drivers/mmc/core/sdio.c
++++ b/drivers/mmc/core/sdio.c
+@@ -963,7 +963,11 @@ static int mmc_sdio_resume(struct mmc_host *host)
+       /* Basic card reinitialization. */
+       mmc_claim_host(host);
+-      /* Restore power if needed */
++      /*
++       * Restore power and reinitialize the card when needed. Note that a
++       * removable card is checked from a detect work later on in the resume
++       * process.
++       */
+       if (!mmc_card_keep_power(host)) {
+               mmc_power_up(host, host->card->ocr);
+               /*
+@@ -977,12 +981,8 @@ static int mmc_sdio_resume(struct mmc_host *host)
+                       pm_runtime_set_active(&host->card->dev);
+                       pm_runtime_enable(&host->card->dev);
+               }
+-      }
+-
+-      /* No need to reinitialize powered-resumed nonremovable cards */
+-      if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) {
+-              err = mmc_sdio_reinit_card(host, mmc_card_keep_power(host));
+-      } else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
++              err = mmc_sdio_reinit_card(host, 0);
++      } else if (mmc_card_wake_sdio_irq(host)) {
+               /* We may have switched to 1-bit mode during suspend */
+               err = sdio_enable_4bit_bus(host->card);
+       }
+-- 
+2.42.0
+
diff --git a/queue-4.19/selftests-ftrace-add-new-test-case-which-checks-non-.patch b/queue-4.19/selftests-ftrace-add-new-test-case-which-checks-non-.patch
new file mode 100644 (file)
index 0000000..1801fe0
--- /dev/null
@@ -0,0 +1,47 @@
+From 0338f28ee764003b2441c02d204741c43b0ebaa5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 20 Oct 2023 13:42:50 +0300
+Subject: selftests/ftrace: Add new test case which checks non unique symbol
+
+From: Francis Laniel <flaniel@linux.microsoft.com>
+
+[ Upstream commit 03b80ff8023adae6780e491f66e932df8165e3a0 ]
+
+If name_show() is non unique, this test will try to install a kprobe on this
+function which should fail returning EADDRNOTAVAIL.
+On kernel where name_show() is not unique, this test is skipped.
+
+Link: https://lore.kernel.org/all/20231020104250.9537-3-flaniel@linux.microsoft.com/
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Francis Laniel <flaniel@linux.microsoft.com>
+Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
+Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc  | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+ create mode 100644 tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc
+
+diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc
+new file mode 100644
+index 0000000000000..bc9514428dbaf
+--- /dev/null
++++ b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc
+@@ -0,0 +1,13 @@
++#!/bin/sh
++# SPDX-License-Identifier: GPL-2.0
++# description: Test failure of registering kprobe on non unique symbol
++# requires: kprobe_events
++
++SYMBOL='name_show'
++
++# We skip this test on kernel where SYMBOL is unique or does not exist.
++if [ "$(grep -c -E "[[:alnum:]]+ t ${SYMBOL}" /proc/kallsyms)" -le '1' ]; then
++      exit_unsupported
++fi
++
++! echo "p:test_non_unique ${SYMBOL}" > kprobe_events
+-- 
+2.42.0
+
diff --git a/queue-4.19/series b/queue-4.19/series
new file mode 100644 (file)
index 0000000..75bb111
--- /dev/null
@@ -0,0 +1,5 @@
+mmc-sdio-don-t-re-initialize-powered-on-removable-sd.patch
+mmc-core-sdio-hold-retuning-if-sdio-in-1-bit-mode.patch
+selftests-ftrace-add-new-test-case-which-checks-non-.patch
+mcb-return-actual-parsed-size-when-reading-chameleon.patch
+mcb-lpc-reallocate-memory-region-to-avoid-memory-ove.patch