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