linux/drivers/ide
Bartlomiej Zolnierkiewicz 93de00fd1c ide: remove broken/dangerous HDIO_[UNREGISTER,SCAN]_HWIF ioctls (take 3)
hdparm explicitely marks HDIO_[UNREGISTER,SCAN]_HWIF ioctls as DANGEROUS
and given the number of bugs we can assume that there are no real users:

* DMA has no chance of working because DMA resources are released by
  ide_unregister() and they are never allocated again.

* Since ide_init_hwif_ports() is used for ->io_ports[] setup the ioctls
  don't work for almost all hosts with "non-standard" (== non ISA-like)
  layout of IDE taskfile registers (there is a lot of such host drivers).

* ide_port_init_devices() is not called when probing IDE devices so:
  - drive->autotune is never set and IDE host/devices are not programmed
    for the correct PIO/DMA transfer modes (=> possible data corruption)
  - host specific I/O 32-bit and IRQ unmasking settings are not applied
    (=> possible data corruption)
  - host specific ->port_init_devs method is not called (=> no luck with
    ht6560b, qd65xx and opti621 host drivers)

* ->rw_disk method is not preserved (=> no HPT3xxN chipsets support).

* ->serialized flag is not preserved (=> possible data corruption when
   using icside, aec62xx (ATP850UF chipset), cmd640, cs5530, hpt366
   (HPT3xxN chipsets), rz1000, sc1200, dtc2278 and ht6560b host drivers).

* ->ack_intr method is not preserved (=> needed by ide-cris, buddha,
  gayle and macide host drivers).

* ->sata_scr[] and sata_misc[] is cleared by ide_unregister() and it
  isn't initialized again (SiI3112 support needs them).

* To issue an ioctl() there need to be at least one IDE device present
  in the system.

* ->cable_detect method is not preserved + it is not called when probing
  IDE devices so cable detection is broken (however since DMA support is
  also broken it doesn't really matter ;-).

* Some objects which may have already been freed in ide_unregister()
  are restored by ide_hwif_restore() (i.e. ->hwgroup).

* ide_register_hw() may unregister unrelated IDE ports if free ide_hwifs[]
  slot cannot be found.

* When IDE host drivers are modular unregistered port may be re-used by
  different host driver that owned it first causing subtle bugs.

Since we now have a proper warm-plug support remove these ioctls,
then remove no longer needed:
- ide_register_hw() and ide_hwif_restore() functions
- 'init_default' and 'restore' arguments of ide_unregister()
- zeroeing of hwif->{dma,extra}_* fields in ide_unregister()

As an added bonus IDE core code size shrinks by ~3kB (x86-32).

v2:
* fix ide_unregister() arguments in cleanup_module() (Andrew Morton).

v3:
* fix ide_unregister() arguments in palm_bk3710.c.

Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
2008-04-18 00:46:24 +02:00
..
arm ide: remove broken/dangerous HDIO_[UNREGISTER,SCAN]_HWIF ioctls (take 3) 2008-04-18 00:46:24 +02:00
cris ide/cris/ide-cris.c: add MODULE_LICENSE 2008-04-02 21:22:03 +02:00
h8300 ide-h8300: 32-bit I/O is unsupported 2008-04-02 21:22:04 +02:00
legacy ide: remove broken/dangerous HDIO_[UNREGISTER,SCAN]_HWIF ioctls (take 3) 2008-04-18 00:46:24 +02:00
mips ide: remove broken/dangerous HDIO_[UNREGISTER,SCAN]_HWIF ioctls (take 3) 2008-04-18 00:46:24 +02:00
pci ide: remove broken/dangerous HDIO_[UNREGISTER,SCAN]_HWIF ioctls (take 3) 2008-04-18 00:46:24 +02:00
ppc ide: rework PowerMac media-bay support (take 2) 2008-04-18 00:46:23 +02:00
ide-acpi.c ide-acpi: add missing drive->acpidata zeroing 2008-04-18 00:46:21 +02:00
ide-cd.c ide-cd: fix CD/DVD burning 2008-02-26 21:50:35 +01:00
ide-cd.h ide: delete filenames/versions from comments 2008-02-01 23:09:33 +01:00
ide-cd_ioctl.c ide-cd: mark REQ_TYPE_ATA_PC write requests with REQ_RW flag 2008-03-07 21:53:49 +01:00
ide-cd_verbose.c ide-cd: move VERBOSE_IDE_CD_ERRORS code to ide-cd_verbose.c 2008-02-01 23:09:23 +01:00
ide-disk.c ide-disk: add missing printk() KERN_* levels 2008-02-26 21:50:36 +01:00
ide-dma.c ide: fix enabling DMA on it821x in "smart" mode 2008-03-07 21:53:49 +01:00
ide-floppy.c ide: add ide_read_error() inline helper 2008-02-06 02:57:51 +01:00
ide-generic.c ide: remove obsoleted "idex=base[,ctl[,irq]]" kernel parameters (take 2) 2008-04-18 00:46:24 +02:00
ide-io.c ide-disk: fix flush requests (take 2) 2008-02-11 00:32:14 +01:00
ide-iops.c ide: use ->ata_input_data in ide_driveid_update() 2008-04-02 21:22:05 +02:00
ide-lib.c ide: remove commented out entries from ide_pio_blacklist[] 2008-03-22 16:40:20 +01:00
ide-pnp.c ide: remove broken/dangerous HDIO_[UNREGISTER,SCAN]_HWIF ioctls (take 3) 2008-04-18 00:46:24 +02:00
ide-probe.c ide: remove obsoleted "idex=base[,ctl[,irq]]" kernel parameters (take 2) 2008-04-18 00:46:24 +02:00
ide-proc.c ide: remove obsoleted "idex=base[,ctl[,irq]]" kernel parameters (take 2) 2008-04-18 00:46:24 +02:00
ide-scan-pci.c IDE: remove ide=reverse IDE core 2008-04-18 00:46:20 +02:00
ide-tape.c Revert "ide-tape: schedule driver for removal after 6 months" 2008-03-22 16:44:27 +01:00
ide-taskfile.c IDE: Make taskfile interface more robust wrt unexpected end-of-command 2008-03-18 21:26:24 -07:00
ide-timing.h Spelling fixes: lenght->length 2008-02-03 15:42:53 +02:00
ide.c ide: remove broken/dangerous HDIO_[UNREGISTER,SCAN]_HWIF ioctls (take 3) 2008-04-18 00:46:24 +02:00
Kconfig ide: remove CONFIG_BLK_DEV_HD_IDE config option (take 2) 2008-04-18 00:46:24 +02:00
Makefile ide: fix ide_find_port() 2008-04-18 00:46:21 +02:00
setup-pci.c ide: remove obsoleted "idex=base[,ctl[,irq]]" kernel parameters (take 2) 2008-04-18 00:46:24 +02:00