Skip to content

Commit 5a887b0

Browse files
committed
i2c: tegra: Do not mark ACPI devices as irq safe
JIRA: https://issues.redhat.com/browse/RHEL-50601 commit 14d069d Author: Breno Leitao <leitao@debian.org> Date: Tue, 13 Aug 2024 09:12:53 -0700 On ACPI machines, the tegra i2c module encounters an issue due to a mutex being called inside a spinlock. This leads to the following bug: BUG: sleeping function called from invalid context at kernel/locking/mutex.c:585 ... Call trace: __might_sleep __mutex_lock_common mutex_lock_nested acpi_subsys_runtime_resume rpm_resume tegra_i2c_xfer The problem arises because during __pm_runtime_resume(), the spinlock &dev->power.lock is acquired before rpm_resume() is called. Later, rpm_resume() invokes acpi_subsys_runtime_resume(), which relies on mutexes, triggering the error. To address this issue, devices on ACPI are now marked as not IRQ-safe, considering the dependency of acpi_subsys_runtime_resume() on mutexes. Fixes: bd2fded ("i2c: tegra: Add the ACPI support") Cc: <stable@vger.kernel.org> # v5.17+ Co-developed-by: Michael van der Westhuizen <rmikey@meta.com> Signed-off-by: Michael van der Westhuizen <rmikey@meta.com> Signed-off-by: Breno Leitao <leitao@debian.org> Reviewed-by: Dmitry Osipenko <digetx@gmail.com> Reviewed-by: Andy Shevchenko <andy@kernel.org> Signed-off-by: Andi Shyti <andi.shyti@kernel.org> Signed-off-by: Mark Salter <msalter@redhat.com>
1 parent e614b14 commit 5a887b0

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

drivers/i2c/busses/i2c-tegra.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1804,9 +1804,9 @@ static int tegra_i2c_probe(struct platform_device *pdev)
18041804
* domain.
18051805
*
18061806
* VI I2C device shouldn't be marked as IRQ-safe because VI I2C won't
1807-
* be used for atomic transfers.
1807+
* be used for atomic transfers. ACPI device is not IRQ safe also.
18081808
*/
1809-
if (!IS_VI(i2c_dev))
1809+
if (!IS_VI(i2c_dev) && !has_acpi_companion(i2c_dev->dev))
18101810
pm_runtime_irq_safe(i2c_dev->dev);
18111811

18121812
pm_runtime_enable(i2c_dev->dev);

0 commit comments

Comments
 (0)