mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
fix jvc cdrom drive lockup
Before calling init_hwif_default, ide_unregister gets lock ide_lock and disables irq. init_hwif_default calls ide_default_io_base which calls pci_get_device and later pci_get_subsys tries to apply for semaphore pci_bus_sem and goes to sleep. Mostly, pci_get_device should be called when irq is turned on. ide_default_io_base just needs find if list pci_devices is empty. Signed-off-by: Zhang Yanmin <[email protected]> Cc: Greg KH <[email protected]> Cc: Bartlomiej Zolnierkiewicz <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
012bfdf00c
commit
ed4aaadb1a
3 changed files with 16 additions and 3 deletions
|
|
@ -40,14 +40,13 @@ static __inline__ int ide_default_irq(unsigned long base)
|
|||
|
||||
static __inline__ unsigned long ide_default_io_base(int index)
|
||||
{
|
||||
struct pci_dev *pdev;
|
||||
/*
|
||||
* If PCI is present then it is not safe to poke around
|
||||
* the other legacy IDE ports. Only 0x1f0 and 0x170 are
|
||||
* defined compatibility mode ports for PCI. A user can
|
||||
* override this using ide= but we must default safe.
|
||||
*/
|
||||
if ((pdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL)) == NULL) {
|
||||
if (no_pci_devices()) {
|
||||
switch(index) {
|
||||
case 2: return 0x1e8;
|
||||
case 3: return 0x168;
|
||||
|
|
@ -55,7 +54,6 @@ static __inline__ unsigned long ide_default_io_base(int index)
|
|||
case 5: return 0x160;
|
||||
}
|
||||
}
|
||||
pci_dev_put(pdev);
|
||||
switch (index) {
|
||||
case 0: return 0x1f0;
|
||||
case 1: return 0x170;
|
||||
|
|
|
|||
Loading…
Reference in a new issue