You've already forked linux-t2-patches
mirror of
https://github.com/t2linux/linux-t2-patches.git
synced 2026-04-30 13:52:11 -07:00
59 lines
2.1 KiB
Diff
59 lines
2.1 KiB
Diff
From: "Andy Shevchenko" <andriy.shevchenko@linux.intel.com>
|
|
To: "Andy Shevchenko" <andriy.shevchenko@linux.intel.com>, "Lee Jones" <lee.jones@linaro.org>, <linux-kernel@vger.kernel.org>
|
|
Cc: "Orlando Chamberlain" <redecorating@protonmail.com>, "Aditya Garg" <gargaditya08@live.com>
|
|
Subject: [PATCH v2 1/1] mfd: intel-lpss: Fix too early PM enablement in the ACPI ->probe()
|
|
Date: Tue, 02 Nov 2021 06:00:08 +1100
|
|
|
|
The runtime PM callback may be called as soon as the runtime PM facility
|
|
is enabled and activated. It means that ->suspend() may be called before
|
|
we finish probing the device in the ACPI case. Hence, NULL pointer
|
|
dereference:
|
|
|
|
intel-lpss INT34BA:00: IRQ index 0 not found
|
|
BUG: kernel NULL pointer dereference, address: 0000000000000030
|
|
...
|
|
Workqueue: pm pm_runtime_work
|
|
RIP: 0010:intel_lpss_suspend+0xb/0x40 [intel_lpss]
|
|
|
|
To fix this, first try to register the device and only after that enable
|
|
runtime PM facility.
|
|
|
|
Fixes: 4b45efe85263 ("mfd: Add support for Intel Sunrisepoint LPSS devices")
|
|
Reported-by: Orlando Chamberlain <redecorating@protonmail.com>
|
|
Reported-by: Aditya Garg <gargaditya08@live.com>
|
|
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
|
---
|
|
drivers/mfd/intel-lpss-acpi.c | 7 ++++++-
|
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/mfd/intel-lpss-acpi.c b/drivers/mfd/intel-lpss-acpi.c
|
|
index 3f1d976eb67c..be81507afb5e 100644
|
|
--- a/drivers/mfd/intel-lpss-acpi.c
|
|
+++ b/drivers/mfd/intel-lpss-acpi.c
|
|
@@ -136,6 +136,7 @@ static int intel_lpss_acpi_probe(struct platform_device *pdev)
|
|
{
|
|
struct intel_lpss_platform_info *info;
|
|
const struct acpi_device_id *id;
|
|
+ int ret;
|
|
|
|
id = acpi_match_device(intel_lpss_acpi_ids, &pdev->dev);
|
|
if (!id)
|
|
@@ -149,10 +150,14 @@ static int intel_lpss_acpi_probe(struct platform_device *pdev)
|
|
info->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
info->irq = platform_get_irq(pdev, 0);
|
|
|
|
+ ret = intel_lpss_probe(&pdev->dev, info);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
pm_runtime_set_active(&pdev->dev);
|
|
pm_runtime_enable(&pdev->dev);
|
|
|
|
- return intel_lpss_probe(&pdev->dev, info);
|
|
+ return 0;
|
|
}
|
|
|
|
static int intel_lpss_acpi_remove(struct platform_device *pdev)
|
|
--
|
|
2.33.0
|