/*1* Functions related to setting various queue properties from drivers2*/3#include <linux/kernel.h>4#include <linux/module.h>5#include <linux/init.h>6#include <linux/bio.h>7#include <linux/blkdev.h>8#include <linux/bootmem.h> /* for max_pfn/max_low_pfn */9#include <linux/gcd.h>10#include <linux/lcm.h>11#include <linux/jiffies.h>12#include <linux/gfp.h>1314#include "blk.h"1516unsigned long blk_max_low_pfn;17EXPORT_SYMBOL(blk_max_low_pfn);1819unsigned long blk_max_pfn;2021/**22* blk_queue_prep_rq - set a prepare_request function for queue23* @q: queue24* @pfn: prepare_request function25*26* It's possible for a queue to register a prepare_request callback which27* is invoked before the request is handed to the request_fn. The goal of28* the function is to prepare a request for I/O, it can be used to build a29* cdb from the request data for instance.30*31*/32void blk_queue_prep_rq(struct request_queue *q, prep_rq_fn *pfn)33{34q->prep_rq_fn = pfn;35}36EXPORT_SYMBOL(blk_queue_prep_rq);3738/**39* blk_queue_unprep_rq - set an unprepare_request function for queue40* @q: queue41* @ufn: unprepare_request function42*43* It's possible for a queue to register an unprepare_request callback44* which is invoked before the request is finally completed. The goal45* of the function is to deallocate any data that was allocated in the46* prepare_request callback.47*48*/49void blk_queue_unprep_rq(struct request_queue *q, unprep_rq_fn *ufn)50{51q->unprep_rq_fn = ufn;52}53EXPORT_SYMBOL(blk_queue_unprep_rq);5455/**56* blk_queue_merge_bvec - set a merge_bvec function for queue57* @q: queue58* @mbfn: merge_bvec_fn59*60* Usually queues have static limitations on the max sectors or segments that61* we can put in a request. Stacking drivers may have some settings that62* are dynamic, and thus we have to query the queue whether it is ok to63* add a new bio_vec to a bio at a given offset or not. If the block device64* has such limitations, it needs to register a merge_bvec_fn to control65* the size of bio's sent to it. Note that a block device *must* allow a66* single page to be added to an empty bio. The block device driver may want67* to use the bio_split() function to deal with these bio's. By default68* no merge_bvec_fn is defined for a queue, and only the fixed limits are69* honored.70*/71void blk_queue_merge_bvec(struct request_queue *q, merge_bvec_fn *mbfn)72{73q->merge_bvec_fn = mbfn;74}75EXPORT_SYMBOL(blk_queue_merge_bvec);7677void blk_queue_softirq_done(struct request_queue *q, softirq_done_fn *fn)78{79q->softirq_done_fn = fn;80}81EXPORT_SYMBOL(blk_queue_softirq_done);8283void blk_queue_rq_timeout(struct request_queue *q, unsigned int timeout)84{85q->rq_timeout = timeout;86}87EXPORT_SYMBOL_GPL(blk_queue_rq_timeout);8889void blk_queue_rq_timed_out(struct request_queue *q, rq_timed_out_fn *fn)90{91q->rq_timed_out_fn = fn;92}93EXPORT_SYMBOL_GPL(blk_queue_rq_timed_out);9495void blk_queue_lld_busy(struct request_queue *q, lld_busy_fn *fn)96{97q->lld_busy_fn = fn;98}99EXPORT_SYMBOL_GPL(blk_queue_lld_busy);100101/**102* blk_set_default_limits - reset limits to default values103* @lim: the queue_limits structure to reset104*105* Description:106* Returns a queue_limit struct to its default state. Can be used by107* stacking drivers like DM that stage table swaps and reuse an108* existing device queue.109*/110void blk_set_default_limits(struct queue_limits *lim)111{112lim->max_segments = BLK_MAX_SEGMENTS;113lim->max_integrity_segments = 0;114lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK;115lim->max_segment_size = BLK_MAX_SEGMENT_SIZE;116lim->max_sectors = BLK_DEF_MAX_SECTORS;117lim->max_hw_sectors = INT_MAX;118lim->max_discard_sectors = 0;119lim->discard_granularity = 0;120lim->discard_alignment = 0;121lim->discard_misaligned = 0;122lim->discard_zeroes_data = 1;123lim->logical_block_size = lim->physical_block_size = lim->io_min = 512;124lim->bounce_pfn = (unsigned long)(BLK_BOUNCE_ANY >> PAGE_SHIFT);125lim->alignment_offset = 0;126lim->io_opt = 0;127lim->misaligned = 0;128lim->cluster = 1;129}130EXPORT_SYMBOL(blk_set_default_limits);131132/**133* blk_queue_make_request - define an alternate make_request function for a device134* @q: the request queue for the device to be affected135* @mfn: the alternate make_request function136*137* Description:138* The normal way for &struct bios to be passed to a device139* driver is for them to be collected into requests on a request140* queue, and then to allow the device driver to select requests141* off that queue when it is ready. This works well for many block142* devices. However some block devices (typically virtual devices143* such as md or lvm) do not benefit from the processing on the144* request queue, and are served best by having the requests passed145* directly to them. This can be achieved by providing a function146* to blk_queue_make_request().147*148* Caveat:149* The driver that does this *must* be able to deal appropriately150* with buffers in "highmemory". This can be accomplished by either calling151* __bio_kmap_atomic() to get a temporary kernel mapping, or by calling152* blk_queue_bounce() to create a buffer in normal memory.153**/154void blk_queue_make_request(struct request_queue *q, make_request_fn *mfn)155{156/*157* set defaults158*/159q->nr_requests = BLKDEV_MAX_RQ;160161q->make_request_fn = mfn;162blk_queue_dma_alignment(q, 511);163blk_queue_congestion_threshold(q);164q->nr_batching = BLK_BATCH_REQ;165166blk_set_default_limits(&q->limits);167blk_queue_max_hw_sectors(q, BLK_SAFE_MAX_SECTORS);168q->limits.discard_zeroes_data = 0;169170/*171* by default assume old behaviour and bounce for any highmem page172*/173blk_queue_bounce_limit(q, BLK_BOUNCE_HIGH);174}175EXPORT_SYMBOL(blk_queue_make_request);176177/**178* blk_queue_bounce_limit - set bounce buffer limit for queue179* @q: the request queue for the device180* @dma_mask: the maximum address the device can handle181*182* Description:183* Different hardware can have different requirements as to what pages184* it can do I/O directly to. A low level driver can call185* blk_queue_bounce_limit to have lower memory pages allocated as bounce186* buffers for doing I/O to pages residing above @dma_mask.187**/188void blk_queue_bounce_limit(struct request_queue *q, u64 dma_mask)189{190unsigned long b_pfn = dma_mask >> PAGE_SHIFT;191int dma = 0;192193q->bounce_gfp = GFP_NOIO;194#if BITS_PER_LONG == 64195/*196* Assume anything <= 4GB can be handled by IOMMU. Actually197* some IOMMUs can handle everything, but I don't know of a198* way to test this here.199*/200if (b_pfn < (min_t(u64, 0xffffffffUL, BLK_BOUNCE_HIGH) >> PAGE_SHIFT))201dma = 1;202q->limits.bounce_pfn = max(max_low_pfn, b_pfn);203#else204if (b_pfn < blk_max_low_pfn)205dma = 1;206q->limits.bounce_pfn = b_pfn;207#endif208if (dma) {209init_emergency_isa_pool();210q->bounce_gfp = GFP_NOIO | GFP_DMA;211q->limits.bounce_pfn = b_pfn;212}213}214EXPORT_SYMBOL(blk_queue_bounce_limit);215216/**217* blk_limits_max_hw_sectors - set hard and soft limit of max sectors for request218* @limits: the queue limits219* @max_hw_sectors: max hardware sectors in the usual 512b unit220*221* Description:222* Enables a low level driver to set a hard upper limit,223* max_hw_sectors, on the size of requests. max_hw_sectors is set by224* the device driver based upon the combined capabilities of I/O225* controller and storage device.226*227* max_sectors is a soft limit imposed by the block layer for228* filesystem type requests. This value can be overridden on a229* per-device basis in /sys/block/<device>/queue/max_sectors_kb.230* The soft limit can not exceed max_hw_sectors.231**/232void blk_limits_max_hw_sectors(struct queue_limits *limits, unsigned int max_hw_sectors)233{234if ((max_hw_sectors << 9) < PAGE_CACHE_SIZE) {235max_hw_sectors = 1 << (PAGE_CACHE_SHIFT - 9);236printk(KERN_INFO "%s: set to minimum %d\n",237__func__, max_hw_sectors);238}239240limits->max_hw_sectors = max_hw_sectors;241limits->max_sectors = min_t(unsigned int, max_hw_sectors,242BLK_DEF_MAX_SECTORS);243}244EXPORT_SYMBOL(blk_limits_max_hw_sectors);245246/**247* blk_queue_max_hw_sectors - set max sectors for a request for this queue248* @q: the request queue for the device249* @max_hw_sectors: max hardware sectors in the usual 512b unit250*251* Description:252* See description for blk_limits_max_hw_sectors().253**/254void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_sectors)255{256blk_limits_max_hw_sectors(&q->limits, max_hw_sectors);257}258EXPORT_SYMBOL(blk_queue_max_hw_sectors);259260/**261* blk_queue_max_discard_sectors - set max sectors for a single discard262* @q: the request queue for the device263* @max_discard_sectors: maximum number of sectors to discard264**/265void blk_queue_max_discard_sectors(struct request_queue *q,266unsigned int max_discard_sectors)267{268q->limits.max_discard_sectors = max_discard_sectors;269}270EXPORT_SYMBOL(blk_queue_max_discard_sectors);271272/**273* blk_queue_max_segments - set max hw segments for a request for this queue274* @q: the request queue for the device275* @max_segments: max number of segments276*277* Description:278* Enables a low level driver to set an upper limit on the number of279* hw data segments in a request.280**/281void blk_queue_max_segments(struct request_queue *q, unsigned short max_segments)282{283if (!max_segments) {284max_segments = 1;285printk(KERN_INFO "%s: set to minimum %d\n",286__func__, max_segments);287}288289q->limits.max_segments = max_segments;290}291EXPORT_SYMBOL(blk_queue_max_segments);292293/**294* blk_queue_max_segment_size - set max segment size for blk_rq_map_sg295* @q: the request queue for the device296* @max_size: max size of segment in bytes297*298* Description:299* Enables a low level driver to set an upper limit on the size of a300* coalesced segment301**/302void blk_queue_max_segment_size(struct request_queue *q, unsigned int max_size)303{304if (max_size < PAGE_CACHE_SIZE) {305max_size = PAGE_CACHE_SIZE;306printk(KERN_INFO "%s: set to minimum %d\n",307__func__, max_size);308}309310q->limits.max_segment_size = max_size;311}312EXPORT_SYMBOL(blk_queue_max_segment_size);313314/**315* blk_queue_logical_block_size - set logical block size for the queue316* @q: the request queue for the device317* @size: the logical block size, in bytes318*319* Description:320* This should be set to the lowest possible block size that the321* storage device can address. The default of 512 covers most322* hardware.323**/324void blk_queue_logical_block_size(struct request_queue *q, unsigned short size)325{326q->limits.logical_block_size = size;327328if (q->limits.physical_block_size < size)329q->limits.physical_block_size = size;330331if (q->limits.io_min < q->limits.physical_block_size)332q->limits.io_min = q->limits.physical_block_size;333}334EXPORT_SYMBOL(blk_queue_logical_block_size);335336/**337* blk_queue_physical_block_size - set physical block size for the queue338* @q: the request queue for the device339* @size: the physical block size, in bytes340*341* Description:342* This should be set to the lowest possible sector size that the343* hardware can operate on without reverting to read-modify-write344* operations.345*/346void blk_queue_physical_block_size(struct request_queue *q, unsigned int size)347{348q->limits.physical_block_size = size;349350if (q->limits.physical_block_size < q->limits.logical_block_size)351q->limits.physical_block_size = q->limits.logical_block_size;352353if (q->limits.io_min < q->limits.physical_block_size)354q->limits.io_min = q->limits.physical_block_size;355}356EXPORT_SYMBOL(blk_queue_physical_block_size);357358/**359* blk_queue_alignment_offset - set physical block alignment offset360* @q: the request queue for the device361* @offset: alignment offset in bytes362*363* Description:364* Some devices are naturally misaligned to compensate for things like365* the legacy DOS partition table 63-sector offset. Low-level drivers366* should call this function for devices whose first sector is not367* naturally aligned.368*/369void blk_queue_alignment_offset(struct request_queue *q, unsigned int offset)370{371q->limits.alignment_offset =372offset & (q->limits.physical_block_size - 1);373q->limits.misaligned = 0;374}375EXPORT_SYMBOL(blk_queue_alignment_offset);376377/**378* blk_limits_io_min - set minimum request size for a device379* @limits: the queue limits380* @min: smallest I/O size in bytes381*382* Description:383* Some devices have an internal block size bigger than the reported384* hardware sector size. This function can be used to signal the385* smallest I/O the device can perform without incurring a performance386* penalty.387*/388void blk_limits_io_min(struct queue_limits *limits, unsigned int min)389{390limits->io_min = min;391392if (limits->io_min < limits->logical_block_size)393limits->io_min = limits->logical_block_size;394395if (limits->io_min < limits->physical_block_size)396limits->io_min = limits->physical_block_size;397}398EXPORT_SYMBOL(blk_limits_io_min);399400/**401* blk_queue_io_min - set minimum request size for the queue402* @q: the request queue for the device403* @min: smallest I/O size in bytes404*405* Description:406* Storage devices may report a granularity or preferred minimum I/O407* size which is the smallest request the device can perform without408* incurring a performance penalty. For disk drives this is often the409* physical block size. For RAID arrays it is often the stripe chunk410* size. A properly aligned multiple of minimum_io_size is the411* preferred request size for workloads where a high number of I/O412* operations is desired.413*/414void blk_queue_io_min(struct request_queue *q, unsigned int min)415{416blk_limits_io_min(&q->limits, min);417}418EXPORT_SYMBOL(blk_queue_io_min);419420/**421* blk_limits_io_opt - set optimal request size for a device422* @limits: the queue limits423* @opt: smallest I/O size in bytes424*425* Description:426* Storage devices may report an optimal I/O size, which is the427* device's preferred unit for sustained I/O. This is rarely reported428* for disk drives. For RAID arrays it is usually the stripe width or429* the internal track size. A properly aligned multiple of430* optimal_io_size is the preferred request size for workloads where431* sustained throughput is desired.432*/433void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt)434{435limits->io_opt = opt;436}437EXPORT_SYMBOL(blk_limits_io_opt);438439/**440* blk_queue_io_opt - set optimal request size for the queue441* @q: the request queue for the device442* @opt: optimal request size in bytes443*444* Description:445* Storage devices may report an optimal I/O size, which is the446* device's preferred unit for sustained I/O. This is rarely reported447* for disk drives. For RAID arrays it is usually the stripe width or448* the internal track size. A properly aligned multiple of449* optimal_io_size is the preferred request size for workloads where450* sustained throughput is desired.451*/452void blk_queue_io_opt(struct request_queue *q, unsigned int opt)453{454blk_limits_io_opt(&q->limits, opt);455}456EXPORT_SYMBOL(blk_queue_io_opt);457458/**459* blk_queue_stack_limits - inherit underlying queue limits for stacked drivers460* @t: the stacking driver (top)461* @b: the underlying device (bottom)462**/463void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b)464{465blk_stack_limits(&t->limits, &b->limits, 0);466}467EXPORT_SYMBOL(blk_queue_stack_limits);468469/**470* blk_stack_limits - adjust queue_limits for stacked devices471* @t: the stacking driver limits (top device)472* @b: the underlying queue limits (bottom, component device)473* @start: first data sector within component device474*475* Description:476* This function is used by stacking drivers like MD and DM to ensure477* that all component devices have compatible block sizes and478* alignments. The stacking driver must provide a queue_limits479* struct (top) and then iteratively call the stacking function for480* all component (bottom) devices. The stacking function will481* attempt to combine the values and ensure proper alignment.482*483* Returns 0 if the top and bottom queue_limits are compatible. The484* top device's block sizes and alignment offsets may be adjusted to485* ensure alignment with the bottom device. If no compatible sizes486* and alignments exist, -1 is returned and the resulting top487* queue_limits will have the misaligned flag set to indicate that488* the alignment_offset is undefined.489*/490int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,491sector_t start)492{493unsigned int top, bottom, alignment, ret = 0;494495t->max_sectors = min_not_zero(t->max_sectors, b->max_sectors);496t->max_hw_sectors = min_not_zero(t->max_hw_sectors, b->max_hw_sectors);497t->bounce_pfn = min_not_zero(t->bounce_pfn, b->bounce_pfn);498499t->seg_boundary_mask = min_not_zero(t->seg_boundary_mask,500b->seg_boundary_mask);501502t->max_segments = min_not_zero(t->max_segments, b->max_segments);503t->max_integrity_segments = min_not_zero(t->max_integrity_segments,504b->max_integrity_segments);505506t->max_segment_size = min_not_zero(t->max_segment_size,507b->max_segment_size);508509t->misaligned |= b->misaligned;510511alignment = queue_limit_alignment_offset(b, start);512513/* Bottom device has different alignment. Check that it is514* compatible with the current top alignment.515*/516if (t->alignment_offset != alignment) {517518top = max(t->physical_block_size, t->io_min)519+ t->alignment_offset;520bottom = max(b->physical_block_size, b->io_min) + alignment;521522/* Verify that top and bottom intervals line up */523if (max(top, bottom) & (min(top, bottom) - 1)) {524t->misaligned = 1;525ret = -1;526}527}528529t->logical_block_size = max(t->logical_block_size,530b->logical_block_size);531532t->physical_block_size = max(t->physical_block_size,533b->physical_block_size);534535t->io_min = max(t->io_min, b->io_min);536t->io_opt = lcm(t->io_opt, b->io_opt);537538t->cluster &= b->cluster;539t->discard_zeroes_data &= b->discard_zeroes_data;540541/* Physical block size a multiple of the logical block size? */542if (t->physical_block_size & (t->logical_block_size - 1)) {543t->physical_block_size = t->logical_block_size;544t->misaligned = 1;545ret = -1;546}547548/* Minimum I/O a multiple of the physical block size? */549if (t->io_min & (t->physical_block_size - 1)) {550t->io_min = t->physical_block_size;551t->misaligned = 1;552ret = -1;553}554555/* Optimal I/O a multiple of the physical block size? */556if (t->io_opt & (t->physical_block_size - 1)) {557t->io_opt = 0;558t->misaligned = 1;559ret = -1;560}561562/* Find lowest common alignment_offset */563t->alignment_offset = lcm(t->alignment_offset, alignment)564& (max(t->physical_block_size, t->io_min) - 1);565566/* Verify that new alignment_offset is on a logical block boundary */567if (t->alignment_offset & (t->logical_block_size - 1)) {568t->misaligned = 1;569ret = -1;570}571572/* Discard alignment and granularity */573if (b->discard_granularity) {574alignment = queue_limit_discard_alignment(b, start);575576if (t->discard_granularity != 0 &&577t->discard_alignment != alignment) {578top = t->discard_granularity + t->discard_alignment;579bottom = b->discard_granularity + alignment;580581/* Verify that top and bottom intervals line up */582if (max(top, bottom) & (min(top, bottom) - 1))583t->discard_misaligned = 1;584}585586t->max_discard_sectors = min_not_zero(t->max_discard_sectors,587b->max_discard_sectors);588t->discard_granularity = max(t->discard_granularity,589b->discard_granularity);590t->discard_alignment = lcm(t->discard_alignment, alignment) &591(t->discard_granularity - 1);592}593594return ret;595}596EXPORT_SYMBOL(blk_stack_limits);597598/**599* bdev_stack_limits - adjust queue limits for stacked drivers600* @t: the stacking driver limits (top device)601* @bdev: the component block_device (bottom)602* @start: first data sector within component device603*604* Description:605* Merges queue limits for a top device and a block_device. Returns606* 0 if alignment didn't change. Returns -1 if adding the bottom607* device caused misalignment.608*/609int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev,610sector_t start)611{612struct request_queue *bq = bdev_get_queue(bdev);613614start += get_start_sect(bdev);615616return blk_stack_limits(t, &bq->limits, start);617}618EXPORT_SYMBOL(bdev_stack_limits);619620/**621* disk_stack_limits - adjust queue limits for stacked drivers622* @disk: MD/DM gendisk (top)623* @bdev: the underlying block device (bottom)624* @offset: offset to beginning of data within component device625*626* Description:627* Merges the limits for a top level gendisk and a bottom level628* block_device.629*/630void disk_stack_limits(struct gendisk *disk, struct block_device *bdev,631sector_t offset)632{633struct request_queue *t = disk->queue;634635if (bdev_stack_limits(&t->limits, bdev, offset >> 9) < 0) {636char top[BDEVNAME_SIZE], bottom[BDEVNAME_SIZE];637638disk_name(disk, 0, top);639bdevname(bdev, bottom);640641printk(KERN_NOTICE "%s: Warning: Device %s is misaligned\n",642top, bottom);643}644}645EXPORT_SYMBOL(disk_stack_limits);646647/**648* blk_queue_dma_pad - set pad mask649* @q: the request queue for the device650* @mask: pad mask651*652* Set dma pad mask.653*654* Appending pad buffer to a request modifies the last entry of a655* scatter list such that it includes the pad buffer.656**/657void blk_queue_dma_pad(struct request_queue *q, unsigned int mask)658{659q->dma_pad_mask = mask;660}661EXPORT_SYMBOL(blk_queue_dma_pad);662663/**664* blk_queue_update_dma_pad - update pad mask665* @q: the request queue for the device666* @mask: pad mask667*668* Update dma pad mask.669*670* Appending pad buffer to a request modifies the last entry of a671* scatter list such that it includes the pad buffer.672**/673void blk_queue_update_dma_pad(struct request_queue *q, unsigned int mask)674{675if (mask > q->dma_pad_mask)676q->dma_pad_mask = mask;677}678EXPORT_SYMBOL(blk_queue_update_dma_pad);679680/**681* blk_queue_dma_drain - Set up a drain buffer for excess dma.682* @q: the request queue for the device683* @dma_drain_needed: fn which returns non-zero if drain is necessary684* @buf: physically contiguous buffer685* @size: size of the buffer in bytes686*687* Some devices have excess DMA problems and can't simply discard (or688* zero fill) the unwanted piece of the transfer. They have to have a689* real area of memory to transfer it into. The use case for this is690* ATAPI devices in DMA mode. If the packet command causes a transfer691* bigger than the transfer size some HBAs will lock up if there692* aren't DMA elements to contain the excess transfer. What this API693* does is adjust the queue so that the buf is always appended694* silently to the scatterlist.695*696* Note: This routine adjusts max_hw_segments to make room for appending697* the drain buffer. If you call blk_queue_max_segments() after calling698* this routine, you must set the limit to one fewer than your device699* can support otherwise there won't be room for the drain buffer.700*/701int blk_queue_dma_drain(struct request_queue *q,702dma_drain_needed_fn *dma_drain_needed,703void *buf, unsigned int size)704{705if (queue_max_segments(q) < 2)706return -EINVAL;707/* make room for appending the drain */708blk_queue_max_segments(q, queue_max_segments(q) - 1);709q->dma_drain_needed = dma_drain_needed;710q->dma_drain_buffer = buf;711q->dma_drain_size = size;712713return 0;714}715EXPORT_SYMBOL_GPL(blk_queue_dma_drain);716717/**718* blk_queue_segment_boundary - set boundary rules for segment merging719* @q: the request queue for the device720* @mask: the memory boundary mask721**/722void blk_queue_segment_boundary(struct request_queue *q, unsigned long mask)723{724if (mask < PAGE_CACHE_SIZE - 1) {725mask = PAGE_CACHE_SIZE - 1;726printk(KERN_INFO "%s: set to minimum %lx\n",727__func__, mask);728}729730q->limits.seg_boundary_mask = mask;731}732EXPORT_SYMBOL(blk_queue_segment_boundary);733734/**735* blk_queue_dma_alignment - set dma length and memory alignment736* @q: the request queue for the device737* @mask: alignment mask738*739* description:740* set required memory and length alignment for direct dma transactions.741* this is used when building direct io requests for the queue.742*743**/744void blk_queue_dma_alignment(struct request_queue *q, int mask)745{746q->dma_alignment = mask;747}748EXPORT_SYMBOL(blk_queue_dma_alignment);749750/**751* blk_queue_update_dma_alignment - update dma length and memory alignment752* @q: the request queue for the device753* @mask: alignment mask754*755* description:756* update required memory and length alignment for direct dma transactions.757* If the requested alignment is larger than the current alignment, then758* the current queue alignment is updated to the new value, otherwise it759* is left alone. The design of this is to allow multiple objects760* (driver, device, transport etc) to set their respective761* alignments without having them interfere.762*763**/764void blk_queue_update_dma_alignment(struct request_queue *q, int mask)765{766BUG_ON(mask > PAGE_SIZE);767768if (mask > q->dma_alignment)769q->dma_alignment = mask;770}771EXPORT_SYMBOL(blk_queue_update_dma_alignment);772773/**774* blk_queue_flush - configure queue's cache flush capability775* @q: the request queue for the device776* @flush: 0, REQ_FLUSH or REQ_FLUSH | REQ_FUA777*778* Tell block layer cache flush capability of @q. If it supports779* flushing, REQ_FLUSH should be set. If it supports bypassing780* write cache for individual writes, REQ_FUA should be set.781*/782void blk_queue_flush(struct request_queue *q, unsigned int flush)783{784WARN_ON_ONCE(flush & ~(REQ_FLUSH | REQ_FUA));785786if (WARN_ON_ONCE(!(flush & REQ_FLUSH) && (flush & REQ_FUA)))787flush &= ~REQ_FUA;788789q->flush_flags = flush & (REQ_FLUSH | REQ_FUA);790}791EXPORT_SYMBOL_GPL(blk_queue_flush);792793void blk_queue_flush_queueable(struct request_queue *q, bool queueable)794{795q->flush_not_queueable = !queueable;796}797EXPORT_SYMBOL_GPL(blk_queue_flush_queueable);798799static int __init blk_settings_init(void)800{801blk_max_low_pfn = max_low_pfn - 1;802blk_max_pfn = max_pfn - 1;803return 0;804}805subsys_initcall(blk_settings_init);806807808