]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commit
ACPICA: Convert acpi_gbl_hardware lock back to an acpi_raw_spinlock
authorSteven Rostedt <rostedt@goodmis.org>
Wed, 25 Apr 2018 14:28:27 +0000 (16:28 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 10 May 2018 15:18:45 +0000 (17:18 +0200)
commitc57c0ad4a3ddd5cc697b1956c00d8c7c2cb7dc12
treef76356a76268636117156d888fb1c7d25e0cffb5
parentc3052594c8ded984ceab3725f63990dfdea1e58f
ACPICA: Convert acpi_gbl_hardware lock back to an acpi_raw_spinlock

We hit the following bug with -RT:

|BUG: scheduling while atomic: swapper/7/0/0x00000002
|Pid: 0, comm: swapper/7 Not tainted 3.6.11-rt28.19.el6rt.x86_64.debug #1
|Call Trace:
|  rt_spin_lock+0x16/0x40
|  __schedule_bug+0x67/0x90
|  __schedule+0x793/0x7a0
|  acpi_os_acquire_lock+0x1f/0x23
|  acpi_write_bit_register+0x33/0xb0
|  rt_spin_lock_slowlock+0xe5/0x2f0
|  acpi_idle_enter_bm+0x8a/0x28e

As the acpi code disables interrupts in acpi_idle_enter_bm, and calls
code that grabs the acpi lock, it causes issues as the lock is currently
in RT a sleeping lock.

The lock was converted from a raw to a sleeping lock due to some
previous issues, and tests that showed it didn't seem to matter.
Unfortunately, it did matter for one of our boxes.

This patch converts the lock back to a raw lock. I've run this code on a
few of my own machines, one being my laptop that uses the acpi quite
extensively. I've been able to suspend and resume without issues.

[ tglx: Made the change exclusive for acpi_gbl_hardware_lock ]

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/1360765565.23152.5.camel@gandalf.local.home
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
[bigeasy: shorten the backtrace, use the type acpi_raw_spinlock incl.
 accessor]
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/acglobal.h
drivers/acpi/acpica/hwregs.c
drivers/acpi/acpica/hwxface.c
drivers/acpi/acpica/utmutex.c