ide: don't try to unregister interfaces if 'initializing' in ide_register_hw()
PATCH 8/21 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.
--- drivers/ide/ide.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
drivers/ide/ide.c +10 -2
@@ -694,6 +694,15 @@ int ide_register_hw(hw_regs_t *hw, voidint 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 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++)
Quoted 37 lines · Bartlomiej Zolnierkiewicz
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_INITis not defined
- broken* ide-h8300
- H8300 arch specific =>IDE_ARCH_OBSOLETE_INITis not defined, no PCI* buddha/q40/gayle/macide/falconide
- M68K arch specific =>IDE_ARCH_OBSOLETE_INITis not defined, no PCISince 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 PCIdon'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->holdcheck if 'initializing == 1' since it is set only by:* pmac
- PPC && PMAC specific => no ISA
Quoted 6 lines
* au1xxx-ide
- MIPS &&SOC_AU1200specific => no ISAand use
ide_find_port()helper to find free ide_hwifs[] slot.Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
MBR, Sergei