diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-02-02 19:56:39 +0100 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-02-02 19:56:39 +0100 |
commit | f82c2b171905b6d5af92395d8159546351ab602f (patch) | |
tree | 89790c732a73c3210b5f8578d3a94a2717ab7b3b /drivers/ide/ide.c | |
parent | ead741df385607ab74876afdb05fd8ac27da9906 (diff) |
ide: add 'init_default' and 'restore' arguments to ide_unregister()
* Add 'init_default' (flag for calling init_hwif_default()) and 'restore'
(flag for calling ide_hwif_restore()) arguments to ide_unregister().
* Update ide_unregister() users to set 'init_default' and 'restore' flags.
* No need to set 'init_default' flag in ide_register_hw() if the setup done
by init_hwif_default() is going to be overridden by ide_init_port_hw().
* No need to set 'init_default' and 'restore' flags in cleanup_module().
There should be no functionality changes caused by this patch.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide.c')
-rw-r--r-- | drivers/ide/ide.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index 4b130e7102e..166acd513d5 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c @@ -499,6 +499,8 @@ void ide_remove_port_from_hwgroup(ide_hwif_t *hwif) /** * ide_unregister - free an IDE interface * @index: index of interface (will change soon to a pointer) + * @init_default: init default hwif flag + * @restore: restore hwif flag * * Perform the final unregister of an IDE interface. At the moment * we don't refcount interfaces so this will also get split up. @@ -518,7 +520,7 @@ void ide_remove_port_from_hwgroup(ide_hwif_t *hwif) * This is raving bonkers. */ -void ide_unregister(unsigned int index) +void ide_unregister(unsigned int index, int init_default, int restore) { ide_drive_t *drive; ide_hwif_t *hwif, *g; @@ -602,9 +604,12 @@ void ide_unregister(unsigned int index) /* restore hwif data to pristine status */ ide_init_port_data(hwif, index); - init_hwif_default(hwif, index); - ide_hwif_restore(hwif, &tmp_hwif); + if (init_default) + init_hwif_default(hwif, index); + + if (restore) + ide_hwif_restore(hwif, &tmp_hwif); abort: spin_unlock_irq(&ide_lock); @@ -710,12 +715,12 @@ int ide_register_hw(hw_regs_t *hw, void (*quirkproc)(ide_drive_t *), goto found; } for (index = 0; index < MAX_HWIFS; index++) - ide_unregister(index); + ide_unregister(index, 1, 1); } while (retry--); return -1; found: if (hwif->present) - ide_unregister(index); + ide_unregister(index, 0, 1); else if (!hwif->hold) ide_init_port_data(hwif, index); @@ -1058,7 +1063,7 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device case HDIO_UNREGISTER_HWIF: if (!capable(CAP_SYS_RAWIO)) return -EACCES; /* (arg > MAX_HWIFS) checked in function */ - ide_unregister(arg); + ide_unregister(arg, 1, 1); return 0; case HDIO_SET_NICE: if (!capable(CAP_SYS_ADMIN)) return -EACCES; @@ -1703,7 +1708,7 @@ void __exit cleanup_module (void) int index; for (index = 0; index < MAX_HWIFS; ++index) - ide_unregister(index); + ide_unregister(index, 0, 0); proc_ide_destroy(); |