1 /* 2 * Functions related to setting various queue properties from drivers 3 */ 4 #include <linux/kernel.h> 5 #include <linux/module.h> 6 #include <linux/init.h> 7 #include <linux/bio.h> 8 #include <linux/blkdev.h> 9 #include <linux/bootmem.h> /* for max_pfn/max_low_pfn */ 10 11 #include "blk.h" 12 13 unsigned long blk_max_low_pfn; 14 EXPORT_SYMBOL(blk_max_low_pfn); 15 16 unsigned long blk_max_pfn; 17 18 /** 19 * blk_queue_prep_rq - set a prepare_request function for queue 20 * @q: queue 21 * @pfn: prepare_request function 22 * 23 * It's possible for a queue to register a prepare_request callback which 24 * is invoked before the request is handed to the request_fn. The goal of 25 * the function is to prepare a request for I/O, it can be used to build a 26 * cdb from the request data for instance. 27 * 28 */ 29 void blk_queue_prep_rq(struct request_queue *q, prep_rq_fn *pfn) 30 { 31 q->prep_rq_fn = pfn; 32 } 33 EXPORT_SYMBOL(blk_queue_prep_rq); 34 35 /** 36 * blk_queue_set_discard - set a discard_sectors function for queue 37 * @q: queue 38 * @dfn: prepare_discard function 39 * 40 * It's possible for a queue to register a discard callback which is used 41 * to transform a discard request into the appropriate type for the 42 * hardware. If none is registered, then discard requests are failed 43 * with %EOPNOTSUPP. 44 * 45 */ 46 void blk_queue_set_discard(struct request_queue *q, prepare_discard_fn *dfn) 47 { 48 q->prepare_discard_fn = dfn; 49 } 50 EXPORT_SYMBOL(blk_queue_set_discard); 51 52 /** 53 * blk_queue_merge_bvec - set a merge_bvec function for queue 54 * @q: queue 55 * @mbfn: merge_bvec_fn 56 * 57 * Usually queues have static limitations on the max sectors or segments that 58 * we can put in a request. Stacking drivers may have some settings that 59 * are dynamic, and thus we have to query the queue whether it is ok to 60 * add a new bio_vec to a bio at a given offset or not. If the block device 61 * has such limitations, it needs to register a merge_bvec_fn to control 62 * the size of bio's sent to it. Note that a block device *must* allow a 63 * single page to be added to an empty bio. The block device driver may want 64 * to use the bio_split() function to deal with these bio's. By default 65 * no merge_bvec_fn is defined for a queue, and only the fixed limits are 66 * honored. 67 */ 68 void blk_queue_merge_bvec(struct request_queue *q, merge_bvec_fn *mbfn) 69 { 70 q->merge_bvec_fn = mbfn; 71 } 72 EXPORT_SYMBOL(blk_queue_merge_bvec); 73 74 void blk_queue_softirq_done(struct request_queue *q, softirq_done_fn *fn) 75 { 76 q->softirq_done_fn = fn; 77 } 78 EXPORT_SYMBOL(blk_queue_softirq_done); 79 80 void blk_queue_rq_timeout(struct request_queue *q, unsigned int timeout) 81 { 82 q->rq_timeout = timeout; 83 } 84 EXPORT_SYMBOL_GPL(blk_queue_rq_timeout); 85 86 void blk_queue_rq_timed_out(struct request_queue *q, rq_timed_out_fn *fn) 87 { 88 q->rq_timed_out_fn = fn; 89 } 90 EXPORT_SYMBOL_GPL(blk_queue_rq_timed_out); 91 92 void blk_queue_lld_busy(struct request_queue *q, lld_busy_fn *fn) 93 { 94 q->lld_busy_fn = fn; 95 } 96 EXPORT_SYMBOL_GPL(blk_queue_lld_busy); 97 98 /** 99 * blk_set_default_limits - reset limits to default values 100 * @lim: the queue_limits structure to reset 101 * 102 * Description: 103 * Returns a queue_limit struct to its default state. Can be used by 104 * stacking drivers like DM that stage table swaps and reuse an 105 * existing device queue. 106 */ 107 void blk_set_default_limits(struct queue_limits *lim) 108 { 109 lim->max_phys_segments = MAX_PHYS_SEGMENTS; 110 lim->max_hw_segments = MAX_HW_SEGMENTS; 111 lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK; 112 lim->max_segment_size = MAX_SEGMENT_SIZE; 113 lim->max_sectors = lim->max_hw_sectors = SAFE_MAX_SECTORS; 114 lim->logical_block_size = lim->physical_block_size = lim->io_min = 512; 115 lim->bounce_pfn = (unsigned long)(BLK_BOUNCE_ANY >> PAGE_SHIFT); 116 lim->alignment_offset = 0; 117 lim->io_opt = 0; 118 lim->misaligned = 0; 119 lim->no_cluster = 0; 120 } 121 EXPORT_SYMBOL(blk_set_default_limits); 122 123 /** 124 * blk_queue_make_request - define an alternate make_request function for a device 125 * @q: the request queue for the device to be affected 126 * @mfn: the alternate make_request function 127 * 128 * Description: 129 * The normal way for &struct bios to be passed to a device 130 * driver is for them to be collected into requests on a request 131 * queue, and then to allow the device driver to select requests 132 * off that queue when it is ready. This works well for many block 133 * devices. However some block devices (typically virtual devices 134 * such as md or lvm) do not benefit from the processing on the 135 * request queue, and are served best by having the requests passed 136 * directly to them. This can be achieved by providing a function 137 * to blk_queue_make_request(). 138 * 139 * Caveat: 140 * The driver that does this *must* be able to deal appropriately 141 * with buffers in "highmemory". This can be accomplished by either calling 142 * __bio_kmap_atomic() to get a temporary kernel mapping, or by calling 143 * blk_queue_bounce() to create a buffer in normal memory. 144 **/ 145 void blk_queue_make_request(struct request_queue *q, make_request_fn *mfn) 146 { 147 /* 148 * set defaults 149 */ 150 q->nr_requests = BLKDEV_MAX_RQ; 151 152 q->make_request_fn = mfn; 153 blk_queue_dma_alignment(q, 511); 154 blk_queue_congestion_threshold(q); 155 q->nr_batching = BLK_BATCH_REQ; 156 157 q->unplug_thresh = 4; /* hmm */ 158 q->unplug_delay = (3 * HZ) / 1000; /* 3 milliseconds */ 159 if (q->unplug_delay == 0) 160 q->unplug_delay = 1; 161 162 q->unplug_timer.function = blk_unplug_timeout; 163 q->unplug_timer.data = (unsigned long)q; 164 165 blk_set_default_limits(&q->limits); 166 167 /* 168 * If the caller didn't supply a lock, fall back to our embedded 169 * per-queue locks 170 */ 171 if (!q->queue_lock) 172 q->queue_lock = &q->__queue_lock; 173 174 /* 175 * by default assume old behaviour and bounce for any highmem page 176 */ 177 blk_queue_bounce_limit(q, BLK_BOUNCE_HIGH); 178 } 179 EXPORT_SYMBOL(blk_queue_make_request); 180 181 /** 182 * blk_queue_bounce_limit - set bounce buffer limit for queue 183 * @q: the request queue for the device 184 * @dma_mask: the maximum address the device can handle 185 * 186 * Description: 187 * Different hardware can have different requirements as to what pages 188 * it can do I/O directly to. A low level driver can call 189 * blk_queue_bounce_limit to have lower memory pages allocated as bounce 190 * buffers for doing I/O to pages residing above @dma_mask. 191 **/ 192 void blk_queue_bounce_limit(struct request_queue *q, u64 dma_mask) 193 { 194 unsigned long b_pfn = dma_mask >> PAGE_SHIFT; 195 int dma = 0; 196 197 q->bounce_gfp = GFP_NOIO; 198 #if BITS_PER_LONG == 64 199 /* 200 * Assume anything <= 4GB can be handled by IOMMU. Actually 201 * some IOMMUs can handle everything, but I don't know of a 202 * way to test this here. 203 */ 204 if (b_pfn < (min_t(u64, 0xffffffffUL, BLK_BOUNCE_HIGH) >> PAGE_SHIFT)) 205 dma = 1; 206 q->limits.bounce_pfn = max_low_pfn; 207 #else 208 if (b_pfn < blk_max_low_pfn) 209 dma = 1; 210 q->limits.bounce_pfn = b_pfn; 211 #endif 212 if (dma) { 213 init_emergency_isa_pool(); 214 q->bounce_gfp = GFP_NOIO | GFP_DMA; 215 q->limits.bounce_pfn = b_pfn; 216 } 217 } 218 EXPORT_SYMBOL(blk_queue_bounce_limit); 219 220 /** 221 * blk_queue_max_sectors - set max sectors for a request for this queue 222 * @q: the request queue for the device 223 * @max_sectors: max sectors in the usual 512b unit 224 * 225 * Description: 226 * Enables a low level driver to set an upper limit on the size of 227 * received requests. 228 **/ 229 void blk_queue_max_sectors(struct request_queue *q, unsigned int max_sectors) 230 { 231 if ((max_sectors << 9) < PAGE_CACHE_SIZE) { 232 max_sectors = 1 << (PAGE_CACHE_SHIFT - 9); 233 printk(KERN_INFO "%s: set to minimum %d\n", 234 __func__, max_sectors); 235 } 236 237 if (BLK_DEF_MAX_SECTORS > max_sectors) 238 q->limits.max_hw_sectors = q->limits.max_sectors = max_sectors; 239 else { 240 q->limits.max_sectors = BLK_DEF_MAX_SECTORS; 241 q->limits.max_hw_sectors = max_sectors; 242 } 243 } 244 EXPORT_SYMBOL(blk_queue_max_sectors); 245 246 void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_sectors) 247 { 248 if (BLK_DEF_MAX_SECTORS > max_sectors) 249 q->limits.max_hw_sectors = BLK_DEF_MAX_SECTORS; 250 else 251 q->limits.max_hw_sectors = max_sectors; 252 } 253 EXPORT_SYMBOL(blk_queue_max_hw_sectors); 254 255 /** 256 * blk_queue_max_phys_segments - set max phys segments for a request for this queue 257 * @q: the request queue for the device 258 * @max_segments: max number of segments 259 * 260 * Description: 261 * Enables a low level driver to set an upper limit on the number of 262 * physical data segments in a request. This would be the largest sized 263 * scatter list the driver could handle. 264 **/ 265 void blk_queue_max_phys_segments(struct request_queue *q, 266 unsigned short max_segments) 267 { 268 if (!max_segments) { 269 max_segments = 1; 270 printk(KERN_INFO "%s: set to minimum %d\n", 271 __func__, max_segments); 272 } 273 274 q->limits.max_phys_segments = max_segments; 275 } 276 EXPORT_SYMBOL(blk_queue_max_phys_segments); 277 278 /** 279 * blk_queue_max_hw_segments - set max hw segments for a request for this queue 280 * @q: the request queue for the device 281 * @max_segments: max number of segments 282 * 283 * Description: 284 * Enables a low level driver to set an upper limit on the number of 285 * hw data segments in a request. This would be the largest number of 286 * address/length pairs the host adapter can actually give at once 287 * to the device. 288 **/ 289 void blk_queue_max_hw_segments(struct request_queue *q, 290 unsigned short max_segments) 291 { 292 if (!max_segments) { 293 max_segments = 1; 294 printk(KERN_INFO "%s: set to minimum %d\n", 295 __func__, max_segments); 296 } 297 298 q->limits.max_hw_segments = max_segments; 299 } 300 EXPORT_SYMBOL(blk_queue_max_hw_segments); 301 302 /** 303 * blk_queue_max_segment_size - set max segment size for blk_rq_map_sg 304 * @q: the request queue for the device 305 * @max_size: max size of segment in bytes 306 * 307 * Description: 308 * Enables a low level driver to set an upper limit on the size of a 309 * coalesced segment 310 **/ 311 void blk_queue_max_segment_size(struct request_queue *q, unsigned int max_size) 312 { 313 if (max_size < PAGE_CACHE_SIZE) { 314 max_size = PAGE_CACHE_SIZE; 315 printk(KERN_INFO "%s: set to minimum %d\n", 316 __func__, max_size); 317 } 318 319 q->limits.max_segment_size = max_size; 320 } 321 EXPORT_SYMBOL(blk_queue_max_segment_size); 322 323 /** 324 * blk_queue_logical_block_size - set logical block size for the queue 325 * @q: the request queue for the device 326 * @size: the logical block size, in bytes 327 * 328 * Description: 329 * This should be set to the lowest possible block size that the 330 * storage device can address. The default of 512 covers most 331 * hardware. 332 **/ 333 void blk_queue_logical_block_size(struct request_queue *q, unsigned short size) 334 { 335 q->limits.logical_block_size = size; 336 337 if (q->limits.physical_block_size < size) 338 q->limits.physical_block_size = size; 339 340 if (q->limits.io_min < q->limits.physical_block_size) 341 q->limits.io_min = q->limits.physical_block_size; 342 } 343 EXPORT_SYMBOL(blk_queue_logical_block_size); 344 345 /** 346 * blk_queue_physical_block_size - set physical block size for the queue 347 * @q: the request queue for the device 348 * @size: the physical block size, in bytes 349 * 350 * Description: 351 * This should be set to the lowest possible sector size that the 352 * hardware can operate on without reverting to read-modify-write 353 * operations. 354 */ 355 void blk_queue_physical_block_size(struct request_queue *q, unsigned short size) 356 { 357 q->limits.physical_block_size = size; 358 359 if (q->limits.physical_block_size < q->limits.logical_block_size) 360 q->limits.physical_block_size = q->limits.logical_block_size; 361 362 if (q->limits.io_min < q->limits.physical_block_size) 363 q->limits.io_min = q->limits.physical_block_size; 364 } 365 EXPORT_SYMBOL(blk_queue_physical_block_size); 366 367 /** 368 * blk_queue_alignment_offset - set physical block alignment offset 369 * @q: the request queue for the device 370 * @offset: alignment offset in bytes 371 * 372 * Description: 373 * Some devices are naturally misaligned to compensate for things like 374 * the legacy DOS partition table 63-sector offset. Low-level drivers 375 * should call this function for devices whose first sector is not 376 * naturally aligned. 377 */ 378 void blk_queue_alignment_offset(struct request_queue *q, unsigned int offset) 379 { 380 q->limits.alignment_offset = 381 offset & (q->limits.physical_block_size - 1); 382 q->limits.misaligned = 0; 383 } 384 EXPORT_SYMBOL(blk_queue_alignment_offset); 385 386 /** 387 * blk_queue_io_min - set minimum request size for the queue 388 * @q: the request queue for the device 389 * @min: smallest I/O size in bytes 390 * 391 * Description: 392 * Some devices have an internal block size bigger than the reported 393 * hardware sector size. This function can be used to signal the 394 * smallest I/O the device can perform without incurring a performance 395 * penalty. 396 */ 397 void blk_queue_io_min(struct request_queue *q, unsigned int min) 398 { 399 q->limits.io_min = min; 400 401 if (q->limits.io_min < q->limits.logical_block_size) 402 q->limits.io_min = q->limits.logical_block_size; 403 404 if (q->limits.io_min < q->limits.physical_block_size) 405 q->limits.io_min = q->limits.physical_block_size; 406 } 407 EXPORT_SYMBOL(blk_queue_io_min); 408 409 /** 410 * blk_queue_io_opt - set optimal request size for the queue 411 * @q: the request queue for the device 412 * @opt: optimal request size in bytes 413 * 414 * Description: 415 * Drivers can call this function to set the preferred I/O request 416 * size for devices that report such a value. 417 */ 418 void blk_queue_io_opt(struct request_queue *q, unsigned int opt) 419 { 420 q->limits.io_opt = opt; 421 } 422 EXPORT_SYMBOL(blk_queue_io_opt); 423 424 /* 425 * Returns the minimum that is _not_ zero, unless both are zero. 426 */ 427 #define min_not_zero(l, r) (l == 0) ? r : ((r == 0) ? l : min(l, r)) 428 429 /** 430 * blk_queue_stack_limits - inherit underlying queue limits for stacked drivers 431 * @t: the stacking driver (top) 432 * @b: the underlying device (bottom) 433 **/ 434 void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b) 435 { 436 /* zero is "infinity" */ 437 t->limits.max_sectors = min_not_zero(queue_max_sectors(t), 438 queue_max_sectors(b)); 439 440 t->limits.max_hw_sectors = min_not_zero(queue_max_hw_sectors(t), 441 queue_max_hw_sectors(b)); 442 443 t->limits.seg_boundary_mask = min_not_zero(queue_segment_boundary(t), 444 queue_segment_boundary(b)); 445 446 t->limits.max_phys_segments = min_not_zero(queue_max_phys_segments(t), 447 queue_max_phys_segments(b)); 448 449 t->limits.max_hw_segments = min_not_zero(queue_max_hw_segments(t), 450 queue_max_hw_segments(b)); 451 452 t->limits.max_segment_size = min_not_zero(queue_max_segment_size(t), 453 queue_max_segment_size(b)); 454 455 t->limits.logical_block_size = max(queue_logical_block_size(t), 456 queue_logical_block_size(b)); 457 458 if (!t->queue_lock) 459 WARN_ON_ONCE(1); 460 else if (!test_bit(QUEUE_FLAG_CLUSTER, &b->queue_flags)) { 461 unsigned long flags; 462 spin_lock_irqsave(t->queue_lock, flags); 463 queue_flag_clear(QUEUE_FLAG_CLUSTER, t); 464 spin_unlock_irqrestore(t->queue_lock, flags); 465 } 466 } 467 EXPORT_SYMBOL(blk_queue_stack_limits); 468 469 /** 470 * blk_stack_limits - adjust queue_limits for stacked devices 471 * @t: the stacking driver limits (top) 472 * @b: the underlying queue limits (bottom) 473 * @offset: offset to beginning of data within component device 474 * 475 * Description: 476 * Merges two queue_limit structs. Returns 0 if alignment didn't 477 * change. Returns -1 if adding the bottom device caused 478 * misalignment. 479 */ 480 int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, 481 sector_t offset) 482 { 483 t->max_sectors = min_not_zero(t->max_sectors, b->max_sectors); 484 t->max_hw_sectors = min_not_zero(t->max_hw_sectors, b->max_hw_sectors); 485 t->bounce_pfn = min_not_zero(t->bounce_pfn, b->bounce_pfn); 486 487 t->seg_boundary_mask = min_not_zero(t->seg_boundary_mask, 488 b->seg_boundary_mask); 489 490 t->max_phys_segments = min_not_zero(t->max_phys_segments, 491 b->max_phys_segments); 492 493 t->max_hw_segments = min_not_zero(t->max_hw_segments, 494 b->max_hw_segments); 495 496 t->max_segment_size = min_not_zero(t->max_segment_size, 497 b->max_segment_size); 498 499 t->logical_block_size = max(t->logical_block_size, 500 b->logical_block_size); 501 502 t->physical_block_size = max(t->physical_block_size, 503 b->physical_block_size); 504 505 t->io_min = max(t->io_min, b->io_min); 506 t->no_cluster |= b->no_cluster; 507 508 /* Bottom device offset aligned? */ 509 if (offset && 510 (offset & (b->physical_block_size - 1)) != b->alignment_offset) { 511 t->misaligned = 1; 512 return -1; 513 } 514 515 /* If top has no alignment offset, inherit from bottom */ 516 if (!t->alignment_offset) 517 t->alignment_offset = 518 b->alignment_offset & (b->physical_block_size - 1); 519 520 /* Top device aligned on logical block boundary? */ 521 if (t->alignment_offset & (t->logical_block_size - 1)) { 522 t->misaligned = 1; 523 return -1; 524 } 525 526 return 0; 527 } 528 EXPORT_SYMBOL(blk_stack_limits); 529 530 /** 531 * disk_stack_limits - adjust queue limits for stacked drivers 532 * @disk: MD/DM gendisk (top) 533 * @bdev: the underlying block device (bottom) 534 * @offset: offset to beginning of data within component device 535 * 536 * Description: 537 * Merges the limits for two queues. Returns 0 if alignment 538 * didn't change. Returns -1 if adding the bottom device caused 539 * misalignment. 540 */ 541 void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, 542 sector_t offset) 543 { 544 struct request_queue *t = disk->queue; 545 struct request_queue *b = bdev_get_queue(bdev); 546 547 offset += get_start_sect(bdev) << 9; 548 549 if (blk_stack_limits(&t->limits, &b->limits, offset) < 0) { 550 char top[BDEVNAME_SIZE], bottom[BDEVNAME_SIZE]; 551 552 disk_name(disk, 0, top); 553 bdevname(bdev, bottom); 554 555 printk(KERN_NOTICE "%s: Warning: Device %s is misaligned\n", 556 top, bottom); 557 } 558 559 if (!t->queue_lock) 560 WARN_ON_ONCE(1); 561 else if (!test_bit(QUEUE_FLAG_CLUSTER, &b->queue_flags)) { 562 unsigned long flags; 563 564 spin_lock_irqsave(t->queue_lock, flags); 565 if (!test_bit(QUEUE_FLAG_CLUSTER, &b->queue_flags)) 566 queue_flag_clear(QUEUE_FLAG_CLUSTER, t); 567 spin_unlock_irqrestore(t->queue_lock, flags); 568 } 569 } 570 EXPORT_SYMBOL(disk_stack_limits); 571 572 /** 573 * blk_queue_dma_pad - set pad mask 574 * @q: the request queue for the device 575 * @mask: pad mask 576 * 577 * Set dma pad mask. 578 * 579 * Appending pad buffer to a request modifies the last entry of a 580 * scatter list such that it includes the pad buffer. 581 **/ 582 void blk_queue_dma_pad(struct request_queue *q, unsigned int mask) 583 { 584 q->dma_pad_mask = mask; 585 } 586 EXPORT_SYMBOL(blk_queue_dma_pad); 587 588 /** 589 * blk_queue_update_dma_pad - update pad mask 590 * @q: the request queue for the device 591 * @mask: pad mask 592 * 593 * Update dma pad mask. 594 * 595 * Appending pad buffer to a request modifies the last entry of a 596 * scatter list such that it includes the pad buffer. 597 **/ 598 void blk_queue_update_dma_pad(struct request_queue *q, unsigned int mask) 599 { 600 if (mask > q->dma_pad_mask) 601 q->dma_pad_mask = mask; 602 } 603 EXPORT_SYMBOL(blk_queue_update_dma_pad); 604 605 /** 606 * blk_queue_dma_drain - Set up a drain buffer for excess dma. 607 * @q: the request queue for the device 608 * @dma_drain_needed: fn which returns non-zero if drain is necessary 609 * @buf: physically contiguous buffer 610 * @size: size of the buffer in bytes 611 * 612 * Some devices have excess DMA problems and can't simply discard (or 613 * zero fill) the unwanted piece of the transfer. They have to have a 614 * real area of memory to transfer it into. The use case for this is 615 * ATAPI devices in DMA mode. If the packet command causes a transfer 616 * bigger than the transfer size some HBAs will lock up if there 617 * aren't DMA elements to contain the excess transfer. What this API 618 * does is adjust the queue so that the buf is always appended 619 * silently to the scatterlist. 620 * 621 * Note: This routine adjusts max_hw_segments to make room for 622 * appending the drain buffer. If you call 623 * blk_queue_max_hw_segments() or blk_queue_max_phys_segments() after 624 * calling this routine, you must set the limit to one fewer than your 625 * device can support otherwise there won't be room for the drain 626 * buffer. 627 */ 628 int blk_queue_dma_drain(struct request_queue *q, 629 dma_drain_needed_fn *dma_drain_needed, 630 void *buf, unsigned int size) 631 { 632 if (queue_max_hw_segments(q) < 2 || queue_max_phys_segments(q) < 2) 633 return -EINVAL; 634 /* make room for appending the drain */ 635 blk_queue_max_hw_segments(q, queue_max_hw_segments(q) - 1); 636 blk_queue_max_phys_segments(q, queue_max_phys_segments(q) - 1); 637 q->dma_drain_needed = dma_drain_needed; 638 q->dma_drain_buffer = buf; 639 q->dma_drain_size = size; 640 641 return 0; 642 } 643 EXPORT_SYMBOL_GPL(blk_queue_dma_drain); 644 645 /** 646 * blk_queue_segment_boundary - set boundary rules for segment merging 647 * @q: the request queue for the device 648 * @mask: the memory boundary mask 649 **/ 650 void blk_queue_segment_boundary(struct request_queue *q, unsigned long mask) 651 { 652 if (mask < PAGE_CACHE_SIZE - 1) { 653 mask = PAGE_CACHE_SIZE - 1; 654 printk(KERN_INFO "%s: set to minimum %lx\n", 655 __func__, mask); 656 } 657 658 q->limits.seg_boundary_mask = mask; 659 } 660 EXPORT_SYMBOL(blk_queue_segment_boundary); 661 662 /** 663 * blk_queue_dma_alignment - set dma length and memory alignment 664 * @q: the request queue for the device 665 * @mask: alignment mask 666 * 667 * description: 668 * set required memory and length alignment for direct dma transactions. 669 * this is used when building direct io requests for the queue. 670 * 671 **/ 672 void blk_queue_dma_alignment(struct request_queue *q, int mask) 673 { 674 q->dma_alignment = mask; 675 } 676 EXPORT_SYMBOL(blk_queue_dma_alignment); 677 678 /** 679 * blk_queue_update_dma_alignment - update dma length and memory alignment 680 * @q: the request queue for the device 681 * @mask: alignment mask 682 * 683 * description: 684 * update required memory and length alignment for direct dma transactions. 685 * If the requested alignment is larger than the current alignment, then 686 * the current queue alignment is updated to the new value, otherwise it 687 * is left alone. The design of this is to allow multiple objects 688 * (driver, device, transport etc) to set their respective 689 * alignments without having them interfere. 690 * 691 **/ 692 void blk_queue_update_dma_alignment(struct request_queue *q, int mask) 693 { 694 BUG_ON(mask > PAGE_SIZE); 695 696 if (mask > q->dma_alignment) 697 q->dma_alignment = mask; 698 } 699 EXPORT_SYMBOL(blk_queue_update_dma_alignment); 700 701 static int __init blk_settings_init(void) 702 { 703 blk_max_low_pfn = max_low_pfn - 1; 704 blk_max_pfn = max_pfn - 1; 705 return 0; 706 } 707 subsys_initcall(blk_settings_init); 708