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