* [PATCH] x86: move dmar_table_init out of enable_IR
@ 2009-08-17 17:53 Yinghai Lu
[not found] ` <20090817180924.GA8599@elte.hu>
0 siblings, 1 reply; 6+ messages in thread
From: Yinghai Lu @ 2009-08-17 17:53 UTC (permalink / raw)
To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin
Cc: linux-kernel@vger.kernel.org, Peter Zijlstra, Gleb Natapov,
Suresh Siddha, Pallipadi, Venkatesh
on 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 ]---
Pallipadi, Venkatesh said
| Looks like the problem started with this commit
|
| commit ce69a784504222c3ab6f1b3c357d09ec5772127a
|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: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
arch/x86/kernel/apic/apic.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
Index: linux-2.6/arch/x86/kernel/apic/apic.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/apic/apic.c
+++ linux-2.6/arch/x86/kernel/apic/apic.c
@@ -1365,14 +1365,6 @@ void enable_x2apic(void)
int __init enable_IR(void)
{
#ifdef CONFIG_INTR_REMAP
- int ret;
-
- ret = dmar_table_init();
- if (ret) {
- pr_debug("dmar_table_init() failed with %d:\n", ret);
- return 0;
- }
-
if (!intr_remapping_supported()) {
pr_debug("intr-remapping not supported\n");
return 0;
@@ -1400,6 +1392,14 @@ void __init enable_IR_x2apic(void)
unsigned long flags;
struct IO_APIC_route_entry **ioapic_entries = NULL;
int ret, x2apic_enabled = 0;
+ int dmar_table_init_ret = 0;
+
+#ifdef CONFIG_INTR_REMAP
+ dmar_table_init_ret = dmar_table_init();
+ if (dmar_table_init_ret)
+ pr_debug("dmar_table_init() failed with %d:\n",
+ dmar_table_init_ret);
+#endif
ioapic_entries = alloc_ioapic_entries();
if (!ioapic_entries) {
@@ -1417,7 +1417,11 @@ void __init enable_IR_x2apic(void)
mask_8259A();
mask_IO_APIC_setup(ioapic_entries);
- ret = enable_IR();
+ if (dmar_table_init_ret)
+ ret = 0;
+ else
+ ret = enable_IR();
+
if (!ret) {
/* IR is required if there is APIC ID > 255 even when running
* under KVM
^ permalink raw reply [flat|nested] 6+ messages in thread[parent not found: <20090817180924.GA8599@elte.hu>]
* [PATCH] x86: move dmar_table_init out of enable_IR [not found] ` <20090817180924.GA8599@elte.hu> @ 2009-08-17 18:19 ` Yinghai Lu 2009-08-17 18:33 ` Suresh Siddha 2009-08-17 19:25 ` [tip:x86/apic] x86, apic: Move dmar_table_init() out of enable_IR() tip-bot for Yinghai Lu 0 siblings, 2 replies; 6+ messages in thread From: Yinghai Lu @ 2009-08-17 18:19 UTC (permalink / raw) To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin Cc: linux-kernel@vger.kernel.org, Peter Zijlstra, Gleb Natapov, Suresh Siddha, Pallipadi, Venkatesh on 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 ]--- Pallipadi, Venkatesh said | Looks like the problem started with this commit | | commit ce69a784504222c3ab6f1b3c357d09ec5772127a |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: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> Signed-off-by: Yinghai Lu <yinghai@kernel.org> --- arch/x86/kernel/apic/apic.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) Index: linux-2.6/arch/x86/kernel/apic/apic.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/apic/apic.c +++ linux-2.6/arch/x86/kernel/apic/apic.c @@ -1365,14 +1365,6 @@ void enable_x2apic(void) int __init enable_IR(void) { #ifdef CONFIG_INTR_REMAP - int ret; - - ret = dmar_table_init(); - if (ret) { - pr_debug("dmar_table_init() failed with %d:\n", ret); - return 0; - } - if (!intr_remapping_supported()) { pr_debug("intr-remapping not supported\n"); return 0; @@ -1400,6 +1392,14 @@ void __init enable_IR_x2apic(void) unsigned long flags; struct IO_APIC_route_entry **ioapic_entries = NULL; int ret, x2apic_enabled = 0; + int dmar_table_init_ret = 0; + +#ifdef CONFIG_INTR_REMAP + dmar_table_init_ret = dmar_table_init(); + if (dmar_table_init_ret) + pr_debug("dmar_table_init() failed with %d:\n", + dmar_table_init_ret); +#endif ioapic_entries = alloc_ioapic_entries(); if (!ioapic_entries) { @@ -1417,7 +1417,11 @@ void __init enable_IR_x2apic(void) mask_8259A(); mask_IO_APIC_setup(ioapic_entries); - ret = enable_IR(); + if (dmar_table_init_ret) + ret = 0; + else + ret = enable_IR(); + if (!ret) { /* IR is required if there is APIC ID > 255 even when running * under KVM ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] x86: move dmar_table_init out of enable_IR 2009-08-17 18:19 ` Yinghai Lu @ 2009-08-17 18:33 ` Suresh Siddha 2009-08-17 20:47 ` Yinghai Lu 2009-08-17 19:25 ` [tip:x86/apic] x86, apic: Move dmar_table_init() out of enable_IR() tip-bot for Yinghai Lu 1 sibling, 1 reply; 6+ messages in thread From: Suresh Siddha @ 2009-08-17 18:33 UTC (permalink / raw) To: Yinghai Lu Cc: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, linux-kernel@vger.kernel.org, Peter Zijlstra, Gleb Natapov, Pallipadi, Venkatesh On Mon, 2009-08-17 at 11:19 -0700, Yinghai Lu wrote: > --- > arch/x86/kernel/apic/apic.c | 22 +++++++++++++--------- > 1 file changed, 13 insertions(+), 9 deletions(-) > > Index: linux-2.6/arch/x86/kernel/apic/apic.c > =================================================================== > --- linux-2.6.orig/arch/x86/kernel/apic/apic.c > +++ linux-2.6/arch/x86/kernel/apic/apic.c > @@ -1365,14 +1365,6 @@ void enable_x2apic(void) > int __init enable_IR(void) > { > #ifdef CONFIG_INTR_REMAP > - int ret; > - > - ret = dmar_table_init(); > - if (ret) { > - pr_debug("dmar_table_init() failed with %d:\n", ret); > - return 0; > - } > - > if (!intr_remapping_supported()) { > pr_debug("intr-remapping not supported\n"); > return 0; > @@ -1400,6 +1392,14 @@ void __init enable_IR_x2apic(void) > unsigned long flags; > struct IO_APIC_route_entry **ioapic_entries = NULL; > int ret, x2apic_enabled = 0; > + int dmar_table_init_ret = 0; > + > +#ifdef CONFIG_INTR_REMAP > + dmar_table_init_ret = dmar_table_init(); > + if (dmar_table_init_ret) > + pr_debug("dmar_table_init() failed with %d:\n", > + dmar_table_init_ret); > +#endif We can remove this ifdef check, as dmar_table_init() already handles the !config_intr_remap Also, at this error condition, we should simply return if the cpu has no x2apic support. There is no x2apic support and we failed to enable interrupt-remapping. No need to go further down. thanks, suresh > > ioapic_entries = alloc_ioapic_entries(); > if (!ioapic_entries) { > @@ -1417,7 +1417,11 @@ void __init enable_IR_x2apic(void) > mask_8259A(); > mask_IO_APIC_setup(ioapic_entries); > > - ret = enable_IR(); > + if (dmar_table_init_ret) > + ret = 0; > + else > + ret = enable_IR(); > + > if (!ret) { > /* IR is required if there is APIC ID > 255 even when running > * under KVM > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] x86: move dmar_table_init out of enable_IR 2009-08-17 18:33 ` Suresh Siddha @ 2009-08-17 20:47 ` Yinghai Lu 2009-08-17 22:53 ` Suresh Siddha 0 siblings, 1 reply; 6+ messages in thread From: Yinghai Lu @ 2009-08-17 20:47 UTC (permalink / raw) To: Suresh Siddha Cc: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, linux-kernel@vger.kernel.org, Peter Zijlstra, Gleb Natapov, Pallipadi, Venkatesh Suresh Siddha wrote: > On Mon, 2009-08-17 at 11:19 -0700, Yinghai Lu wrote: >> --- >> arch/x86/kernel/apic/apic.c | 22 +++++++++++++--------- >> 1 file changed, 13 insertions(+), 9 deletions(-) >> >> Index: linux-2.6/arch/x86/kernel/apic/apic.c >> =================================================================== >> --- linux-2.6.orig/arch/x86/kernel/apic/apic.c >> +++ linux-2.6/arch/x86/kernel/apic/apic.c >> @@ -1365,14 +1365,6 @@ void enable_x2apic(void) >> int __init enable_IR(void) >> { >> #ifdef CONFIG_INTR_REMAP >> - int ret; >> - >> - ret = dmar_table_init(); >> - if (ret) { >> - pr_debug("dmar_table_init() failed with %d:\n", ret); >> - return 0; >> - } >> - >> if (!intr_remapping_supported()) { >> pr_debug("intr-remapping not supported\n"); >> return 0; >> @@ -1400,6 +1392,14 @@ void __init enable_IR_x2apic(void) >> unsigned long flags; >> struct IO_APIC_route_entry **ioapic_entries = NULL; >> int ret, x2apic_enabled = 0; >> + int dmar_table_init_ret = 0; >> + >> +#ifdef CONFIG_INTR_REMAP >> + dmar_table_init_ret = dmar_table_init(); >> + if (dmar_table_init_ret) >> + pr_debug("dmar_table_init() failed with %d:\n", >> + dmar_table_init_ret); >> +#endif > > We can remove this ifdef check, as dmar_table_init() already handles > the !config_intr_remap > > Also, at this error condition, we should simply return if the cpu has no > x2apic support. There is no x2apic support and we failed to enable > interrupt-remapping. No need to go further down. like this ? --- arch/x86/kernel/apic/apic.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) Index: linux-2.6/arch/x86/kernel/apic/apic.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/apic/apic.c +++ linux-2.6/arch/x86/kernel/apic/apic.c @@ -1392,14 +1392,11 @@ void __init enable_IR_x2apic(void) unsigned long flags; struct IO_APIC_route_entry **ioapic_entries = NULL; int ret, x2apic_enabled = 0; - int dmar_table_init_ret = 0; + int dmar_table_init_ret; -#ifdef CONFIG_INTR_REMAP dmar_table_init_ret = dmar_table_init(); - if (dmar_table_init_ret) - pr_debug("dmar_table_init() failed with %d:\n", - dmar_table_init_ret); -#endif + if (dmar_table_init_ret && !x2apic_supported()) + return; ioapic_entries = alloc_ioapic_entries(); if (!ioapic_entries) { ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] x86: move dmar_table_init out of enable_IR 2009-08-17 20:47 ` Yinghai Lu @ 2009-08-17 22:53 ` Suresh Siddha 0 siblings, 0 replies; 6+ messages in thread From: Suresh Siddha @ 2009-08-17 22:53 UTC (permalink / raw) To: Yinghai Lu Cc: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, linux-kernel@vger.kernel.org, Peter Zijlstra, Gleb Natapov, Pallipadi, Venkatesh On Mon, 2009-08-17 at 13:47 -0700, Yinghai Lu wrote: > Suresh Siddha wrote: > > > > We can remove this ifdef check, as dmar_table_init() already handles > > the !config_intr_remap > > > > Also, at this error condition, we should simply return if the cpu has no > > x2apic support. There is no x2apic support and we failed to enable > > interrupt-remapping. No need to go further down. > > like this ? > > --- > arch/x86/kernel/apic/apic.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > Index: linux-2.6/arch/x86/kernel/apic/apic.c > =================================================================== > --- linux-2.6.orig/arch/x86/kernel/apic/apic.c > +++ linux-2.6/arch/x86/kernel/apic/apic.c > @@ -1392,14 +1392,11 @@ void __init enable_IR_x2apic(void) > unsigned long flags; > struct IO_APIC_route_entry **ioapic_entries = NULL; > int ret, x2apic_enabled = 0; > - int dmar_table_init_ret = 0; > + int dmar_table_init_ret; > > -#ifdef CONFIG_INTR_REMAP > dmar_table_init_ret = dmar_table_init(); > - if (dmar_table_init_ret) > - pr_debug("dmar_table_init() failed with %d:\n", > - dmar_table_init_ret); > -#endif > + if (dmar_table_init_ret && !x2apic_supported()) > + return; > > ioapic_entries = alloc_ioapic_entries(); > if (!ioapic_entries) { Ack. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [tip:x86/apic] x86, apic: Move dmar_table_init() out of enable_IR() 2009-08-17 18:19 ` Yinghai Lu 2009-08-17 18:33 ` Suresh Siddha @ 2009-08-17 19:25 ` tip-bot for Yinghai Lu 1 sibling, 0 replies; 6+ messages in thread From: tip-bot for Yinghai Lu @ 2009-08-17 19:25 UTC (permalink / raw) To: linux-tip-commits Cc: linux-kernel, hpa, mingo, yinghai, peterz, venkatesh.pallipadi, gleb, suresh.b.siddha, tglx, mingo Commit-ID: b7f42ab2e237f08a5bbcefa17473e80eb05e725c Gitweb: http://git.kernel.org/tip/b7f42ab2e237f08a5bbcefa17473e80eb05e725c Author: Yinghai Lu <yinghai@kernel.org> AuthorDate: Mon, 17 Aug 2009 11:19:40 -0700 Committer: Ingo Molnar <mingo@elte.hu> CommitDate: Mon, 17 Aug 2009 20:22:56 +0200 x86, apic: Move dmar_table_init() out of enable_IR() 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 ce69a784504222c3ab6f1b3c357d09ec5772127a | 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: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> Signed-off-by: Yinghai 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: Ingo Molnar <mingo@elte.hu> --- arch/x86/kernel/apic/apic.c | 22 +++++++++++++--------- 1 files changed, 13 insertions(+), 9 deletions(-) diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index de039fc..3fc3a6c 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -1365,14 +1365,6 @@ void enable_x2apic(void) int __init enable_IR(void) { #ifdef CONFIG_INTR_REMAP - int ret; - - ret = dmar_table_init(); - if (ret) { - pr_debug("dmar_table_init() failed with %d:\n", ret); - return 0; - } - if (!intr_remapping_supported()) { pr_debug("intr-remapping not supported\n"); return 0; @@ -1400,6 +1392,14 @@ void __init enable_IR_x2apic(void) unsigned long flags; struct IO_APIC_route_entry **ioapic_entries = NULL; int ret, x2apic_enabled = 0; + int dmar_table_init_ret = 0; + +#ifdef CONFIG_INTR_REMAP + dmar_table_init_ret = dmar_table_init(); + if (dmar_table_init_ret) + pr_debug("dmar_table_init() failed with %d:\n", + dmar_table_init_ret); +#endif ioapic_entries = alloc_ioapic_entries(); if (!ioapic_entries) { @@ -1417,7 +1417,11 @@ void __init enable_IR_x2apic(void) mask_8259A(); mask_IO_APIC_setup(ioapic_entries); - ret = enable_IR(); + if (dmar_table_init_ret) + ret = 0; + else + ret = enable_IR(); + if (!ret) { /* IR is required if there is APIC ID > 255 even when running * under KVM ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-08-17 22:54 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-17 17:53 [PATCH] x86: move dmar_table_init out of enable_IR Yinghai Lu
[not found] ` <20090817180924.GA8599@elte.hu>
2009-08-17 18:19 ` Yinghai Lu
2009-08-17 18:33 ` Suresh Siddha
2009-08-17 20:47 ` Yinghai Lu
2009-08-17 22:53 ` Suresh Siddha
2009-08-17 19:25 ` [tip:x86/apic] x86, apic: Move dmar_table_init() out of enable_IR() tip-bot for Yinghai Lu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox