IDE fixes
PATCH 1/1 IDE fixes
Hi,
Few fixes for code which handles unregistering IDE ports.
Linus, please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git/
to receive the following updates:
drivers/ide/ide-probe.c | 2 -- drivers/ide/ide.c | 24 ++++++++---------------- 2 files changed, 8 insertions(+), 18 deletions(-)
Bartlomiej Zolnierkiewicz (3):
ide: fix hwif->gendev refcounting
ide: ide_unregister() warm-plug bugfix
ide: ide_unregister() locking bugfix
drivers/ide/ide-probe.c +0 -2
@@ -646,8 +646,6 @@ static int ide_register_port(ide_hwif_t *hwif) goto out; } -get_device (&hwif->gendev); - hwif->portdev =device_create_drvdata (ide_port_class, &hwif->gendev,MKDEV (0 ,0 ), hwif, hwif->name);if (IS_ERR (hwif->portdev)) {
drivers/ide/ide.c +8 -16
@@ -315,13 +315,14 @@ void ide_unregister(ide_hwif_t *hwif)BUG_ON (in_interrupt ());BUG_ON (irqs_disabled ()); +mutex_lock (&ide_cfg_mtx); -spin_lock_irq (&ide_lock); -if (!hwif->present) - goto abort; -__ide_port_unregister_devices (hwif); - hwif->present =0 ; +spin_lock_irq (&ide_lock); +if (hwif->present) { +__ide_port_unregister_devices (hwif); + hwif->present =0 ; + }spin_unlock_irq (&ide_lock);ide_proc_unregister_port (hwif);
@@ -351,16 +352,15 @@ void ide_unregister(ide_hwif_t *hwif)blk_unregister_region (MKDEV (hwif->major,0 ),MAX_DRIVES <<PARTN_BITS );kfree (hwif->sg_table);unregister_blkdev (hwif->major, hwif->name); -spin_lock_irq (&ide_lock);if (hwif->dma_base)ide_release_dma_engine (hwif); +spin_lock_irq (&ide_lock);/* restore hwif data to pristine status */ ide_init_port_data (hwif, hwif->index); - -abort:spin_unlock_irq (&ide_lock); +mutex_unlock (&ide_cfg_mtx); }
@@ -1094,13 +1094,6 @@ struct bus_type ide_bus_type = {EXPORT_SYMBOL_GPL (ide_bus_type); -static void ide_port_class_release (struct device *portdev) -{ -ide_hwif_t *hwif =dev_get_drvdata (portdev); - -put_device (&hwif->gendev); -} -int ide_vlb_clk;EXPORT_SYMBOL_GPL (ide_vlb_clk);
@@ -1305,7 +1298,6 @@ static int __init ide_init(void) ret =PTR_ERR (ide_port_class); goto out_port_class; } - ide_port_class->dev_release = ide_port_class_release;init_ide_data ();