--- /opt/kernel/linux-2.3.99-pre7-3/drivers/ide/ide.c Wed May 3 16:09:33 2000 +++ drivers/ide/ide.c Thu May 4 02:40:51 2000 @@ -2304,25 +2296,21 @@ return val; } -int ide_spin_wait_hwgroup (ide_drive_t *drive, unsigned long *flags) +int ide_spin_wait_hwgroup (ide_drive_t *drive) { ide_hwgroup_t *hwgroup = HWGROUP(drive); unsigned long timeout = jiffies + (3 * HZ); - spin_lock_irqsave(&io_request_lock, *flags); + spin_lock_irq(&io_request_lock); while (hwgroup->busy) { - unsigned long lflags; - spin_unlock_irqrestore(&io_request_lock, *flags); - __save_flags(lflags); /* local CPU only */ - __sti(); /* local CPU only; needed for jiffies */ + spin_unlock_irq(&io_request_lock); if (0 < (signed long)(jiffies - timeout)) { - __restore_flags(lflags); /* local CPU only */ printk("%s: channel busy\n", drive->name); return -EBUSY; } - __restore_flags(lflags); /* local CPU only */ - spin_lock_irqsave(&io_request_lock, *flags); + spin_lock_irq(&io_request_lock); } + spin_unlock_irq(&io_request_lock); return 0; } @@ -2333,7 +2321,6 @@ */ int ide_write_setting (ide_drive_t *drive, ide_settings_t *setting, int val) { - unsigned long flags; int i; u32 *p; @@ -2345,7 +2332,7 @@ return -EINVAL; if (setting->set) return setting->set(drive, val); - if (ide_spin_wait_hwgroup(drive, &flags)) + if (ide_spin_wait_hwgroup(drive)) return -EBUSY; switch (setting->data_type) { case TYPE_BYTE: @@ -2363,7 +2350,6 @@ *p = val; break; } - spin_unlock_irqrestore(&io_request_lock, flags); return 0; } --- /opt/kernel/linux-2.3.99-pre7-3/drivers/ide/ide-disk.c Wed May 3 03:45:53 2000 +++ drivers/ide/ide-disk.c Thu May 4 02:39:07 2000 @@ -688,13 +688,11 @@ static int set_nowerr(ide_drive_t *drive, int arg) { - unsigned long flags; - - if (ide_spin_wait_hwgroup(drive, &flags)) + if (ide_spin_wait_hwgroup(drive)) return -EBUSY; + drive->nowerr = arg; drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT; - spin_unlock_irqrestore(&io_request_lock, flags); return 0; } --- /opt/kernel/linux-2.3.99-pre7-3/include/linux/ide.h Wed May 3 03:45:57 2000 +++ include/linux/ide.h Thu May 4 02:35:56 2000 @@ -769,7 +769,7 @@ */ int drive_is_flashcard (ide_drive_t *drive); -int ide_spin_wait_hwgroup(ide_drive_t *drive, unsigned long *flags); +int ide_spin_wait_hwgroup(ide_drive_t *drive); void ide_timer_expiry (unsigned long data); void ide_intr (int irq, void *dev_id, struct pt_regs *regs); void do_ide0_request (request_queue_t * q);