diff options
Diffstat (limited to 'block/blk-settings.c')
| -rw-r--r-- | block/blk-settings.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/block/blk-settings.c b/block/blk-settings.c index 69c42adde52b..57af728d94bb 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c | |||
| @@ -156,26 +156,28 @@ EXPORT_SYMBOL(blk_queue_make_request); | |||
| 156 | 156 | ||
| 157 | /** | 157 | /** |
| 158 | * blk_queue_bounce_limit - set bounce buffer limit for queue | 158 | * blk_queue_bounce_limit - set bounce buffer limit for queue |
| 159 | * @q: the request queue for the device | 159 | * @q: the request queue for the device |
| 160 | * @dma_addr: bus address limit | 160 | * @dma_mask: the maximum address the device can handle |
| 161 | * | 161 | * |
| 162 | * Description: | 162 | * Description: |
| 163 | * Different hardware can have different requirements as to what pages | 163 | * Different hardware can have different requirements as to what pages |
| 164 | * it can do I/O directly to. A low level driver can call | 164 | * it can do I/O directly to. A low level driver can call |
| 165 | * blk_queue_bounce_limit to have lower memory pages allocated as bounce | 165 | * blk_queue_bounce_limit to have lower memory pages allocated as bounce |
| 166 | * buffers for doing I/O to pages residing above @dma_addr. | 166 | * buffers for doing I/O to pages residing above @dma_mask. |
| 167 | **/ | 167 | **/ |
| 168 | void blk_queue_bounce_limit(struct request_queue *q, u64 dma_addr) | 168 | void blk_queue_bounce_limit(struct request_queue *q, u64 dma_mask) |
| 169 | { | 169 | { |
| 170 | unsigned long b_pfn = dma_addr >> PAGE_SHIFT; | 170 | unsigned long b_pfn = dma_mask >> PAGE_SHIFT; |
| 171 | int dma = 0; | 171 | int dma = 0; |
| 172 | 172 | ||
| 173 | q->bounce_gfp = GFP_NOIO; | 173 | q->bounce_gfp = GFP_NOIO; |
| 174 | #if BITS_PER_LONG == 64 | 174 | #if BITS_PER_LONG == 64 |
| 175 | /* Assume anything <= 4GB can be handled by IOMMU. | 175 | /* |
| 176 | Actually some IOMMUs can handle everything, but I don't | 176 | * Assume anything <= 4GB can be handled by IOMMU. Actually |
| 177 | know of a way to test this here. */ | 177 | * some IOMMUs can handle everything, but I don't know of a |
| 178 | if (b_pfn < (min_t(u64, 0x100000000UL, BLK_BOUNCE_HIGH) >> PAGE_SHIFT)) | 178 | * way to test this here. |
| 179 | */ | ||
| 180 | if (b_pfn < (min_t(u64, 0xffffffffUL, BLK_BOUNCE_HIGH) >> PAGE_SHIFT)) | ||
| 179 | dma = 1; | 181 | dma = 1; |
| 180 | q->bounce_pfn = max_low_pfn; | 182 | q->bounce_pfn = max_low_pfn; |
| 181 | #else | 183 | #else |
