From: Andrew Morton <akpm@osdl.org>
To: Ard -kwaak- van Breemen <ard@telegraafnet.nl>, Greg KH <greg@kroah.com>
Cc: "Zhang, Yanmin" <yanmin.zhang@intel.com>,
Chuck Ebbert <76306.1226@compuserve.com>,
Yinghai Lu <yinghai.lu@amd.com>,
take@libero.it, agalanin@mera.ru, linux-kernel@vger.kernel.org,
bugme-daemon@bugzilla.kernel.org,
"Eric W. Biederman" <ebiederm@xmission.com>
Subject: Re: [Bug 7505] Linux-2.6.18 fails to boot on AMD64 machine
Date: Thu, 28 Dec 2006 15:51:48 -0800 [thread overview]
Message-ID: <20061228155148.f5469729.akpm@osdl.org> (raw)
In-Reply-To: <20061222154234.GI31882@telegraafnet.nl>
Could someone please test this?
From: Andrew Morton <akpm@osdl.org>
Various people have reported machines failing to boot since pci_bus_sem was
switched from a spinlock to an rwsem.
The reason for this is that these people had "ide=" on the kernel commandline,
and ide_setup() can end up calling PCI functions which do
down_read(&pci_bus_sem).
Ard has worked out the call tree:
init/main.c start_kernel
kernel/params.c parse_args("Booting kernel"
kernel/params.c parse_one
drivers/ide/ide.c ide_setup
drivers/ide/ide.c init_ide_data
drivers/ide/ide.c init_hwif_default
include/asm-i386/ide.h ide_default_io_base(index)
drivers/pci/search.c pci_find_device
drivers/pci/search.c pci_find_subsys
down_read(&pci_bus_sem);
down_read() will unconditionally enable interrupts and some early interrupt
(source unknown) comes in and whacks the machine, apparently because the LDT
isn't set up yet.
Fix that by avoiding taking the semaphore in the PCI code in this situation.
Cc: Ard -kwaak- van Breemen <ard@telegraafnet.nl>
Cc: "Zhang, Yanmin" <yanmin.zhang@intel.com>
Cc: Chuck Ebbert <76306.1226@compuserve.com>
Cc: Yinghai Lu <yinghai.lu@amd.com>
Cc: <take@libero.it>
Cc: <agalanin@mera.ru>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---
drivers/pci/search.c | 10 ++++++++++
1 files changed, 10 insertions(+)
diff -puN drivers/pci/search.c~pci-avoid-taking-pci_bus_sem-early-in-boot drivers/pci/search.c
--- a/drivers/pci/search.c~pci-avoid-taking-pci_bus_sem-early-in-boot
+++ a/drivers/pci/search.c
@@ -259,6 +259,16 @@ pci_get_subsys(unsigned int vendor, unsi
struct pci_dev *dev;
WARN_ON(in_interrupt());
+
+ /*
+ * pci_get_subsys() can be called on the ide_setup() path, super-early
+ * in boot. But the down_read() will enable local interrupts, which
+ * can cause some machines to crash. So here we detect that situation
+ * and bail out early.
+ */
+ if (unlikely(list_empty(pci_devices)))
+ return NULL;
+
down_read(&pci_bus_sem);
n = from ? from->global_list.next : pci_devices.next;
_
next prev parent reply other threads:[~2006-12-28 23:52 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-22 4:41 Zhang, Yanmin
2006-12-22 8:22 ` Ard -kwaak- van Breemen
2006-12-22 8:30 ` Andrew Morton
2006-12-22 9:32 ` Stefano Takekawa
2006-12-22 9:43 ` Andrew Morton
2006-12-22 13:23 ` Stefano Takekawa
2006-12-22 10:30 ` Ard -kwaak- van Breemen
2006-12-22 14:00 ` Ard -kwaak- van Breemen
2006-12-22 14:16 ` Ard -kwaak- van Breemen
2006-12-22 19:10 ` Andrew Morton
2006-12-22 14:35 ` Ard -kwaak- van Breemen
2006-12-29 15:08 ` Ard -kwaak- van Breemen
2006-12-22 14:41 ` Ard -kwaak- van Breemen
2006-12-22 15:42 ` Ard -kwaak- van Breemen
2006-12-28 23:51 ` Andrew Morton [this message]
2006-12-29 10:18 ` Stefano Takekawa
2006-12-29 12:51 ` Ard -kwaak- van Breemen
2006-12-29 13:27 ` Ard -kwaak- van Breemen
2006-12-29 14:10 ` Ard -kwaak- van Breemen
2006-12-29 15:01 ` Ard -kwaak- van Breemen
2006-12-29 15:05 ` Ard -kwaak- van Breemen
2006-12-29 15:24 ` Ard -kwaak- van Breemen
2006-12-29 15:42 ` Ard -kwaak- van Breemen
2006-12-30 19:46 ` [PATCH 2.6.20-rc2-git1] start_kernel: Test if irq's got enabled early, barf, and disable them again Ard -kwaak- van Breemen
2008-03-03 22:46 ` Tony Luck
2008-03-04 0:34 ` Stephen Rothwell
2006-12-30 19:58 ` [PATCH 2.6.20-rc2-git1] kernelparams: detect if and which parameter parsing enabled irq's Ard -kwaak- van Breemen
2006-12-30 20:15 ` [PATCH 2.6.20-rc2-git1] PCI: prevent down_read when pci_devices is empty Ard -kwaak- van Breemen
-- strict thread matches above, loose matches on Subject: below --
2006-12-21 8:04 [Bug 7505] Linux-2.6.18 fails to boot on AMD64 machine Zhang, Yanmin
2006-12-21 19:52 ` Ard -kwaak- van Breemen
2006-12-21 20:11 ` Andrew Morton
2006-12-21 21:05 ` Ard -kwaak- van Breemen
2006-12-22 18:42 ` Ard -kwaak- van Breemen
2006-12-22 19:39 ` Stefano Takekawa
2006-12-20 9:59 Chuck Ebbert
2006-12-20 10:12 ` Yinghai Lu
2006-12-20 10:37 ` Andrew Morton
2006-12-20 10:55 ` Arjan van de Ven
2006-12-20 6:42 Chuck Ebbert
2006-12-20 9:11 ` Yinghai Lu
[not found] <200612181543.kBIFhcIc001555@fire-2.osdl.org>
2006-12-18 16:48 ` Eric W. Biederman
2006-12-20 1:29 ` Andrew Morton
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=20061228155148.f5469729.akpm@osdl.org \
--to=akpm@osdl.org \
--cc=76306.1226@compuserve.com \
--cc=agalanin@mera.ru \
--cc=ard@telegraafnet.nl \
--cc=bugme-daemon@bugzilla.kernel.org \
--cc=ebiederm@xmission.com \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=take@libero.it \
--cc=yanmin.zhang@intel.com \
--cc=yinghai.lu@amd.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®