1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Functions related to setting various queue properties from drivers 4 */ 5 #include <linux/kernel.h> 6 #include <linux/module.h> 7 #include <linux/init.h> 8 #include <linux/bio.h> 9 #include <linux/blkdev.h> 10 #include <linux/memblock.h> /* for max_pfn/max_low_pfn */ 11 #include <linux/gcd.h> 12 #include <linux/lcm.h> 13 #include <linux/jiffies.h> 14 #include <linux/gfp.h> 15 #include <linux/dma-mapping.h> 16 17 #include "blk.h" 18 #include "blk-wbt.h" 19 20 unsigned long blk_max_low_pfn; 21 EXPORT_SYMBOL(blk_max_low_pfn); 22 23 unsigned long blk_max_pfn; 24 25 void blk_queue_rq_timeout(struct request_queue *q, unsigned int timeout) 26 { 27 q->rq_timeout = timeout; 28 } 29 EXPORT_SYMBOL_GPL(blk_queue_rq_timeout); 30 31 /** 32 * blk_set_default_limits - reset limits to default values 33 * @lim: the queue_limits structure to reset 34 * 35 * Description: 36 * Returns a queue_limit struct to its default state. 37 */ 38 void blk_set_default_limits(struct queue_limits *lim) 39 { 40 lim->max_segments = BLK_MAX_SEGMENTS; 41 lim->max_discard_segments = 1; 42 lim->max_integrity_segments = 0; 43 lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK; 44 lim->virt_boundary_mask = 0; 45 lim->max_segment_size = BLK_MAX_SEGMENT_SIZE; 46 lim->max_sectors = lim->max_hw_sectors = BLK_SAFE_MAX_SECTORS; 47 lim->max_dev_sectors = 0; 48 lim->chunk_sectors = 0; 49 lim->max_write_same_sectors = 0; 50 lim->max_write_zeroes_sectors = 0; 51 lim->max_discard_sectors = 0; 52 lim->max_hw_discard_sectors = 0; 53 lim->discard_granularity = 0; 54 lim->discard_alignment = 0; 55 lim->discard_misaligned = 0; 56 lim->logical_block_size = lim->physical_block_size = lim->io_min = 512; 57 lim->bounce_pfn = (unsigned long)(BLK_BOUNCE_ANY >> PAGE_SHIFT); 58 lim->alignment_offset = 0; 59 lim->io_opt = 0; 60 lim->misaligned = 0; 61 lim->zoned = BLK_ZONED_NONE; 62 } 63 EXPORT_SYMBOL(blk_set_default_limits); 64 65 /** 66 * blk_set_stacking_limits - set default limits for stacking devices 67 * @lim: the queue_limits structure to reset 68 * 69 * Description: 70 * Returns a queue_limit struct to its default state. Should be used 71 * by stacking drivers like DM that have no internal limits. 72 */ 73 void blk_set_stacking_limits(struct queue_limits *lim) 74 { 75 blk_set_default_limits(lim); 76 77 /* Inherit limits from component devices */ 78 lim->max_segments = USHRT_MAX; 79 lim->max_discard_segments = USHRT_MAX; 80 lim->max_hw_sectors = UINT_MAX; 81 lim->max_segment_size = UINT_MAX; 82 lim->max_sectors = UINT_MAX; 83 lim->max_dev_sectors = UINT_MAX; 84 lim->max_write_same_sectors = UINT_MAX; 85 lim->max_write_zeroes_sectors = UINT_MAX; 86 } 87 EXPORT_SYMBOL(blk_set_stacking_limits); 88 89 /** 90 * blk_queue_make_request - define an alternate make_request function for a device 91 * @q: the request queue for the device to be affected 92 * @mfn: the alternate make_request function 93 * 94 * Description: 95 * The normal way for &struct bios to be passed to a device 96 * driver is for them to be collected into requests on a request 97 * queue, and then to allow the device driver to select requests 98 * off that queue when it is ready. This works well for many block 99 * devices. However some block devices (typically virtual devices 100 * such as md or lvm) do not benefit from the processing on the 101 * request queue, and are served best by having the requests passed 102 * directly to them. This can be achieved by providing a function 103 * to blk_queue_make_request(). 104 * 105 * Caveat: 106 * The driver that does this *must* be able to deal appropriately 107 * with buffers in "highmemory". This can be accomplished by either calling 108 * kmap_atomic() to get a temporary kernel mapping, or by calling 109 * blk_queue_bounce() to create a buffer in normal memory. 110 **/ 111 void blk_queue_make_request(struct request_queue *q, make_request_fn *mfn) 112 { 113 /* 114 * set defaults 115 */ 116 q->nr_requests = BLKDEV_MAX_RQ; 117 118 q->make_request_fn = mfn; 119 blk_queue_dma_alignment(q, 511); 120 121 blk_set_default_limits(&q->limits); 122 } 123 EXPORT_SYMBOL(blk_queue_make_request); 124 125 /** 126 * blk_queue_bounce_limit - set bounce buffer limit for queue 127 * @q: the request queue for the device 128 * @max_addr: the maximum address the device can handle 129 * 130 * Description: 131 * Different hardware can have different requirements as to what pages 132 * it can do I/O directly to. A low level driver can call 133 * blk_queue_bounce_limit to have lower memory pages allocated as bounce 134 * buffers for doing I/O to pages residing above @max_addr. 135 **/ 136 void blk_queue_bounce_limit(struct request_queue *q, u64 max_addr) 137 { 138 unsigned long b_pfn = max_addr >> PAGE_SHIFT; 139 int dma = 0; 140 141 q->bounce_gfp = GFP_NOIO; 142 #if BITS_PER_LONG == 64 143 /* 144 * Assume anything <= 4GB can be handled by IOMMU. Actually 145 * some IOMMUs can handle everything, but I don't know of a 146 * way to test this here. 147 */ 148 if (b_pfn < (min_t(u64, 0xffffffffUL, BLK_BOUNCE_HIGH) >> PAGE_SHIFT)) 149 dma = 1; 150 q->limits.bounce_pfn = max(max_low_pfn, b_pfn); 151 #else 152 if (b_pfn < blk_max_low_pfn) 153 dma = 1; 154 q->limits.bounce_pfn = b_pfn; 155 #endif 156 if (dma) { 157 init_emergency_isa_pool(); 158 q->bounce_gfp = GFP_NOIO | GFP_DMA; 159 q->limits.bounce_pfn = b_pfn; 160 } 161 } 162 EXPORT_SYMBOL(blk_queue_bounce_limit); 163 164 /** 165 * blk_queue_max_hw_sectors - set max sectors for a request for this queue 166 * @q: the request queue for the device 167 * @max_hw_sectors: max hardware sectors in the usual 512b unit 168 * 169 * Description: 170 * Enables a low level driver to set a hard upper limit, 171 * max_hw_sectors, on the size of requests. max_hw_sectors is set by 172 * the device driver based upon the capabilities of the I/O 173 * controller. 174 * 175 * max_dev_sectors is a hard limit imposed by the storage device for 176 * READ/WRITE requests. It is set by the disk driver. 177 * 178 * max_sectors is a soft limit imposed by the block layer for 179 * filesystem type requests. This value can be overridden on a 180 * per-device basis in /sys/block/<device>/queue/max_sectors_kb. 181 * The soft limit can not exceed max_hw_sectors. 182 **/ 183 void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_sectors) 184 { 185 struct queue_limits *limits = &q->limits; 186 unsigned int max_sectors; 187 188 if ((max_hw_sectors << 9) < PAGE_SIZE) { 189 max_hw_sectors = 1 << (PAGE_SHIFT - 9); 190 printk(KERN_INFO "%s: set to minimum %d\n", 191 __func__, max_hw_sectors); 192 } 193 194 limits->max_hw_sectors = max_hw_sectors; 195 max_sectors = min_not_zero(max_hw_sectors, limits->max_dev_sectors); 196 max_sectors = min_t(unsigned int, max_sectors, BLK_DEF_MAX_SECTORS); 197 limits->max_sectors = max_sectors; 198 q->backing_dev_info->io_pages = max_sectors >> (PAGE_SHIFT - 9); 199 } 200 EXPORT_SYMBOL(blk_queue_max_hw_sectors); 201 202 /** 203 * blk_queue_chunk_sectors - set size of the chunk for this queue 204 * @q: the request queue for the device 205 * @chunk_sectors: chunk sectors in the usual 512b unit 206 * 207 * Description: 208 * If a driver doesn't want IOs to cross a given chunk size, it can set 209 * this limit and prevent merging across chunks. Note that the chunk size 210 * must currently be a power-of-2 in sectors. Also note that the block 211 * layer must accept a page worth of data at any offset. So if the 212 * crossing of chunks is a hard limitation in the driver, it must still be 213 * prepared to split single page bios. 214 **/ 215 void blk_queue_chunk_sectors(struct request_queue *q, unsigned int chunk_sectors) 216 { 217 BUG_ON(!is_power_of_2(chunk_sectors)); 218 q->limits.chunk_sectors = chunk_sectors; 219 } 220 EXPORT_SYMBOL(blk_queue_chunk_sectors); 221 222 /** 223 * blk_queue_max_discard_sectors - set max sectors for a single discard 224 * @q: the request queue for the device 225 * @max_discard_sectors: maximum number of sectors to discard 226 **/ 227 void blk_queue_max_discard_sectors(struct request_queue *q, 228 unsigned int max_discard_sectors) 229 { 230 q->limits.max_hw_discard_sectors = max_discard_sectors; 231 q->limits.max_discard_sectors = max_discard_sectors; 232 } 233 EXPORT_SYMBOL(blk_queue_max_discard_sectors); 234 235 /** 236 * blk_queue_max_write_same_sectors - set max sectors for a single write same 237 * @q: the request queue for the device 238 * @max_write_same_sectors: maximum number of sectors to write per command 239 **/ 240 void blk_queue_max_write_same_sectors(struct request_queue *q, 241 unsigned int max_write_same_sectors) 242 { 243 q->limits.max_write_same_sectors = max_write_same_sectors; 244 } 245 EXPORT_SYMBOL(blk_queue_max_write_same_sectors); 246 247 /** 248 * blk_queue_max_write_zeroes_sectors - set max sectors for a single 249 * write zeroes 250 * @q: the request queue for the device 251 * @max_write_zeroes_sectors: maximum number of sectors to write per command 252 **/ 253 void blk_queue_max_write_zeroes_sectors(struct request_queue *q, 254 unsigned int max_write_zeroes_sectors) 255 { 256 q->limits.max_write_zeroes_sectors = max_write_zeroes_sectors; 257 } 258 EXPORT_SYMBOL(blk_queue_max_write_zeroes_sectors); 259 260 /** 261 * blk_queue_max_segments - set max hw segments for a request for this queue 262 * @q: the request queue for the device 263 * @max_segments: max number of segments 264 * 265 * Description: 266 * Enables a low level driver to set an upper limit on the number of 267 * hw data segments in a request. 268 **/ 269 void blk_queue_max_segments(struct request_queue *q, unsigned short max_segments) 270 { 271 if (!max_segments) { 272 max_segments = 1; 273 printk(KERN_INFO "%s: set to minimum %d\n", 274 __func__, max_segments); 275 } 276 277 q->limits.max_segments = max_segments; 278 } 279 EXPORT_SYMBOL(blk_queue_max_segments); 280 281 /** 282 * blk_queue_max_discard_segments - set max segments for discard requests 283 * @q: the request queue for the device 284 * @max_segments: max number of segments 285 * 286 * Description: 287 * Enables a low level driver to set an upper limit on the number of 288 * segments in a discard request. 289 **/ 290 void blk_queue_max_discard_segments(struct request_queue *q, 291 unsigned short max_segments) 292 { 293 q->limits.max_discard_segments = max_segments; 294 } 295 EXPORT_SYMBOL_GPL(blk_queue_max_discard_segments); 296 297 /** 298 * blk_queue_max_segment_size - set max segment size for blk_rq_map_sg 299 * @q: the request queue for the device 300 * @max_size: max size of segment in bytes 301 * 302 * Description: 303 * Enables a low level driver to set an upper limit on the size of a 304 * coalesced segment 305 **/ 306 void blk_queue_max_segment_size(struct request_queue *q, unsigned int max_size) 307 { 308 if (max_size < PAGE_SIZE) { 309 max_size = PAGE_SIZE; 310 printk(KERN_INFO "%s: set to minimum %d\n", 311 __func__, max_size); 312 } 313 314 /* see blk_queue_virt_boundary() for the explanation */ 315 WARN_ON_ONCE(q->limits.virt_boundary_mask); 316 317 q->limits.max_segment_size = max_size; 318 } 319 EXPORT_SYMBOL(blk_queue_max_segment_size); 320 321 /** 322 * blk_queue_logical_block_size - set logical block size for the queue 323 * @q: the request queue for the device 324 * @size: the logical block size, in bytes 325 * 326 * Description: 327 * This should be set to the lowest possible block size that the 328 * storage device can address. The default of 512 covers most 329 * hardware. 330 **/ 331 void blk_queue_logical_block_size(struct request_queue *q, unsigned short size) 332 { 333 q->limits.logical_block_size = size; 334 335 if (q->limits.physical_block_size < size) 336 q->limits.physical_block_size = size; 337 338 if (q->limits.io_min < q->limits.physical_block_size) 339 q->limits.io_min = q->limits.physical_block_size; 340 } 341 EXPORT_SYMBOL(blk_queue_logical_block_size); 342 343 /** 344 * blk_queue_physical_block_size - set physical block size for the queue 345 * @q: the request queue for the device 346 * @size: the physical block size, in bytes 347 * 348 * Description: 349 * This should be set to the lowest possible sector size that the 350 * hardware can operate on without reverting to read-modify-write 351 * operations. 352 */ 353 void blk_queue_physical_block_size(struct request_queue *q, unsigned int size) 354 { 355 q->limits.physical_block_size = size; 356 357 if (q->limits.physical_block_size < q->limits.logical_block_size) 358 q->limits.physical_block_size = q->limits.logical_block_size; 359 360 if (q->limits.io_min < q->limits.physical_block_size) 361 q->limits.io_min = q->limits.physical_block_size; 362 } 363 EXPORT_SYMBOL(blk_queue_physical_block_size); 364 365 /** 366 * blk_queue_alignment_offset - set physical block alignment offset 367 * @q: the request queue for the device 368 * @offset: alignment offset in bytes 369 * 370 * Description: 371 * Some devices are naturally misaligned to compensate for things like 372 * the legacy DOS partition table 63-sector offset. Low-level drivers 373 * should call this function for devices whose first sector is not 374 * naturally aligned. 375 */ 376 void blk_queue_alignment_offset(struct request_queue *q, unsigned int offset) 377 { 378 q->limits.alignment_offset = 379 offset & (q->limits.physical_block_size - 1); 380 q->limits.misaligned = 0; 381 } 382 EXPORT_SYMBOL(blk_queue_alignment_offset); 383 384 /** 385 * blk_limits_io_min - set minimum request size for a device 386 * @limits: the queue limits 387 * @min: smallest I/O size in bytes 388 * 389 * Description: 390 * Some devices have an internal block size bigger than the reported 391 * hardware sector size. This function can be used to signal the 392 * smallest I/O the device can perform without incurring a performance 393 * penalty. 394 */ 395 void blk_limits_io_min(struct queue_limits *limits, unsigned int min) 396 { 397 limits->io_min = min; 398 399 if (limits->io_min < limits->logical_block_size) 400 limits->io_min = limits->logical_block_size; 401 402 if (limits->io_min < limits->physical_block_size) 403 limits->io_min = limits->physical_block_size; 404 } 405 EXPORT_SYMBOL(blk_limits_io_min); 406 407 /** 408 * blk_queue_io_min - set minimum request size for the queue 409 * @q: the request queue for the device 410 * @min: smallest I/O size in bytes 411 * 412 * Description: 413 * Storage devices may report a granularity or preferred minimum I/O 414 * size which is the smallest request the device can perform without 415 * incurring a performance penalty. For disk drives this is often the 416 * physical block size. For RAID arrays it is often the stripe chunk 417 * size. A properly aligned multiple of minimum_io_size is the 418 * preferred request size for workloads where a high number of I/O 419 * operations is desired. 420 */ 421 void blk_queue_io_min(struct request_queue *q, unsigned int min) 422 { 423 blk_limits_io_min(&q->limits, min); 424 } 425 EXPORT_SYMBOL(blk_queue_io_min); 426 427 /** 428 * blk_limits_io_opt - set optimal request size for a device 429 * @limits: the queue limits 430 * @opt: smallest I/O size in bytes 431 * 432 * Description: 433 * Storage devices may report an optimal I/O size, which is the 434 * device's preferred unit for sustained I/O. This is rarely reported 435 * for disk drives. For RAID arrays it is usually the stripe width or 436 * the internal track size. A properly aligned multiple of 437 * optimal_io_size is the preferred request size for workloads where 438 * sustained throughput is desired. 439 */ 440 void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt) 441 { 442 limits->io_opt = opt; 443 } 444 EXPORT_SYMBOL(blk_limits_io_opt); 445 446 /** 447 * blk_queue_io_opt - set optimal request size for the queue 448 * @q: the request queue for the device 449 * @opt: optimal request size in bytes 450 * 451 * Description: 452 * Storage devices may report an optimal I/O size, which is the 453 * device's preferred unit for sustained I/O. This is rarely reported 454 * for disk drives. For RAID arrays it is usually the stripe width or 455 * the internal track size. A properly aligned multiple of 456 * optimal_io_size is the preferred request size for workloads where 457 * sustained throughput is desired. 458 */ 459 void blk_queue_io_opt(struct request_queue *q, unsigned int opt) 460 { 461 blk_limits_io_opt(&q->limits, opt); 462 } 463 EXPORT_SYMBOL(blk_queue_io_opt); 464 465 /** 466 * blk_queue_stack_limits - inherit underlying queue limits for stacked drivers 467 * @t: the stacking driver (top) 468 * @b: the underlying device (bottom) 469 **/ 470 void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b) 471 { 472 blk_stack_limits(&t->limits, &b->limits, 0); 473 } 474 EXPORT_SYMBOL(blk_queue_stack_limits); 475 476 /** 477 * blk_stack_limits - adjust queue_limits for stacked devices 478 * @t: the stacking driver limits (top device) 479 * @b: the underlying queue limits (bottom, component device) 480 * @start: first data sector within component device 481 * 482 * Description: 483 * This function is used by stacking drivers like MD and DM to ensure 484 * that all component devices have compatible block sizes and 485 * alignments. The stacking driver must provide a queue_limits 486 * struct (top) and then iteratively call the stacking function for 487 * all component (bottom) devices. The stacking function will 488 * attempt to combine the values and ensure proper alignment. 489 * 490 * Returns 0 if the top and bottom queue_limits are compatible. The 491 * top device's block sizes and alignment offsets may be adjusted to 492 * ensure alignment with the bottom device. If no compatible sizes 493 * and alignments exist, -1 is returned and the resulting top 494 * queue_limits will have the misaligned flag set to indicate that 495 * the alignment_offset is undefined. 496 */ 497 int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, 498 sector_t start) 499 { 500 unsigned int top, bottom, alignment, ret = 0; 501 502 t->max_sectors = min_not_zero(t->max_sectors, b->max_sectors); 503 t->max_hw_sectors = min_not_zero(t->max_hw_sectors, b->max_hw_sectors); 504 t->max_dev_sectors = min_not_zero(t->max_dev_sectors, b->max_dev_sectors); 505 t->max_write_same_sectors = min(t->max_write_same_sectors, 506 b->max_write_same_sectors); 507 t->max_write_zeroes_sectors = min(t->max_write_zeroes_sectors, 508 b->max_write_zeroes_sectors); 509 t->bounce_pfn = min_not_zero(t->bounce_pfn, b->bounce_pfn); 510 511 t->seg_boundary_mask = min_not_zero(t->seg_boundary_mask, 512 b->seg_boundary_mask); 513 t->virt_boundary_mask = min_not_zero(t->virt_boundary_mask, 514 b->virt_boundary_mask); 515 516 t->max_segments = min_not_zero(t->max_segments, b->max_segments); 517 t->max_discard_segments = min_not_zero(t->max_discard_segments, 518 b->max_discard_segments); 519 t->max_integrity_segments = min_not_zero(t->max_integrity_segments, 520 b->max_integrity_segments); 521 522 t->max_segment_size = min_not_zero(t->max_segment_size, 523 b->max_segment_size); 524 525 t->misaligned |= b->misaligned; 526 527 alignment = queue_limit_alignment_offset(b, start); 528 529 /* Bottom device has different alignment. Check that it is 530 * compatible with the current top alignment. 531 */ 532 if (t->alignment_offset != alignment) { 533 534 top = max(t->physical_block_size, t->io_min) 535 + t->alignment_offset; 536 bottom = max(b->physical_block_size, b->io_min) + alignment; 537 538 /* Verify that top and bottom intervals line up */ 539 if (max(top, bottom) % min(top, bottom)) { 540 t->misaligned = 1; 541 ret = -1; 542 } 543 } 544 545 t->logical_block_size = max(t->logical_block_size, 546 b->logical_block_size); 547 548 t->physical_block_size = max(t->physical_block_size, 549 b->physical_block_size); 550 551 t->io_min = max(t->io_min, b->io_min); 552 t->io_opt = lcm_not_zero(t->io_opt, b->io_opt); 553 554 /* Physical block size a multiple of the logical block size? */ 555 if (t->physical_block_size & (t->logical_block_size - 1)) { 556 t->physical_block_size = t->logical_block_size; 557 t->misaligned = 1; 558 ret = -1; 559 } 560 561 /* Minimum I/O a multiple of the physical block size? */ 562 if (t->io_min & (t->physical_block_size - 1)) { 563 t->io_min = t->physical_block_size; 564 t->misaligned = 1; 565 ret = -1; 566 } 567 568 /* Optimal I/O a multiple of the physical block size? */ 569 if (t->io_opt & (t->physical_block_size - 1)) { 570 t->io_opt = 0; 571 t->misaligned = 1; 572 ret = -1; 573 } 574 575 t->raid_partial_stripes_expensive = 576 max(t->raid_partial_stripes_expensive, 577 b->raid_partial_stripes_expensive); 578 579 /* Find lowest common alignment_offset */ 580 t->alignment_offset = lcm_not_zero(t->alignment_offset, alignment) 581 % max(t->physical_block_size, t->io_min); 582 583 /* Verify that new alignment_offset is on a logical block boundary */ 584 if (t->alignment_offset & (t->logical_block_size - 1)) { 585 t->misaligned = 1; 586 ret = -1; 587 } 588 589 /* Discard alignment and granularity */ 590 if (b->discard_granularity) { 591 alignment = queue_limit_discard_alignment(b, start); 592 593 if (t->discard_granularity != 0 && 594 t->discard_alignment != alignment) { 595 top = t->discard_granularity + t->discard_alignment; 596 bottom = b->discard_granularity + alignment; 597 598 /* Verify that top and bottom intervals line up */ 599 if ((max(top, bottom) % min(top, bottom)) != 0) 600 t->discard_misaligned = 1; 601 } 602 603 t->max_discard_sectors = min_not_zero(t->max_discard_sectors, 604 b->max_discard_sectors); 605 t->max_hw_discard_sectors = min_not_zero(t->max_hw_discard_sectors, 606 b->max_hw_discard_sectors); 607 t->discard_granularity = max(t->discard_granularity, 608 b->discard_granularity); 609 t->discard_alignment = lcm_not_zero(t->discard_alignment, alignment) % 610 t->discard_granularity; 611 } 612 613 if (b->chunk_sectors) 614 t->chunk_sectors = min_not_zero(t->chunk_sectors, 615 b->chunk_sectors); 616 617 return ret; 618 } 619 EXPORT_SYMBOL(blk_stack_limits); 620 621 /** 622 * bdev_stack_limits - adjust queue limits for stacked drivers 623 * @t: the stacking driver limits (top device) 624 * @bdev: the component block_device (bottom) 625 * @start: first data sector within component device 626 * 627 * Description: 628 * Merges queue limits for a top device and a block_device. Returns 629 * 0 if alignment didn't change. Returns -1 if adding the bottom 630 * device caused misalignment. 631 */ 632 int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev, 633 sector_t start) 634 { 635 struct request_queue *bq = bdev_get_queue(bdev); 636 637 start += get_start_sect(bdev); 638 639 return blk_stack_limits(t, &bq->limits, start); 640 } 641 EXPORT_SYMBOL(bdev_stack_limits); 642 643 /** 644 * disk_stack_limits - adjust queue limits for stacked drivers 645 * @disk: MD/DM gendisk (top) 646 * @bdev: the underlying block device (bottom) 647 * @offset: offset to beginning of data within component device 648 * 649 * Description: 650 * Merges the limits for a top level gendisk and a bottom level 651 * block_device. 652 */ 653 void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, 654 sector_t offset) 655 { 656 struct request_queue *t = disk->queue; 657 658 if (bdev_stack_limits(&t->limits, bdev, offset >> 9) < 0) { 659 char top[BDEVNAME_SIZE], bottom[BDEVNAME_SIZE]; 660 661 disk_name(disk, 0, top); 662 bdevname(bdev, bottom); 663 664 printk(KERN_NOTICE "%s: Warning: Device %s is misaligned\n", 665 top, bottom); 666 } 667 } 668 EXPORT_SYMBOL(disk_stack_limits); 669 670 /** 671 * blk_queue_update_dma_pad - update pad mask 672 * @q: the request queue for the device 673 * @mask: pad mask 674 * 675 * Update dma pad mask. 676 * 677 * Appending pad buffer to a request modifies the last entry of a 678 * scatter list such that it includes the pad buffer. 679 **/ 680 void blk_queue_update_dma_pad(struct request_queue *q, unsigned int mask) 681 { 682 if (mask > q->dma_pad_mask) 683 q->dma_pad_mask = mask; 684 } 685 EXPORT_SYMBOL(blk_queue_update_dma_pad); 686 687 /** 688 * blk_queue_dma_drain - Set up a drain buffer for excess dma. 689 * @q: the request queue for the device 690 * @dma_drain_needed: fn which returns non-zero if drain is necessary 691 * @buf: physically contiguous buffer 692 * @size: size of the buffer in bytes 693 * 694 * Some devices have excess DMA problems and can't simply discard (or 695 * zero fill) the unwanted piece of the transfer. They have to have a 696 * real area of memory to transfer it into. The use case for this is 697 * ATAPI devices in DMA mode. If the packet command causes a transfer 698 * bigger than the transfer size some HBAs will lock up if there 699 * aren't DMA elements to contain the excess transfer. What this API 700 * does is adjust the queue so that the buf is always appended 701 * silently to the scatterlist. 702 * 703 * Note: This routine adjusts max_hw_segments to make room for appending 704 * the drain buffer. If you call blk_queue_max_segments() after calling 705 * this routine, you must set the limit to one fewer than your device 706 * can support otherwise there won't be room for the drain buffer. 707 */ 708 int blk_queue_dma_drain(struct request_queue *q, 709 dma_drain_needed_fn *dma_drain_needed, 710 void *buf, unsigned int size) 711 { 712 if (queue_max_segments(q) < 2) 713 return -EINVAL; 714 /* make room for appending the drain */ 715 blk_queue_max_segments(q, queue_max_segments(q) - 1); 716 q->dma_drain_needed = dma_drain_needed; 717 q->dma_drain_buffer = buf; 718 q->dma_drain_size = size; 719 720 return 0; 721 } 722 EXPORT_SYMBOL_GPL(blk_queue_dma_drain); 723 724 /** 725 * blk_queue_segment_boundary - set boundary rules for segment merging 726 * @q: the request queue for the device 727 * @mask: the memory boundary mask 728 **/ 729 void blk_queue_segment_boundary(struct request_queue *q, unsigned long mask) 730 { 731 if (mask < PAGE_SIZE - 1) { 732 mask = PAGE_SIZE - 1; 733 printk(KERN_INFO "%s: set to minimum %lx\n", 734 __func__, mask); 735 } 736 737 q->limits.seg_boundary_mask = mask; 738 } 739 EXPORT_SYMBOL(blk_queue_segment_boundary); 740 741 /** 742 * blk_queue_virt_boundary - set boundary rules for bio merging 743 * @q: the request queue for the device 744 * @mask: the memory boundary mask 745 **/ 746 void blk_queue_virt_boundary(struct request_queue *q, unsigned long mask) 747 { 748 q->limits.virt_boundary_mask = mask; 749 750 /* 751 * Devices that require a virtual boundary do not support scatter/gather 752 * I/O natively, but instead require a descriptor list entry for each 753 * page (which might not be idential to the Linux PAGE_SIZE). Because 754 * of that they are not limited by our notion of "segment size". 755 */ 756 if (mask) 757 q->limits.max_segment_size = UINT_MAX; 758 } 759 EXPORT_SYMBOL(blk_queue_virt_boundary); 760 761 /** 762 * blk_queue_dma_alignment - set dma length and memory alignment 763 * @q: the request queue for the device 764 * @mask: alignment mask 765 * 766 * description: 767 * set required memory and length alignment for direct dma transactions. 768 * this is used when building direct io requests for the queue. 769 * 770 **/ 771 void blk_queue_dma_alignment(struct request_queue *q, int mask) 772 { 773 q->dma_alignment = mask; 774 } 775 EXPORT_SYMBOL(blk_queue_dma_alignment); 776 777 /** 778 * blk_queue_update_dma_alignment - update dma length and memory alignment 779 * @q: the request queue for the device 780 * @mask: alignment mask 781 * 782 * description: 783 * update required memory and length alignment for direct dma transactions. 784 * If the requested alignment is larger than the current alignment, then 785 * the current queue alignment is updated to the new value, otherwise it 786 * is left alone. The design of this is to allow multiple objects 787 * (driver, device, transport etc) to set their respective 788 * alignments without having them interfere. 789 * 790 **/ 791 void blk_queue_update_dma_alignment(struct request_queue *q, int mask) 792 { 793 BUG_ON(mask > PAGE_SIZE); 794 795 if (mask > q->dma_alignment) 796 q->dma_alignment = mask; 797 } 798 EXPORT_SYMBOL(blk_queue_update_dma_alignment); 799 800 /** 801 * blk_set_queue_depth - tell the block layer about the device queue depth 802 * @q: the request queue for the device 803 * @depth: queue depth 804 * 805 */ 806 void blk_set_queue_depth(struct request_queue *q, unsigned int depth) 807 { 808 q->queue_depth = depth; 809 rq_qos_queue_depth_changed(q); 810 } 811 EXPORT_SYMBOL(blk_set_queue_depth); 812 813 /** 814 * blk_queue_write_cache - configure queue's write cache 815 * @q: the request queue for the device 816 * @wc: write back cache on or off 817 * @fua: device supports FUA writes, if true 818 * 819 * Tell the block layer about the write cache of @q. 820 */ 821 void blk_queue_write_cache(struct request_queue *q, bool wc, bool fua) 822 { 823 if (wc) 824 blk_queue_flag_set(QUEUE_FLAG_WC, q); 825 else 826 blk_queue_flag_clear(QUEUE_FLAG_WC, q); 827 if (fua) 828 blk_queue_flag_set(QUEUE_FLAG_FUA, q); 829 else 830 blk_queue_flag_clear(QUEUE_FLAG_FUA, q); 831 832 wbt_set_write_cache(q, test_bit(QUEUE_FLAG_WC, &q->queue_flags)); 833 } 834 EXPORT_SYMBOL_GPL(blk_queue_write_cache); 835 836 /** 837 * blk_queue_required_elevator_features - Set a queue required elevator features 838 * @q: the request queue for the target device 839 * @features: Required elevator features OR'ed together 840 * 841 * Tell the block layer that for the device controlled through @q, only the 842 * only elevators that can be used are those that implement at least the set of 843 * features specified by @features. 844 */ 845 void blk_queue_required_elevator_features(struct request_queue *q, 846 unsigned int features) 847 { 848 q->required_elevator_features = features; 849 } 850 EXPORT_SYMBOL_GPL(blk_queue_required_elevator_features); 851 852 /** 853 * blk_queue_can_use_dma_map_merging - configure queue for merging segments. 854 * @q: the request queue for the device 855 * @dev: the device pointer for dma 856 * 857 * Tell the block layer about merging the segments by dma map of @q. 858 */ 859 bool blk_queue_can_use_dma_map_merging(struct request_queue *q, 860 struct device *dev) 861 { 862 unsigned long boundary = dma_get_merge_boundary(dev); 863 864 if (!boundary) 865 return false; 866 867 /* No need to update max_segment_size. see blk_queue_virt_boundary() */ 868 blk_queue_virt_boundary(q, boundary); 869 870 return true; 871 } 872 EXPORT_SYMBOL_GPL(blk_queue_can_use_dma_map_merging); 873 874 static int __init blk_settings_init(void) 875 { 876 blk_max_low_pfn = max_low_pfn - 1; 877 blk_max_pfn = max_pfn - 1; 878 return 0; 879 } 880 subsys_initcall(blk_settings_init); 881