All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Stoney Wang <song-bo.wang@hp.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@kernel.org,
	yinghai@kernel.org, song-bo.wang@hp.com, tglx@linutronix.de
Subject: [tip:x86/urgent] x86/apic: Work around boot failure on HP ProLiant DL980 G7 Server systems
Date: Mon, 11 Feb 2013 04:37:11 -0800	[thread overview]
Message-ID: <tip-cb214ede7657db458fd0b2a25ea0b28dbf900ebc@git.kernel.org> (raw)
In-Reply-To: <1360263182-16226-1-git-send-email-yinghai@kernel.org>

Commit-ID:  cb214ede7657db458fd0b2a25ea0b28dbf900ebc
Gitweb:     http://git.kernel.org/tip/cb214ede7657db458fd0b2a25ea0b28dbf900ebc
Author:     Stoney Wang <song-bo.wang@hp.com>
AuthorDate: Thu, 7 Feb 2013 10:53:02 -0800
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Mon, 11 Feb 2013 11:13:00 +0100

x86/apic: Work around boot failure on HP ProLiant DL980 G7 Server systems

When a HP ProLiant DL980 G7 Server boots a regular kernel,
there will be intermittent lost interrupts which could
result in a hang or (in extreme cases) data loss.

The reason is that this system only supports x2apic physical
mode, while the kernel boots with a logical-cluster default
setting.

This bug can be worked around by specifying the "x2apic_phys" or
"nox2apic" boot option, but we want to handle this system
without requiring manual workarounds.

The BIOS sets ACPI_FADT_APIC_PHYSICAL in FADT table.
As all apicids are smaller than 255, BIOS need to pass the
control to the OS with xapic mode, according to x2apic-spec,
chapter 2.9.

Current code handle x2apic when BIOS pass with xapic mode
enabled:

When user specifies x2apic_phys, or FADT indicates PHYSICAL:

1. During madt oem check, apic driver is set with xapic logical
   or xapic phys driver at first.

2. enable_IR_x2apic() will enable x2apic_mode.

3. if user specifies x2apic_phys on the boot line, x2apic_phys_probe()
   will install the correct x2apic phys driver and use x2apic phys mode.
   Otherwise it will skip the driver will let x2apic_cluster_probe to
   take over to install x2apic cluster driver (wrong one) even though FADT
   indicates PHYSICAL, because x2apic_phys_probe does not check
   FADT PHYSICAL.

Add checking x2apic_fadt_phys in x2apic_phys_probe() to fix the
problem.

Signed-off-by: Stoney Wang <song-bo.wang@hp.com>
[ updated the changelog and simplified the code ]
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: stable@kernel.org
Link: http://lkml.kernel.org/r/1360263182-16226-1-git-send-email-yinghai@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/kernel/apic/x2apic_phys.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/arch/x86/kernel/apic/x2apic_phys.c b/arch/x86/kernel/apic/x2apic_phys.c
index e03a1e1..562a76d 100644
--- a/arch/x86/kernel/apic/x2apic_phys.c
+++ b/arch/x86/kernel/apic/x2apic_phys.c
@@ -20,18 +20,19 @@ static int set_x2apic_phys_mode(char *arg)
 }
 early_param("x2apic_phys", set_x2apic_phys_mode);
 
-static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+static bool x2apic_fadt_phys(void)
 {
-	if (x2apic_phys)
-		return x2apic_enabled();
-	else if ((acpi_gbl_FADT.header.revision >= FADT2_REVISION_ID) &&
-		(acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL) &&
-		x2apic_enabled()) {
+	if ((acpi_gbl_FADT.header.revision >= FADT2_REVISION_ID) &&
+		(acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL)) {
 		printk(KERN_DEBUG "System requires x2apic physical mode\n");
-		return 1;
+		return true;
 	}
-	else
-		return 0;
+	return false;
+}
+
+static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+{
+	return x2apic_enabled() && (x2apic_phys || x2apic_fadt_phys());
 }
 
 static void
@@ -82,7 +83,7 @@ static void init_x2apic_ldr(void)
 
 static int x2apic_phys_probe(void)
 {
-	if (x2apic_mode && x2apic_phys)
+	if (x2apic_mode && (x2apic_phys || x2apic_fadt_phys()))
 		return 1;
 
 	return apic == &apic_x2apic_phys;

  reply	other threads:[~2013-02-11 12:37 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-15  1:50 [PATCH] x86/apic: check FADT settings after enable x2apic Stoney Wang
2013-01-28  5:05 ` Wang, Song-Bo (Stoney)
2013-01-28  6:57   ` Yinghai Lu
2013-01-28 10:11     ` Ingo Molnar
2013-01-28 18:10       ` Yinghai Lu
2013-01-29  7:47         ` Ingo Molnar
2013-01-29  8:43           ` Wang, Song-Bo (Stoney)
2013-01-29  8:49             ` Ingo Molnar
2013-01-29 21:30               ` Yinghai Lu
2013-01-29 21:52               ` Yinghai Lu
2013-01-31 11:32                 ` Ingo Molnar
2013-01-31 15:56                   ` Yinghai Lu
2013-02-04  6:41                   ` Wang, Song-Bo (Stoney)
2013-02-04 11:03                     ` Ingo Molnar
2013-02-04 20:29                       ` [PATCH] x86, apic: Check fadt x2apic phys in x2apic_phys_probe() Yinghai Lu
2013-02-05 12:24                         ` Ingo Molnar
2013-02-05 16:53                           ` Yinghai Lu
2013-02-06 13:16                             ` Ingo Molnar
2013-02-06 17:10                               ` Yinghai Lu
2013-02-07 18:53                                 ` [PATCH v4] " Yinghai Lu
2013-02-11 12:37                                   ` tip-bot for Stoney Wang [this message]
2013-02-18  8:52                                   ` Lin-Bao Zhang
2013-02-18 17:13                                     ` Yinghai Lu

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-cb214ede7657db458fd0b2a25ea0b28dbf900ebc@git.kernel.org \
    --to=song-bo.wang@hp.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=yinghai@kernel.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.