xref: /freebsd-src/sys/contrib/openzfs/config/kernel-blk-queue.m4 (revision 7a7741af18d6c8a804cc643cb7ecda9d730c6aa6)
1eda14cbcSMatt Macydnl #
2eda14cbcSMatt Macydnl # 2.6.39 API change,
3eda14cbcSMatt Macydnl # blk_start_plug() and blk_finish_plug()
4eda14cbcSMatt Macydnl #
5eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_PLUG], [
6eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blk_plug], [
7eda14cbcSMatt Macy		#include <linux/blkdev.h>
8eda14cbcSMatt Macy	],[
9eda14cbcSMatt Macy		struct blk_plug plug __attribute__ ((unused));
10eda14cbcSMatt Macy
11eda14cbcSMatt Macy		blk_start_plug(&plug);
12eda14cbcSMatt Macy		blk_finish_plug(&plug);
13eda14cbcSMatt Macy	])
14eda14cbcSMatt Macy])
15eda14cbcSMatt Macy
16eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_PLUG], [
17eda14cbcSMatt Macy	AC_MSG_CHECKING([whether struct blk_plug is available])
18eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([blk_plug], [
19eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
20eda14cbcSMatt Macy	],[
21eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([blk_plug])
22eda14cbcSMatt Macy	])
23eda14cbcSMatt Macy])
24eda14cbcSMatt Macy
25eda14cbcSMatt Macydnl #
2616038816SMartin Matuskadnl # 2.6.32 - 4.11: statically allocated bdi in request_queue
2716038816SMartin Matuskadnl # 4.12: dynamically allocated bdi in request_queue
2829dc9349SMartin Matuskadnl # 6.11: bdi no longer available through request_queue, so get it from
2929dc9349SMartin Matuskadnl #       the gendisk attached to the queue
30eda14cbcSMatt Macydnl #
31eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_BDI], [
32eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blk_queue_bdi], [
33eda14cbcSMatt Macy		#include <linux/blkdev.h>
34eda14cbcSMatt Macy	],[
35eda14cbcSMatt Macy		struct request_queue q;
36eda14cbcSMatt Macy		struct backing_dev_info bdi;
37eda14cbcSMatt Macy		q.backing_dev_info = &bdi;
38eda14cbcSMatt Macy	])
39eda14cbcSMatt Macy])
40eda14cbcSMatt Macy
41eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_BDI], [
42eda14cbcSMatt Macy	AC_MSG_CHECKING([whether blk_queue bdi is dynamic])
43eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([blk_queue_bdi], [
44eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
45eda14cbcSMatt Macy		AC_DEFINE(HAVE_BLK_QUEUE_BDI_DYNAMIC, 1,
46eda14cbcSMatt Macy		    [blk queue backing_dev_info is dynamic])
47eda14cbcSMatt Macy	],[
48eda14cbcSMatt Macy		AC_MSG_RESULT(no)
49eda14cbcSMatt Macy	])
50eda14cbcSMatt Macy])
51eda14cbcSMatt Macy
5229dc9349SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISK_BDI], [
5329dc9349SMartin Matuska	ZFS_LINUX_TEST_SRC([blk_queue_disk_bdi], [
5429dc9349SMartin Matuska		#include <linux/blkdev.h>
5529dc9349SMartin Matuska		#include <linux/backing-dev.h>
5629dc9349SMartin Matuska	], [
5729dc9349SMartin Matuska		struct request_queue q;
5829dc9349SMartin Matuska		struct gendisk disk;
5929dc9349SMartin Matuska		struct backing_dev_info bdi __attribute__ ((unused));
6029dc9349SMartin Matuska		q.disk = &disk;
6129dc9349SMartin Matuska		q.disk->bdi = &bdi;
6229dc9349SMartin Matuska	])
6329dc9349SMartin Matuska])
6429dc9349SMartin Matuska
6529dc9349SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_DISK_BDI], [
6629dc9349SMartin Matuska	AC_MSG_CHECKING([whether backing_dev_info is available through queue gendisk])
6729dc9349SMartin Matuska	ZFS_LINUX_TEST_RESULT([blk_queue_disk_bdi], [
6829dc9349SMartin Matuska		AC_MSG_RESULT(yes)
6929dc9349SMartin Matuska		AC_DEFINE(HAVE_BLK_QUEUE_DISK_BDI, 1,
7029dc9349SMartin Matuska		    [backing_dev_info is available through queue gendisk])
7129dc9349SMartin Matuska	],[
7229dc9349SMartin Matuska		AC_MSG_RESULT(no)
7329dc9349SMartin Matuska	])
7429dc9349SMartin Matuska])
7529dc9349SMartin Matuska
76eda14cbcSMatt Macydnl #
7753b70c86SMartin Matuskadnl # 5.9: added blk_queue_update_readahead(),
7853b70c86SMartin Matuskadnl # 5.15: renamed to disk_update_readahead()
7953b70c86SMartin Matuskadnl #
8053b70c86SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_UPDATE_READAHEAD], [
8153b70c86SMartin Matuska	ZFS_LINUX_TEST_SRC([blk_queue_update_readahead], [
8253b70c86SMartin Matuska		#include <linux/blkdev.h>
8353b70c86SMartin Matuska	],[
8453b70c86SMartin Matuska		struct request_queue q;
8553b70c86SMartin Matuska		blk_queue_update_readahead(&q);
8653b70c86SMartin Matuska	])
8753b70c86SMartin Matuska
8853b70c86SMartin Matuska	ZFS_LINUX_TEST_SRC([disk_update_readahead], [
8953b70c86SMartin Matuska		#include <linux/blkdev.h>
9053b70c86SMartin Matuska	],[
9153b70c86SMartin Matuska		struct gendisk disk;
9253b70c86SMartin Matuska		disk_update_readahead(&disk);
9353b70c86SMartin Matuska	])
9453b70c86SMartin Matuska])
9553b70c86SMartin Matuska
9653b70c86SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD], [
9753b70c86SMartin Matuska	AC_MSG_CHECKING([whether blk_queue_update_readahead() exists])
9853b70c86SMartin Matuska	ZFS_LINUX_TEST_RESULT([blk_queue_update_readahead], [
9953b70c86SMartin Matuska		AC_MSG_RESULT(yes)
10053b70c86SMartin Matuska		AC_DEFINE(HAVE_BLK_QUEUE_UPDATE_READAHEAD, 1,
10153b70c86SMartin Matuska		    [blk_queue_update_readahead() exists])
10253b70c86SMartin Matuska	],[
103e3aa18adSMartin Matuska		AC_MSG_RESULT(no)
104e3aa18adSMartin Matuska
10553b70c86SMartin Matuska		AC_MSG_CHECKING([whether disk_update_readahead() exists])
10653b70c86SMartin Matuska		ZFS_LINUX_TEST_RESULT([disk_update_readahead], [
10753b70c86SMartin Matuska			AC_MSG_RESULT(yes)
10853b70c86SMartin Matuska			AC_DEFINE(HAVE_DISK_UPDATE_READAHEAD, 1,
10953b70c86SMartin Matuska			    [disk_update_readahead() exists])
11053b70c86SMartin Matuska		],[
11153b70c86SMartin Matuska			AC_MSG_RESULT(no)
11253b70c86SMartin Matuska		])
11353b70c86SMartin Matuska	])
11453b70c86SMartin Matuska])
11553b70c86SMartin Matuska
11653b70c86SMartin Matuskadnl #
117e3aa18adSMartin Matuskadnl # 5.19: bdev_max_discard_sectors() available
118e3aa18adSMartin Matuskadnl # 2.6.32: blk_queue_discard() available
119eda14cbcSMatt Macydnl #
120eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD], [
121e3aa18adSMartin Matuska	ZFS_LINUX_TEST_SRC([bdev_max_discard_sectors], [
122e3aa18adSMartin Matuska		#include <linux/blkdev.h>
123e3aa18adSMartin Matuska	],[
124e3aa18adSMartin Matuska		struct block_device *bdev __attribute__ ((unused)) = NULL;
125e3aa18adSMartin Matuska		unsigned int error __attribute__ ((unused));
126e3aa18adSMartin Matuska
127e3aa18adSMartin Matuska		error = bdev_max_discard_sectors(bdev);
128e3aa18adSMartin Matuska	])
129e3aa18adSMartin Matuska
130eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blk_queue_discard], [
131eda14cbcSMatt Macy		#include <linux/blkdev.h>
132eda14cbcSMatt Macy	],[
133716fd348SMartin Matuska		struct request_queue r;
134716fd348SMartin Matuska		struct request_queue *q = &r;
135eda14cbcSMatt Macy		int value __attribute__ ((unused));
136716fd348SMartin Matuska		memset(q, 0, sizeof(r));
137eda14cbcSMatt Macy		value = blk_queue_discard(q);
1382a58b312SMartin Matuska	],[-Wframe-larger-than=8192])
139eda14cbcSMatt Macy])
140eda14cbcSMatt Macy
141eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_DISCARD], [
142e3aa18adSMartin Matuska	AC_MSG_CHECKING([whether bdev_max_discard_sectors() is available])
143e3aa18adSMartin Matuska	ZFS_LINUX_TEST_RESULT([bdev_max_discard_sectors], [
144e3aa18adSMartin Matuska		AC_MSG_RESULT(yes)
145e3aa18adSMartin Matuska		AC_DEFINE(HAVE_BDEV_MAX_DISCARD_SECTORS, 1,
146e3aa18adSMartin Matuska		    [bdev_max_discard_sectors() is available])
147e3aa18adSMartin Matuska	],[
148e3aa18adSMartin Matuska		AC_MSG_RESULT(no)
149e3aa18adSMartin Matuska
150eda14cbcSMatt Macy		AC_MSG_CHECKING([whether blk_queue_discard() is available])
151eda14cbcSMatt Macy		ZFS_LINUX_TEST_RESULT([blk_queue_discard], [
152eda14cbcSMatt Macy			AC_MSG_RESULT(yes)
153e3aa18adSMartin Matuska			AC_DEFINE(HAVE_BLK_QUEUE_DISCARD, 1,
154e3aa18adSMartin Matuska			    [blk_queue_discard() is available])
155eda14cbcSMatt Macy		],[
156eda14cbcSMatt Macy			ZFS_LINUX_TEST_ERROR([blk_queue_discard])
157eda14cbcSMatt Macy		])
158eda14cbcSMatt Macy	])
159e3aa18adSMartin Matuska])
160eda14cbcSMatt Macy
161eda14cbcSMatt Macydnl #
162e3aa18adSMartin Matuskadnl # 5.19: bdev_max_secure_erase_sectors() available
163e3aa18adSMartin Matuskadnl # 4.8: blk_queue_secure_erase() available
164eda14cbcSMatt Macydnl #
165eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE], [
166e3aa18adSMartin Matuska	ZFS_LINUX_TEST_SRC([bdev_max_secure_erase_sectors], [
167e3aa18adSMartin Matuska		#include <linux/blkdev.h>
168e3aa18adSMartin Matuska	],[
169e3aa18adSMartin Matuska		struct block_device *bdev __attribute__ ((unused)) = NULL;
170e3aa18adSMartin Matuska		unsigned int error __attribute__ ((unused));
171e3aa18adSMartin Matuska
172e3aa18adSMartin Matuska		error = bdev_max_secure_erase_sectors(bdev);
173e3aa18adSMartin Matuska	])
174e3aa18adSMartin Matuska
175eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blk_queue_secure_erase], [
176eda14cbcSMatt Macy		#include <linux/blkdev.h>
177eda14cbcSMatt Macy	],[
178716fd348SMartin Matuska		struct request_queue r;
179716fd348SMartin Matuska		struct request_queue *q = &r;
180eda14cbcSMatt Macy		int value __attribute__ ((unused));
181716fd348SMartin Matuska		memset(q, 0, sizeof(r));
182eda14cbcSMatt Macy		value = blk_queue_secure_erase(q);
1832a58b312SMartin Matuska	],[-Wframe-larger-than=8192])
184eda14cbcSMatt Macy])
185eda14cbcSMatt Macy
186eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE], [
187e3aa18adSMartin Matuska	AC_MSG_CHECKING([whether bdev_max_secure_erase_sectors() is available])
188e3aa18adSMartin Matuska	ZFS_LINUX_TEST_RESULT([bdev_max_secure_erase_sectors], [
189e3aa18adSMartin Matuska		AC_MSG_RESULT(yes)
190e3aa18adSMartin Matuska		AC_DEFINE(HAVE_BDEV_MAX_SECURE_ERASE_SECTORS, 1,
191e3aa18adSMartin Matuska		    [bdev_max_secure_erase_sectors() is available])
192e3aa18adSMartin Matuska	],[
193e3aa18adSMartin Matuska		AC_MSG_RESULT(no)
194e3aa18adSMartin Matuska
195eda14cbcSMatt Macy		AC_MSG_CHECKING([whether blk_queue_secure_erase() is available])
196eda14cbcSMatt Macy		ZFS_LINUX_TEST_RESULT([blk_queue_secure_erase], [
197eda14cbcSMatt Macy			AC_MSG_RESULT(yes)
198eda14cbcSMatt Macy			AC_DEFINE(HAVE_BLK_QUEUE_SECURE_ERASE, 1,
199eda14cbcSMatt Macy			    [blk_queue_secure_erase() is available])
200eda14cbcSMatt Macy		],[
201eda14cbcSMatt Macy			ZFS_LINUX_TEST_ERROR([blk_queue_secure_erase])
202eda14cbcSMatt Macy		])
203eda14cbcSMatt Macy	])
204eda14cbcSMatt Macy])
205eda14cbcSMatt Macy
206eda14cbcSMatt Macydnl #
207eda14cbcSMatt Macydnl # 2.6.34 API change
208eda14cbcSMatt Macydnl # blk_queue_max_hw_sectors() replaces blk_queue_max_sectors().
209eda14cbcSMatt Macydnl #
210eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_HW_SECTORS], [
211eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blk_queue_max_hw_sectors], [
212eda14cbcSMatt Macy		#include <linux/blkdev.h>
213eda14cbcSMatt Macy	], [
214c03c5b1cSMartin Matuska		struct request_queue *q __attribute__ ((unused)) = NULL;
215eda14cbcSMatt Macy		(void) blk_queue_max_hw_sectors(q, BLK_SAFE_MAX_SECTORS);
216c03c5b1cSMartin Matuska	], [])
217eda14cbcSMatt Macy])
218eda14cbcSMatt Macy
219eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_MAX_HW_SECTORS], [
220eda14cbcSMatt Macy	AC_MSG_CHECKING([whether blk_queue_max_hw_sectors() is available])
221eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([blk_queue_max_hw_sectors], [
222eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
223eda14cbcSMatt Macy	],[
22475e1fea6SMartin Matuska		AC_MSG_RESULT(no)
225eda14cbcSMatt Macy	])
226eda14cbcSMatt Macy])
227eda14cbcSMatt Macy
228eda14cbcSMatt Macydnl #
229eda14cbcSMatt Macydnl # 2.6.34 API change
230eda14cbcSMatt Macydnl # blk_queue_max_segments() consolidates blk_queue_max_hw_segments()
231eda14cbcSMatt Macydnl # and blk_queue_max_phys_segments().
232eda14cbcSMatt Macydnl #
233eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_SEGMENTS], [
234eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blk_queue_max_segments], [
235eda14cbcSMatt Macy		#include <linux/blkdev.h>
236eda14cbcSMatt Macy	], [
237c03c5b1cSMartin Matuska		struct request_queue *q __attribute__ ((unused)) = NULL;
238eda14cbcSMatt Macy		(void) blk_queue_max_segments(q, BLK_MAX_SEGMENTS);
239c03c5b1cSMartin Matuska	], [])
240eda14cbcSMatt Macy])
241eda14cbcSMatt Macy
242eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS], [
243eda14cbcSMatt Macy	AC_MSG_CHECKING([whether blk_queue_max_segments() is available])
244eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([blk_queue_max_segments], [
245eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
246eda14cbcSMatt Macy	], [
24775e1fea6SMartin Matuska		AC_MSG_RESULT(no)
248eda14cbcSMatt Macy	])
249eda14cbcSMatt Macy])
250eda14cbcSMatt Macy
251*7a7741afSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_MQ_RQ_HCTX], [
2521719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blk_mq_rq_hctx], [
2531719886fSMartin Matuska		#include <linux/blk-mq.h>
2541719886fSMartin Matuska		#include <linux/blkdev.h>
2551719886fSMartin Matuska	], [
2561719886fSMartin Matuska		struct request rq = {0};
2571719886fSMartin Matuska		struct blk_mq_hw_ctx *hctx = NULL;
2581719886fSMartin Matuska		rq.mq_hctx = hctx;
2591719886fSMartin Matuska	], [])
2601f1e2261SMartin Matuska])
2611f1e2261SMartin Matuska
262*7a7741afSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLK_MQ_RQ_HCTX], [
2631719886fSMartin Matuska	AC_MSG_CHECKING([whether block multiqueue hardware context is cached in struct request])
2641719886fSMartin Matuska	ZFS_LINUX_TEST_RESULT([blk_mq_rq_hctx], [
2651719886fSMartin Matuska		AC_MSG_RESULT(yes)
2661719886fSMartin Matuska		AC_DEFINE(HAVE_BLK_MQ_RQ_HCTX, 1, [block multiqueue hardware context is cached in struct request])
2671719886fSMartin Matuska	], [
2681719886fSMartin Matuska		AC_MSG_RESULT(no)
2691719886fSMartin Matuska	])
2701f1e2261SMartin Matuska])
2711f1e2261SMartin Matuska
272eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE], [
273eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLK_QUEUE_PLUG
274eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLK_QUEUE_BDI
27529dc9349SMartin Matuska	ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISK_BDI
27653b70c86SMartin Matuska	ZFS_AC_KERNEL_SRC_BLK_QUEUE_UPDATE_READAHEAD
277eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD
278eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE
279eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_HW_SECTORS
280eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_SEGMENTS
281*7a7741afSMartin Matuska	ZFS_AC_KERNEL_SRC_BLK_MQ_RQ_HCTX
282eda14cbcSMatt Macy])
283eda14cbcSMatt Macy
284eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE], [
285eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLK_QUEUE_PLUG
286eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLK_QUEUE_BDI
28729dc9349SMartin Matuska	ZFS_AC_KERNEL_BLK_QUEUE_DISK_BDI
28853b70c86SMartin Matuska	ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD
289eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLK_QUEUE_DISCARD
290eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE
291eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLK_QUEUE_MAX_HW_SECTORS
292eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS
293*7a7741afSMartin Matuska	ZFS_AC_KERNEL_BLK_MQ_RQ_HCTX
294eda14cbcSMatt Macy])
295