linux/drivers/ide
Tejun Heo 35ab8d3251 ide-tape: use single continuous buffer
Impact: simpler buffer allocation and handling, kills OOM, fix DMA transfers

ide-tape has its own multiple buffer mechanism using struct
idetape_bh.  It allocates buffer with decreasing order-of-two
allocations so that it results in minimum number of segments.
However, the implementation is quite complex and works in a way that
no other block or ide driver works necessitating a lot of special case
handling.

The benefit this complex allocation scheme brings is questionable as
PIO or DMA the number of segments (16 maximum) doesn't make any
noticeable difference and it also doesn't negate the need for multiple
order allocation which can fail under memory pressure or high
fragmentation although it does lower the highest order necessary by
one when the buffer size isn't power of two.

As the first step to remove the custom buffer management, this patch
makes ide-tape allocate single continous buffer.  The maximum order is
four.  I doubt the change would cause any trouble but if it ever
matters, it should be converted to regular sg mechanism like everyone
else and even in that case dropping custom buffer handling and moving
to standard mechanism first make sense as an intermediate step.

This patch makes the first bh to contain the whole buffer and drops
multi bh handling code.  Following patches will make further changes.

This patch has the side effect of killing OOM triggered by allocation
path and fixing DMA transfers.  Previously, bug in alloc path
triggered OOM on command issue and commands were passed to DMA engine
without DMA-mapping all the segments.

Signed-off-by: Tejun Heo <tj@kernel.org>
2009-04-19 08:46:02 +09:00
..
aec62xx.c ide: fix ->init_chipset method to return 'int' value 2009-03-24 23:22:53 +01:00
ali14xx.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
alim15x3.c ide: add ->dma_check method 2009-03-31 20:15:21 +02:00
amd74xx.c ide: fix ->init_chipset method to return 'int' value 2009-03-24 23:22:53 +01:00
at91_ide.c at91_ide: turn on PIO 6 support 2009-04-08 14:13:04 +02:00
atiixp.c ide: remove no longer needed IDE_HFLAG[_FORCE]_LEGACY_IRQS 2009-03-24 23:22:52 +01:00
au1xxx-ide.c ide: turn selectproc() method into dev_select() method (take 5) 2009-03-31 20:15:32 +02:00
buddha.c ide: allow host drivers to specify IRQ flags 2009-03-27 12:46:27 +01:00
cmd64x.c ide: set/clear drive->waiting_for_dma flag in the core code 2009-03-31 20:15:22 +02:00
cmd640.c cmd640: use ide_get_pair_dev() helper 2009-01-06 17:20:55 +01:00
cs5520.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
cs5530.c ide: identify data word 53 bit 1 doesn't cover words 62 and 63 (take 3) 2009-03-31 20:15:27 +02:00
cs5535.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
cs5536.c cs5536: define dma_sff_read_status() method 2009-04-18 17:42:20 +02:00
cy82c693.c ide: remove HWIF() macro 2009-01-06 17:20:52 +01:00
delkin_cb.c ide: allow host drivers to specify IRQ flags 2009-03-27 12:46:27 +01:00
dtc2278.c ide: add IDE_HFLAG_DTC2278 host flag 2009-03-27 12:46:28 +01:00
falconide.c ide: falconide/q40ide - Use __ide_mm_{in,out}sw() for data 2009-04-08 14:12:48 +02:00
gayle.c ide: remove CONFIG_BLK_DEV_IDEDOUBLER config option 2009-03-31 20:15:26 +02:00
hpt366.c hpt366: use ATA_DMA_* constants 2009-04-18 17:42:19 +02:00
ht6560b.c ide: turn selectproc() method into dev_select() method (take 5) 2009-03-31 20:15:32 +02:00
icside.c ide: set/clear drive->waiting_for_dma flag in the core code 2009-03-31 20:15:22 +02:00
ide_platform.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
ide-4drives.c ide: add IDE_HFLAG_4DRIVES host flag 2009-03-27 12:46:28 +01:00
ide-acpi.c ide: simplify 'struct ide_taskfile' 2009-04-08 14:13:02 +02:00
ide-atapi.c ide-atapi,tape,floppy: allow ->pc_callback() to change rq->data_len 2009-04-19 08:46:02 +09:00
ide-cd_ioctl.c ide: remove IDE_AFLAG_NO_DOORLOCKING 2008-10-17 18:09:11 +02:00
ide-cd_verbose.c block: replace sizeof(rq->cmd) with BLK_MAX_CDB 2008-04-29 14:48:55 +02:00
ide-cd.c ide-cd,atapi: use bio for internal commands 2009-04-19 07:00:42 +09:00
ide-cd.h ide-cd: convert to using generic sense request 2009-04-19 07:00:42 +09:00
ide-cs.c ide: allow host drivers to specify IRQ flags 2009-03-27 12:46:27 +01:00
ide-devsets.c ide: remove ide_end_request() 2009-03-27 12:46:45 +01:00
ide-disk_ioctl.c [PATCH] switch ide_disk_ops ->ioctl() to sane prototype 2008-10-21 07:47:30 -04:00
ide-disk_proc.c ide: replace IDE_TFLAG_* flags by IDE_VALID_* 2009-04-08 14:13:01 +02:00
ide-disk.c ide: don't set REQ_SOFTBARRIER 2009-04-19 07:00:41 +09:00
ide-disk.h [PATCH] switch ide_disk_ops ->ioctl() to sane prototype 2008-10-21 07:47:30 -04:00
ide-dma-sff.c ide: remove wmb() from ide-dma-sff.c and scc_pata.c 2009-04-08 14:12:49 +02:00
ide-dma.c ide: add support for CFA specified transfer modes (take 3) 2009-03-31 20:15:28 +02:00
ide-eh.c ide: inline SELECT_DRIVE() 2009-03-31 20:15:33 +02:00
ide-floppy_ioctl.c ide: decrease size of ->pc_buf field in struct ide_atapi_pc 2009-03-31 20:15:25 +02:00
ide-floppy_proc.c ide: NULL noise: drivers/ide/ide-*.c 2009-03-05 16:10:56 +01:00
ide-floppy.c ide-atapi,tape,floppy: allow ->pc_callback() to change rq->data_len 2009-04-19 08:46:02 +09:00
ide-floppy.h [PATCH] switch ide_disk_ops ->ioctl() to sane prototype 2008-10-21 07:47:30 -04:00
ide-gd.c ide: remove ->end_request method 2009-03-27 12:46:36 +01:00
ide-gd.h ide: move ->failed_pc to ide_drive_t 2009-03-27 12:46:34 +01:00
ide-generic.c ide: merge ide_arm and ide_generic host drivers 2009-03-31 20:15:24 +02:00
ide-h8300.c ide-h8300: remove custom tf_{read|load}() methods 2009-04-08 14:12:51 +02:00
ide-io-std.c ide: refactor tf_read() method 2009-04-08 14:13:03 +02:00
ide-io.c ide-pm: don't abuse rq->data 2009-04-19 07:00:43 +09:00
ide-ioctls.c ide: don't set REQ_SOFTBARRIER 2009-04-19 07:00:41 +09:00
ide-iops.c ide: refactor tf_read() method 2009-04-08 14:13:03 +02:00
ide-legacy.c ide: move legacy ISA/VLB ports handling to ide-legacy.c (v2) 2008-12-29 20:27:37 +01:00
ide-lib.c ide: refactor tf_read() method 2009-04-08 14:13:03 +02:00
ide-park.c ide: use blk_run_queue() instead of blk_start_queueing() 2009-04-19 07:00:41 +09:00
ide-pci-generic.c ide: remove no longer needed IDE_HFLAG[_FORCE]_LEGACY_IRQS 2009-03-24 23:22:52 +01:00
ide-pio-blacklist.c ide: move PIO blacklist to ide-pio-blacklist.c 2008-07-16 20:33:39 +02:00
ide-pm.c ide-pm: don't abuse rq->data 2009-04-19 07:00:43 +09:00
ide-pnp.c ide-pnp: use struct ide_port_info 2009-03-27 12:46:18 +01:00
ide-probe.c ide: refactor tf_read() method 2009-04-08 14:13:03 +02:00
ide-proc.c ide: replace IDE_TFLAG_* flags by IDE_VALID_* 2009-04-08 14:13:01 +02:00
ide-scan-pci.c ide: replace remaining __FUNCTION__ occurrences 2008-04-26 22:25:20 +02:00
ide-sysfs.c ide: move sysfs support to ide-sysfs.c 2009-01-02 16:12:48 +01:00
ide-tape.c ide-tape: use single continuous buffer 2009-04-19 08:46:02 +09:00
ide-taskfile.c ide-taskfile: don't abuse rq->buffer 2009-04-19 07:00:42 +09:00
ide-timings.c ide: add support for CFA specified transfer modes (take 3) 2009-03-31 20:15:28 +02:00
ide-xfer-mode.c ide: add support for CFA specified transfer modes (take 3) 2009-03-31 20:15:28 +02:00
ide.c ide: move device settings code to ide-devsets.c 2009-03-24 23:22:44 +01:00
it821x.c ide: add ->dma_clear method and remove ->dma_timeout one 2009-03-31 20:15:19 +02:00
it8172.c Resurrect IT8172 IDE controller driver 2009-01-06 17:21:01 +01:00
it8213.c ide: remove HWIF() macro 2009-01-06 17:20:52 +01:00
jmicron.c ide: Switch to a common address 2008-11-02 21:40:08 +01:00
Kconfig ide: be able to build pmac driver without IDE built-in 2009-03-31 20:15:34 +02:00
macide.c ide: allow host drivers to specify IRQ flags 2009-03-27 12:46:27 +01:00
Makefile ide: merge ide_arm and ide_generic host drivers 2009-03-31 20:15:24 +02:00
ns87415.c ide: refactor tf_read() method 2009-04-08 14:13:03 +02:00
opti621.c ide: remove useless subdirs from drivers/ide/ 2008-10-21 20:57:23 +02:00
palm_bk3710.c IDE: palm_bk3710: use ioremap instead of arch-specific IO_ADDRESS() 2009-03-27 12:46:23 +01:00
pdc202xx_new.c ide: fix ->init_chipset method to return 'int' value 2009-03-24 23:22:53 +01:00
pdc202xx_old.c ide: add ->dma_clear method and remove ->dma_timeout one 2009-03-31 20:15:19 +02:00
piix.c ide: fix ->init_chipset method to return 'int' value 2009-03-24 23:22:53 +01:00
pmac.c ide: Remove void casts 2009-04-18 17:42:19 +02:00
q40ide.c ide: falconide/q40ide - Use __ide_mm_{in,out}sw() for data 2009-04-08 14:12:48 +02:00
qd65xx.c ide: turn selectproc() method into dev_select() method (take 5) 2009-03-31 20:15:32 +02:00
qd65xx.h Fix my email address in qd65xx.[ch]/pata_qdi.c 2009-02-03 16:53:56 -08:00
rapide.c arm ide breakage 2008-10-26 09:35:05 -07:00
rz1000.c rz1000: apply chipset quirks early (v2) 2008-12-29 20:27:33 +01:00
sc1200.c ide: identify data word 53 bit 1 doesn't cover words 62 and 63 (take 3) 2009-03-31 20:15:27 +02:00
scc_pata.c ide: refactor tf_read() method 2009-04-08 14:13:03 +02:00
serverworks.c ide: fix ->init_chipset method to return 'int' value 2009-03-24 23:22:53 +01:00
setup-pci.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
sgiioc4.c ide: turn selectproc() method into dev_select() method (take 5) 2009-03-31 20:15:32 +02:00
siimage.c ide: add ->dma_clear method and remove ->dma_timeout one 2009-03-31 20:15:19 +02:00
sis5513.c ide: fix ->init_chipset method to return 'int' value 2009-03-24 23:22:53 +01:00
sl82c105.c ide: add support for CFA specified transfer modes (take 3) 2009-03-31 20:15:28 +02:00
slc90e66.c ide: remove no longer needed IDE_HFLAG[_FORCE]_LEGACY_IRQS 2009-03-24 23:22:52 +01:00
tc86c001.c ide: add ->dma_clear method and remove ->dma_timeout one 2009-03-31 20:15:19 +02:00
triflex.c ide: remove HWIF() macro 2009-01-06 17:20:52 +01:00
trm290.c ide: turn selectproc() method into dev_select() method (take 5) 2009-03-31 20:15:32 +02:00
tx4938ide.c tx493[89]ide: Remove big endian version of tx493[89]ide_tf_{load,read} 2009-04-08 14:12:52 +02:00
tx4939ide.c ide: refactor tf_load() method 2009-04-08 14:13:03 +02:00
umc8672.c ide: merge ide_hwgroup_t with ide_hwif_t (v2) 2009-01-06 17:20:50 +01:00
via82cxxx.c ide: fix ->init_chipset method to return 'int' value 2009-03-24 23:22:53 +01:00