BLK_QUEUE_DMA_DRAIN(9) Block Devices BLK_QUEUE_DMA_DRAIN(9)NAMEblk_queue_dma_drain - Set up a drain buffer for excess dma.
int blk_queue_dma_drain(struct request_queue * q,
dma_drain_needed_fn * dma_drain_needed,
void * buf, unsigned int size);
the request queue for the device
fn which returns non-zero if drain is necessary
physically contiguous buffer
size of the buffer in bytes
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.
This routine adjusts max_hw_segments to make room for appending the
drain buffer. If you call blk_queue_max_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.
COPYRIGHTKernel Hackers Manual 2.6. November 2013 BLK_QUEUE_DMA_DRAIN(9)