From: tip-bot for Baoquan He <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: mingo@kernel.org, ebiederm@xmission.com, bhe@redhat.com,
tglx@linutronix.de, linux-kernel@vger.kernel.org, hpa@zytor.com,
torvalds@linux-foundation.org, peterz@infradead.org
Subject: [tip:x86/apic] x86/apic: Fix restoring boot IRQ mode in reboot and kexec/kdump
Date: Sat, 17 Feb 2018 03:42:10 -0800 [thread overview]
Message-ID: <tip-339b2ae0cd5d4a58f9efe06e4ee36adbeca59228@git.kernel.org> (raw)
In-Reply-To: <20180214054656.3780-4-bhe@redhat.com>
Commit-ID: 339b2ae0cd5d4a58f9efe06e4ee36adbeca59228
Gitweb: https://git.kernel.org/tip/339b2ae0cd5d4a58f9efe06e4ee36adbeca59228
Author: Baoquan He <bhe@redhat.com>
AuthorDate: Wed, 14 Feb 2018 13:46:53 +0800
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Sat, 17 Feb 2018 11:47:45 +0100
x86/apic: Fix restoring boot IRQ mode in reboot and kexec/kdump
This is a regression fix.
Before, to fix erratum AVR31, the following commit:
522e66464467 ("x86/apic: Disable I/O APIC before shutdown of the local APIC")
... moved the lapic_shutdown() call to after disable_IO_APIC() in the reboot
and kexec/kdump code paths.
This introduced the following regression: disable_IO_APIC() not only clears
the IO-APIC, but it also restores boot IRQ mode by setting the
LAPIC/APIC/IMCR, calling lapic_shutdown() after disable_IO_APIC() will
disable LAPIC and ruin the possible virtual wire mode setting which
the code has been trying to do all along.
The consequence is that a KVM guest kernel always prints the warning below
during kexec/kdump as the kernel boots up:
[ 0.001000] WARNING: CPU: 0 PID: 0 at arch/x86/kernel/apic/apic.c:1467 setup_local_APIC+0x228/0x330
[ ........]
[ 0.001000] Call Trace:
[ 0.001000] apic_bsp_setup+0x56/0x74
[ 0.001000] x86_late_time_init+0x11/0x16
[ 0.001000] start_kernel+0x3c9/0x486
[ 0.001000] secondary_startup_64+0xa5/0xb0
[ ........]
[ 0.001000] masked ExtINT on CPU#0
To fix this, just call clear_IO_APIC() to stop the IO-APIC where
disable_IO_APIC() was called, and call restore_boot_irq_mode() to
restore boot IRQ mode before a reboot or a kexec/kdump jump.
Signed-off-by: Baoquan He <bhe@redhat.com>
Reviewed-by: Eric W. Biederman <ebiederm@xmission.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: douly.fnst@cn.fujitsu.com
Cc: joro@8bytes.org
Cc: prarit@redhat.com
Cc: stable@vger.kernel.org
Cc: uobergfe@redhat.com
Fixes: commit 522e66464467 ("x86/apic: Disable I/O APIC before shutdown of the local APIC")
Link: http://lkml.kernel.org/r/20180214054656.3780-4-bhe@redhat.com
[ Rewrote the changelog. ]
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/kernel/crash.c | 3 ++-
arch/x86/kernel/reboot.c | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
index 10e74d4..1f66804 100644
--- a/arch/x86/kernel/crash.c
+++ b/arch/x86/kernel/crash.c
@@ -199,9 +199,10 @@ void native_machine_crash_shutdown(struct pt_regs *regs)
#ifdef CONFIG_X86_IO_APIC
/* Prevent crash_kexec() from deadlocking on ioapic_lock. */
ioapic_zap_locks();
- disable_IO_APIC();
+ clear_IO_APIC();
#endif
lapic_shutdown();
+ restore_boot_irq_mode();
#ifdef CONFIG_HPET_TIMER
hpet_disable();
#endif
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
index 2126b9d..725624b 100644
--- a/arch/x86/kernel/reboot.c
+++ b/arch/x86/kernel/reboot.c
@@ -666,7 +666,7 @@ void native_machine_shutdown(void)
* Even without the erratum, it still makes sense to quiet IO APIC
* before disabling Local APIC.
*/
- disable_IO_APIC();
+ clear_IO_APIC();
#endif
#ifdef CONFIG_SMP
@@ -680,6 +680,7 @@ void native_machine_shutdown(void)
#endif
lapic_shutdown();
+ restore_boot_irq_mode();
#ifdef CONFIG_HPET_TIMER
hpet_disable();
next prev parent reply other threads:[~2018-02-17 11:42 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-14 5:46 [PATCH v5 0/6] x86/apic: Fix restoring boot irq mode in reboot and kexec/kdump Baoquan He
2018-02-14 5:46 ` [PATCH v5 1/6] x86/apic: Split out restore_boot_irq_mode from disable_IO_APIC Baoquan He
2018-02-17 11:41 ` [tip:x86/apic] x86/apic: Split out restore_boot_irq_mode() from disable_IO_APIC() tip-bot for Baoquan He
2018-02-14 5:46 ` [PATCH v5 2/6] x86/apic: Replace disable_IO_APIC for KEXEC_JUMP Baoquan He
2018-02-17 11:41 ` [tip:x86/apic] x86/apic: Split disable_IO_APIC() into two functions to fix CONFIG_KEXEC_JUMP=y tip-bot for Baoquan He
2018-02-14 5:46 ` [PATCH v5 3/6] x86/apic: Fix restoring boot irq mode in reboot and kexec/kdump Baoquan He
2018-02-17 11:42 ` tip-bot for Baoquan He [this message]
2018-02-14 5:46 ` [PATCH v5 4/6] x86/apic: Remove useless disable_IO_APIC Baoquan He
2018-02-17 11:42 ` [tip:x86/apic] x86/apic: Remove the (now) unused disable_IO_APIC() function tip-bot for Baoquan He
2018-02-14 5:46 ` [PATCH v5 5/6] x86/apic: Rename variable/function related to x86_io_apic_ops Baoquan He
2018-02-17 11:43 ` [tip:x86/apic] x86/apic: Rename variables and functions " tip-bot for Baoquan He
2018-02-14 5:46 ` [PATCH v5 6/6] x86/apic: Set up through-local-APIC on boot CPU if 'noapic' specified Baoquan He
2018-02-17 11:43 ` [tip:x86/apic] x86/apic: Set up through-local-APIC mode on the " tip-bot for Baoquan He
2018-02-16 9:38 ` [PATCH v5 0/6] x86/apic: Fix restoring boot irq mode in reboot and kexec/kdump Ingo Molnar
2018-02-16 10:24 ` Baoquan He
2018-02-17 10:46 ` Ingo Molnar
2018-02-17 11:28 ` Baoquan He
2018-02-16 19:16 ` Eric W. Biederman
2018-02-17 10:17 ` Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-339b2ae0cd5d4a58f9efe06e4ee36adbeca59228@git.kernel.org \
--to=tipbot@zytor.com \
--cc=bhe@redhat.com \
--cc=ebiederm@xmission.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.