mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
ide: don't try to unregister interfaces if 'initializing' in ide_register_hw()
Host drivers using ide_register_hw() and 'initializing == 1': * ide-pnp - depends on ISA * ide_arm - ARM arch specific - initialized before all other host drivers * ide-cris - CRIS arch specific => IDE_ARCH_OBSOLETE_INIT is not defined - broken * ide-h8300 - H8300 arch specific => IDE_ARCH_OBSOLETE_INIT is not defined, no PCI * buddha/q40/gayle/macide/falconide - M68K arch specific => IDE_ARCH_OBSOLETE_INIT is not defined, no PCI Since the only host drivers which probe interfaces before the above ones are: * ali14xx/dtc2278/ht6560b/qd65xx/umc8672 - depend on ISA - require IDE_ARCH_OBSOLETE_INIT=y to work * PCI ones - depend on PCI don't try to unregister interfaces if 'initializing == 1' in ide_register_hw() (it is possible that built-in host drivers will claim all IDE interfaces but later ide-pnp host driver will try to unregister them - this change fixes it). Also skip hwif->hold check if 'initializing == 1' since it is set only by: * pmac - PPC && PMAC specific => no ISA * au1xxx-ide - MIPS && SOC_AU1200 specific => no ISA and use ide_find_port() helper to find free ide_hwifs[] slot. Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
f01393e48c
commit
795d74b51a
1 changed files with 10 additions and 2 deletions
|
@ -694,6 +694,15 @@ int ide_register_hw(hw_regs_t *hw, void (*quirkproc)(ide_drive_t *),
|
|||
int index, retry = 1;
|
||||
ide_hwif_t *hwif;
|
||||
|
||||
if (initializing) {
|
||||
hwif = ide_find_port(hw->io_ports[IDE_DATA_OFFSET]);
|
||||
if (hwif) {
|
||||
index = hwif->index;
|
||||
goto found;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
do {
|
||||
for (index = 0; index < MAX_HWIFS; ++index) {
|
||||
hwif = &ide_hwifs[index];
|
||||
|
@ -704,8 +713,7 @@ int ide_register_hw(hw_regs_t *hw, void (*quirkproc)(ide_drive_t *),
|
|||
hwif = &ide_hwifs[index];
|
||||
if (hwif->hold)
|
||||
continue;
|
||||
if ((!hwif->present && !hwif->mate && !initializing) ||
|
||||
(!hwif->io_ports[IDE_DATA_OFFSET] && initializing))
|
||||
if (!hwif->present && hwif->mate == NULL)
|
||||
goto found;
|
||||
}
|
||||
for (index = 0; index < MAX_HWIFS; index++)
|
||||
|
|
Loading…
Reference in a new issue