Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=795d74b51a853e1f5f2c81baf6666836a3866f08
Commit:     795d74b51a853e1f5f2c81baf6666836a3866f08
Parent:     f01393e48c44e30f7c9a36c8b98a07b0232580fe
Author:     Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
AuthorDate: Sat Jan 26 20:13:03 2008 +0100
Committer:  Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
CommitDate: Sat Jan 26 20:13:03 2008 +0100

    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 <[EMAIL PROTECTED]>
    Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
---
 drivers/ide/ide.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 0d7328e..8ef521f 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -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++)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to