mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-12 08:09:56 +00:00
[MIPS] No ide_default_io_base() if PCI IDE was not found
Revert b5438582090406e2ccb4169d9b2df7c9939ae42b and add no_pci_devices() check to avoid crash due to early calling of pci_get_class(). Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
b1043cc7d9
commit
6440fcfc62
@ -29,6 +29,35 @@
|
||||
|
||||
#define IDE_ARCH_OBSOLETE_DEFAULTS
|
||||
|
||||
static __inline__ int ide_probe_legacy(void)
|
||||
{
|
||||
#ifdef CONFIG_PCI
|
||||
struct pci_dev *dev;
|
||||
/*
|
||||
* This 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
|
||||
* and flag that situation and bail out early.
|
||||
*/
|
||||
if (no_pci_devices())
|
||||
return 0;
|
||||
dev = pci_get_class(PCI_CLASS_BRIDGE_EISA << 8, NULL);
|
||||
if (dev)
|
||||
goto found;
|
||||
dev = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
|
||||
if (dev)
|
||||
goto found;
|
||||
return 0;
|
||||
found:
|
||||
pci_dev_put(dev);
|
||||
return 1;
|
||||
#elif defined(CONFIG_EISA) || defined(CONFIG_ISA)
|
||||
return 1;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static __inline__ int ide_default_irq(unsigned long base)
|
||||
{
|
||||
switch (base) {
|
||||
@ -45,6 +74,8 @@ static __inline__ int ide_default_irq(unsigned long base)
|
||||
|
||||
static __inline__ unsigned long ide_default_io_base(int index)
|
||||
{
|
||||
if (!ide_probe_legacy())
|
||||
return 0;
|
||||
/*
|
||||
* If PCI is present then it is not safe to poke around
|
||||
* the other legacy IDE ports. Only 0x1f0 and 0x170 are
|
||||
|
Loading…
x
Reference in New Issue
Block a user