blk_queue_dma_drain(9)
NAME
blk_queue_dma_drain - Set up a drain buffer for excess dma.
SYNOPSIS
int blk_queue_dma_drain(struct request_queue * q,
dma_drain_needed_fn * dma_drain_needed,
void * buf, unsigned int size);
ARGUMENTS
- q
- the request queue for the device
- dma_drain_needed
- fn which returns non-zero if drain is necessary
- buf
- physically contiguous buffer
- size
- size of the buffer in bytes
DESCRIPTION
Some devices have excess DMA problems and canīt simply discard (or zero
fill) the unwanted piece of the transfer. They have to have a real area
of memory to transfer it into. The use case for this is ATAPI devices
in DMA mode. If the packet command causes a transfer bigger than the
transfer size some HBAs will lock up if there arenīt DMA elements to
contain the excess transfer. What this API does is adjust the queue so
that the buf is always appended silently to the scatterlist.
NOTE
This routine adjusts max_hw_segments to make room for appending the
drain buffer. If you call blk_queue_max_hw_segments or
blk_queue_max_phys_segments after calling this routine, you must set
the limit to one fewer than your device can support otherwise there
wonīt be room for the drain buffer.