Bug 12252

Summary: new oops on resume due to ACPI_PREEMPTION_POINT()
Product: ACPI Reporter: Len Brown (lenb)
Component: Power-Sleep-WakeAssignee: Len Brown (lenb)
Severity: normal CC: acpi-bugzilla, astarikovskiy, rjw
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 2.6.28-rc8 Subsystem:
Regression: Yes Bisected commit-id:
Bug Depends on:    
Bug Blocks: 7216, 11808    
Attachments: patch vs 2.6.28-rc8 from Wu Fengguang

Description Len Brown 2008-12-18 18:17:38 UTC
Latest working kernel version: 2.6.27
Earliest failing kernel version: 2.6.28-rc8
Distribution: FC10
Hardware Environment: Lenovo T61
Problem Description:

suspend to ram
look at dmesg

BUG: sleeping function called from invalid context at kernel/sched.c:5571
in_atomic(): 0, irqs_disabled(): 1, pid: 3880, name: bash
Pid: 3880, comm: bash Not tainted 2.6.28-rc8-09690-g55dac3a-dirty #70
Call Trace:
 [<ffffffff8022c0e4>] __might_sleep+0xcf/0xd1
 [<ffffffff8023351b>] __cond_resched+0x15/0x54
 [<ffffffff80588477>] _cond_resched+0x2d/0x38
 [<ffffffff803a9f41>] acpi_ps_complete_op+0x26d/0x283
 [<ffffffff803b1448>] ? acpi_ut_create_generic_state+0x31/0x4e
 [<ffffffff803aa708>] acpi_ps_parse_loop+0x7b1/0x941
 [<ffffffff803a9789>] acpi_ps_parse_aml+0xee/0x3c0
 [<ffffffff803aaf93>] acpi_ps_execute_method+0x18a/0x293
 [<ffffffff803a62d8>] acpi_ns_evaluate+0x1e4/0x33c
 [<ffffffff803ac576>] acpi_rs_set_srs_method_data+0xdb/0xfd
 [<ffffffff803ac069>] acpi_set_current_resources+0x37/0x45
 [<ffffffff803b8999>] acpi_pci_link_set+0x129/0x23d
 [<ffffffff8024c1aa>] ? retrigger_next_event+0xb4/0xbf
 [<ffffffff803b8b4b>] irqrouter_resume+0x9e/0xb6
 [<ffffffff803e8bc0>] __sysdev_resume+0x1f/0x50
 [<ffffffff803e8cee>] sysdev_resume+0xfd/0x143
 [<ffffffff803eece8>] device_power_up+0x10/0x1b
 [<ffffffff8025bee7>] suspend_devices_and_enter+0x12a/0x1b3
 [<ffffffff8025c199>] enter_state+0x200/0x290
 [<ffffffff8025c2e0>] state_store+0xb7/0xd8
 [<ffffffff8037186b>] kobj_attr_store+0x17/0x19
 [<ffffffff802d8945>] sysfs_write_file+0xdf/0x114
 [<ffffffff80294e5d>] vfs_write+0xae/0x137
 [<ffffffff80294faa>] sys_write+0x47/0x70
 [<ffffffff8020b3db>] system_call_fastpath+0x16/0x1b

commit 8bd108d14604d9c95000751e6c6ecbd11ea6ed40
Author: Alexey Starikovskiy <astarikovskiy@suse.de>
Date:   Thu Sep 25 21:40:30 2008 +0400

    ACPICA: add preemption point after each opcode parse
    Reference: http://marc.info/?l=linux-acpi&m=122236382701062&w=2
Comment 1 Len Brown 2008-12-18 18:22:36 UTC
irqrouter_resume() runs with interrupts disabled
and it invokes _CRS, _PRS, and _SRS on the
non-disabled link devices.

(Besides _GTS and _BFS, these are the only reserved
 methods that are evaluated with interrupts off.)

On the T61 boot with with "noapic" and "pci=nomsi"
to make sure the links are used instead of disabled
to expose this.
Comment 2 ykzhao 2008-12-18 18:59:22 UTC
Hi, Len
    Will you please try the following patch and see whether it will help?
Comment 3 Len Brown 2008-12-18 21:55:50 UTC
Created attachment 19370 [details]
patch vs 2.6.28-rc8 from Wu Fengguang

this patch is now applied to the acpi tree
Comment 4 Rafael J. Wysocki 2008-12-19 09:06:10 UTC
Handled-By : Len Brown <lenb@kernel.org>
Patch : http://bugzilla.kernel.org/attachment.cgi?id=19370&action=view