From 22541ab8e644e7ca437eb4c8371b9171a9c1c906 Mon Sep 17 00:00:00 2001 From: James Bottomley Date: Mon, 31 Dec 2007 16:37:00 -0600 Subject: [PATCH] --- yaml --- r: 77093 b: refs/heads/master c: 11c3e689f1c3a73e3af7b0ea767b1b0626da8033 h: refs/heads/master i: 77091: 6822d3fcd0897c3cd614a5be7381dbddd151e347 v: v3 --- [refs] | 2 +- trunk/block/ll_rw_blk.c | 24 ++++++++++++++++++++++++ trunk/include/linux/blkdev.h | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 9c5261502f7f..73bd1dc78cb1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 166a72878f76e911f2d1ce4b2310d4403e94be11 +refs/heads/master: 11c3e689f1c3a73e3af7b0ea767b1b0626da8033 diff --git a/trunk/block/ll_rw_blk.c b/trunk/block/ll_rw_blk.c index 8b919940b2ab..14af36c5cdb2 100644 --- a/trunk/block/ll_rw_blk.c +++ b/trunk/block/ll_rw_blk.c @@ -759,6 +759,30 @@ void blk_queue_dma_alignment(struct request_queue *q, int mask) EXPORT_SYMBOL(blk_queue_dma_alignment); +/** + * blk_queue_update_dma_alignment - update dma length and memory alignment + * @q: the request queue for the device + * @mask: alignment mask + * + * description: + * update required memory and length aligment for direct dma transactions. + * If the requested alignment is larger than the current alignment, then + * the current queue alignment is updated to the new value, otherwise it + * is left alone. The design of this is to allow multiple objects + * (driver, device, transport etc) to set their respective + * alignments without having them interfere. + * + **/ +void blk_queue_update_dma_alignment(struct request_queue *q, int mask) +{ + BUG_ON(mask > PAGE_SIZE); + + if (mask > q->dma_alignment) + q->dma_alignment = mask; +} + +EXPORT_SYMBOL(blk_queue_update_dma_alignment); + /** * blk_queue_find_tag - find a request by its tag and queue * @q: The request queue for the device diff --git a/trunk/include/linux/blkdev.h b/trunk/include/linux/blkdev.h index d18ee67b40f8..81e99e516302 100644 --- a/trunk/include/linux/blkdev.h +++ b/trunk/include/linux/blkdev.h @@ -766,6 +766,7 @@ extern void blk_queue_segment_boundary(struct request_queue *, unsigned long); extern void blk_queue_prep_rq(struct request_queue *, prep_rq_fn *pfn); extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *); extern void blk_queue_dma_alignment(struct request_queue *, int); +extern void blk_queue_update_dma_alignment(struct request_queue *, int); extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *); extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); extern int blk_queue_ordered(struct request_queue *, unsigned, prepare_flush_fn *);