• Yinghai Lu's avatar
    x86, apic: Move dmar_table_init() out of enable_IR() · b7f42ab2
    Yinghai Lu authored
    On an x2apic system, we got:
    
    [    1.818072] ------------[ cut here ]------------
    [    1.820376] WARNING: at kernel/lockdep.c:2461 lockdep_trace_alloc+0xa5/0xe9()
    [    1.835282] Hardware name: ASSY,
    [    1.839006] Modules linked in:
    [    1.841253] Pid: 1, comm: swapper Not tainted 2.6.31-rc5-tip-03926-g39aaa80-dirty #510
    [    1.858056] Call Trace:
    [    1.859913]  [<ffffffff810d13aa>] ? lockdep_trace_alloc+0xa5/0xe9
    [    1.876270]  [<ffffffff81093f37>] warn_slowpath_common+0x8d/0xd0
    [    1.879132]  [<ffffffff81093fa1>] warn_slowpath_null+0x27/0x3d
    [    1.896823]  [<ffffffff810d13aa>] lockdep_trace_alloc+0xa5/0xe9
    [    1.900659]  [<ffffffff810cf5a0>] ? lock_release_holdtime+0x2f/0x199
    [    1.917188]  [<ffffffff81167a3c>] kmem_cache_alloc_notrace+0x42/0x111
    [    1.922320]  [<ffffffff8106fe8c>] ? reserve_memtype+0x152/0x518
    [    1.938137]  [<ffffffff8106f8b1>] ? pat_pagerange_is_ram+0x4a/0x91
    [    1.941730]  [<ffffffff8106fe8c>] reserve_memtype+0x152/0x518
    [    1.958115]  [<ffffffff8106ce62>] __ioremap_caller+0x1dd/0x30f
    [    1.975507]  [<ffffffff81ce2c5c>] ? acpi_os_map_memory+0x2a/0x47
    [    1.978987]  [<ffffffff8106d0fd>] ioremap_nocache+0x2a/0x40
    [    2.031400]  [<ffffffff810d0364>] ? trace_hardirqs_off+0x20/0x36
    [    2.036096]  [<ffffffff81ce2c5c>] acpi_os_map_memory+0x2a/0x47
    [    2.046263]  [<ffffffff815cd642>] acpi_tb_verify_table+0x3d/0x85
    [    2.050349]  [<ffffffff81d34af7>] ? _spin_unlock_irqrestore+0x50/0x76
    [    2.067327]  [<ffffffff815ccad6>] acpi_get_table_with_size+0x64/0xd9
    [    2.070860]  [<ffffffff81d34af7>] ? _spin_unlock_irqrestore+0x50/0x76
    [    2.088000]  [<ffffffff825c88d5>] dmar_table_detect+0x33/0x70
    [    2.092047]  [<ffffffff825c8a01>] dmar_table_init+0x43/0x428
    [    2.106854]  [<ffffffff825a7537>] enable_IR+0x1c/0x8d
    [    2.110256]  [<ffffffff825a7624>] enable_IR_x2apic+0x7c/0x19e
    [    2.127139]  [<ffffffff825a4876>] native_smp_prepare_cpus+0x139/0x3b8
    [    2.145175]  [<ffffffff8259678d>] kernel_init+0x71/0x1da
    [    2.148913]  [<ffffffff8104305a>] child_rip+0xa/0x20
    [    2.152349]  [<ffffffff810429fc>] ? restore_args+0x0/0x30
    [    2.167931]  [<ffffffff8259671c>] ? kernel_init+0x0/0x1da
    [    2.171671]  [<ffffffff81043050>] ? child_rip+0x0/0x20
    [    2.187607] ---[ end trace a7919e7f17c0a725 ]---
    
    Venkatesh Pallipadi said:
    
    | Looks like the problem started with this commit
    |
    | commit ce69a784
    | Author: Gleb Natapov <gleb@redhat.com>
    | Date:   Mon Jul 20 15:24:17 2009 +0300
    |
    | x86/apic: Enable x2APIC without interrupt remapping under KVM
    |
    | Before this commit, dmar_table_init() was getting called
    | with interrupts enabled and after this commit, it is getting
    | called with interrupts disabled.
    
    so try to move out dmar_table_init out of that function.
    Analyzed-by: default avatarVenkatesh Pallipadi <venkatesh.pallipadi@intel.com>
    Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Gleb Natapov <gleb@redhat.com>
    Cc: Suresh Siddha <suresh.b.siddha@intel.com>
    Cc: "Pallipadi, Venkatesh" <venkatesh.pallipadi@intel.com>
    LKML-Reference: <4A899F3C.2050104@kernel.org>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    b7f42ab2
apic.c 55.3 KB