lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Thu, 25 Jan 2018 22:11:34 +0800
From:   Baoquan He <bhe@...hat.com>
To:     linux-kernel@...r.kernel.org
Cc:     ebiederm@...ssion.com, tglx@...utronix.de, mingo@...hat.com,
        hpa@...or.com, x86@...nel.org, douly.fnst@...fujitsu.com,
        joro@...tes.org, uobergfe@...hat.com, prarit@...hat.com,
        Baoquan He <bhe@...hat.com>
Subject: [PATCH v2 2/2] x86/apic: Set up through-local-APIC on boot CPU's LINT0 if 'noapic' specified

Kdump kernel will become very slow if 'noapic' is specified. Normal kernel
won't.

In normal kernel the legacy irq mode is enabled in BIOS. If it is virtual
virtual wire mode, the local-APIC has been enabled and set as
through-local-APIC. Though specifying 'noapic' in normal kernel it still
have the virtual wire mode working. In kdump kernel, local-APIC is disabled
in crashed kernel before jump to kdump kernel since commit 522e664644
("x86/apic: Disable I/O APIC before shutdown of the local APIC"). So we
need set up through-local-APIC on boot CPU explicitly in setup_local_APIC()
if 'noapic' specified.

Do it now.

Signed-off-by: Baoquan He <bhe@...hat.com>
---
 arch/x86/kernel/apic/apic.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index 25ddf02598d2..3fc259b4dd2d 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -1570,7 +1570,7 @@ void setup_local_APIC(void)
 	 * TODO: set up through-local-APIC from through-I/O-APIC? --macro
 	 */
 	value = apic_read(APIC_LVT0) & APIC_LVT_MASKED;
-	if (!cpu && (pic_mode || !value)) {
+	if (!cpu && (pic_mode || !value || skip_ioapic_setup)) {
 		value = APIC_DM_EXTINT;
 		apic_printk(APIC_VERBOSE, "enabled ExtINT on CPU#%d\n", cpu);
 	} else {
-- 
2.13.6

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ