Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a14dc57495899175a0827673fe23ed17b5653896
Commit:     a14dc57495899175a0827673fe23ed17b5653896
Parent:     e84e7ea7c4d0a6d7fbaecab2d85df0298cd9e3b4
Author:     Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
AuthorDate: Fri Feb 1 23:09:36 2008 +0100
Committer:  Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
CommitDate: Fri Feb 1 23:09:36 2008 +0100

    ide: move hwif_register() call out of ide_probe_port()
    
    * Add BUG_ON(hwif->present) at the start of ide_probe_port().
    
    * Move hwif_register() call (along with setting hwif->present) from
      ide_probe_port() to ide_device_add_all().
    
      As a result the port will be registered with the device tree _after_:
      - probing both devices (if both are present)
      - port reset (if hwif->reset is set)
      - restoring local IRQs state and re-enabling port IRQ
    
    While at it:
    
    * Rename hwif_register() to ide_register_port().
    
    Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
---
 drivers/ide/ide-probe.c |   27 +++++++++++++--------------
 1 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index 298f398..98a8af4 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -613,7 +613,7 @@ static void hwif_release_dev (struct device *dev)
        complete(&hwif->gendev_rel_comp);
 }
 
-static void hwif_register (ide_hwif_t *hwif)
+static void ide_register_port(ide_hwif_t *hwif)
 {
        int ret;
 
@@ -742,7 +742,9 @@ static int ide_probe_port(ide_hwif_t *hwif)
 {
        unsigned long flags;
        unsigned int irqd;
-       int unit;
+       int unit, rc = -ENODEV;
+
+       BUG_ON(hwif->present);
 
        if (hwif->noprobe)
                return -EACCES;
@@ -767,14 +769,8 @@ static int ide_probe_port(ide_hwif_t *hwif)
                ide_drive_t *drive = &hwif->drives[unit];
                drive->dn = (hwif->channel ? 2 : 0) + unit;
                (void) probe_for_drive(drive);
-               if (drive->present && !hwif->present) {
-                       hwif->present = 1;
-                       if (hwif->chipset != ide_4drives ||
-                           !hwif->mate || 
-                           !hwif->mate->present) {
-                               hwif_register(hwif);
-                       }
-               }
+               if (drive->present)
+                       rc = 0;
        }
        if (hwif->io_ports[IDE_CONTROL_OFFSET] && hwif->reset) {
                printk(KERN_WARNING "%s: reset\n", hwif->name);
@@ -791,10 +787,7 @@ static int ide_probe_port(ide_hwif_t *hwif)
        if (irqd)
                enable_irq(irqd);
 
-       if (!hwif->present)
-               return -ENODEV;
-
-       return 0;
+       return rc;
 }
 
 static void ide_port_tune_devices(ide_hwif_t *hwif)
@@ -1319,6 +1312,12 @@ int ide_device_add_all(u8 *idx)
                        continue;
                }
 
+               hwif->present = 1;
+
+               if (hwif->chipset != ide_4drives || !hwif->mate ||
+                   !hwif->mate->present)
+                       ide_register_port(hwif);
+
                ide_port_tune_devices(hwif);
        }
 
-
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