summaryrefslogtreecommitdiffstats
path: root/0001-drivers-perf-xgene_pmu-Fix-uninitialized-resource-st.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-drivers-perf-xgene_pmu-Fix-uninitialized-resource-st.patch')
-rw-r--r--0001-drivers-perf-xgene_pmu-Fix-uninitialized-resource-st.patch121
1 files changed, 0 insertions, 121 deletions
diff --git a/0001-drivers-perf-xgene_pmu-Fix-uninitialized-resource-st.patch b/0001-drivers-perf-xgene_pmu-Fix-uninitialized-resource-st.patch
deleted file mode 100644
index 00975ae46..000000000
--- a/0001-drivers-perf-xgene_pmu-Fix-uninitialized-resource-st.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From b0697932d03bd78bd4db6466939680c0fbdd8589 Mon Sep 17 00:00:00 2001
-From: Mark Salter <msalter@redhat.com>
-Date: Tue, 15 Sep 2020 16:41:09 -0400
-Subject: [PATCH] drivers/perf: xgene_pmu: Fix uninitialized resource struct
-
-This splat was reported on newer Fedora kernels booting on certain
-X-gene based machines:
-
- xgene-pmu APMC0D83:00: X-Gene PMU version 3
- Unable to handle kernel read from unreadable memory at virtual \
- address 0000000000004006
- ...
- Call trace:
- string+0x50/0x100
- vsnprintf+0x160/0x750
- devm_kvasprintf+0x5c/0xb4
- devm_kasprintf+0x54/0x60
- __devm_ioremap_resource+0xdc/0x1a0
- devm_ioremap_resource+0x14/0x20
- acpi_get_pmu_hw_inf.isra.0+0x84/0x15c
- acpi_pmu_dev_add+0xbc/0x21c
- acpi_ns_walk_namespace+0x16c/0x1e4
- acpi_walk_namespace+0xb4/0xfc
- xgene_pmu_probe_pmu_dev+0x7c/0xe0
- xgene_pmu_probe.part.0+0x2c0/0x310
- xgene_pmu_probe+0x54/0x64
- platform_drv_probe+0x60/0xb4
- really_probe+0xe8/0x4a0
- driver_probe_device+0xe4/0x100
- device_driver_attach+0xcc/0xd4
- __driver_attach+0xb0/0x17c
- bus_for_each_dev+0x6c/0xb0
- driver_attach+0x30/0x40
- bus_add_driver+0x154/0x250
- driver_register+0x84/0x140
- __platform_driver_register+0x54/0x60
- xgene_pmu_driver_init+0x28/0x34
- do_one_initcall+0x40/0x204
- do_initcalls+0x104/0x144
- kernel_init_freeable+0x198/0x210
- kernel_init+0x20/0x12c
- ret_from_fork+0x10/0x18
- Code: 91000400 110004e1 eb08009f 540000c0 (38646846)
- ---[ end trace f08c10566496a703 ]---
-
-This is due to use of an uninitialized local resource struct in the xgene
-pmu driver. The thunderx2_pmu driver avoids this by using the resource list
-constructed by acpi_dev_get_resources() rather than using a callback from
-that function. The callback in the xgene driver didn't fully initialize
-the resource. So get rid of the callback and search the resource list as
-done by thunderx2.
-
-Fixes: 832c927d119b ("perf: xgene: Add APM X-Gene SoC Performance Monitoring Unit driver")
-Signed-off-by: Mark Salter <msalter@redhat.com>
-Link: https://lore.kernel.org/r/20200915204110.326138-1-msalter@redhat.com
-Signed-off-by: Will Deacon <will@kernel.org>
----
- drivers/perf/xgene_pmu.c | 32 +++++++++++++++++---------------
- 1 file changed, 17 insertions(+), 15 deletions(-)
-
-diff --git a/drivers/perf/xgene_pmu.c b/drivers/perf/xgene_pmu.c
-index edac28cd25dd..633cf07ba672 100644
---- a/drivers/perf/xgene_pmu.c
-+++ b/drivers/perf/xgene_pmu.c
-@@ -1453,17 +1453,6 @@ static char *xgene_pmu_dev_name(struct device *dev, u32 type, int id)
- }
-
- #if defined(CONFIG_ACPI)
--static int acpi_pmu_dev_add_resource(struct acpi_resource *ares, void *data)
--{
-- struct resource *res = data;
--
-- if (ares->type == ACPI_RESOURCE_TYPE_FIXED_MEMORY32)
-- acpi_dev_resource_memory(ares, res);
--
-- /* Always tell the ACPI core to skip this resource */
-- return 1;
--}
--
- static struct
- xgene_pmu_dev_ctx *acpi_get_pmu_hw_inf(struct xgene_pmu *xgene_pmu,
- struct acpi_device *adev, u32 type)
-@@ -1475,6 +1464,7 @@ xgene_pmu_dev_ctx *acpi_get_pmu_hw_inf(struct xgene_pmu *xgene_pmu,
- struct hw_pmu_info *inf;
- void __iomem *dev_csr;
- struct resource res;
-+ struct resource_entry *rentry;
- int enable_bit;
- int rc;
-
-@@ -1483,11 +1473,23 @@ xgene_pmu_dev_ctx *acpi_get_pmu_hw_inf(struct xgene_pmu *xgene_pmu,
- return NULL;
-
- INIT_LIST_HEAD(&resource_list);
-- rc = acpi_dev_get_resources(adev, &resource_list,
-- acpi_pmu_dev_add_resource, &res);
-+ rc = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
-+ if (rc <= 0) {
-+ dev_err(dev, "PMU type %d: No resources found\n", type);
-+ return NULL;
-+ }
-+
-+ list_for_each_entry(rentry, &resource_list, node) {
-+ if (resource_type(rentry->res) == IORESOURCE_MEM) {
-+ res = *rentry->res;
-+ rentry = NULL;
-+ break;
-+ }
-+ }
- acpi_dev_free_resource_list(&resource_list);
-- if (rc < 0) {
-- dev_err(dev, "PMU type %d: No resource address found\n", type);
-+
-+ if (rentry) {
-+ dev_err(dev, "PMU type %d: No memory resource found\n", type);
- return NULL;
- }
-
---
-2.26.2
-