tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 98ac9a608dc79ba8a20cee77fe959a6dfccdaa63 commit: aa71987472a974f4f6dc4be377720564079ef42e nvme: fabrics drivers don't need the nvme-pci driver date: 3 weeks ago config: x86_64-randconfig-b0-09110627 (attached as .config) compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705 reproduce: git checkout aa71987472a974f4f6dc4be377720564079ef42e # save the attached .config to linux build tree make ARCH=x86_64
All errors (new ones prefixed by >>): In file included from drivers/nvme/host/core.c:16:0: >> include/linux/blk-mq.h:61:18: error: field 'kobj' has incomplete type struct kobject kobj; ^~~~ >> include/linux/blk-mq.h:128:2: error: unknown type name 'softirq_done_fn' softirq_done_fn *complete; ^~~~~~~~~~~~~~~ include/linux/blk-mq.h:181:33: warning: 'struct gendisk' declared inside parameter list will not be visible outside of this definition or declaration int blk_mq_register_disk(struct gendisk *); ^~~~~~~ include/linux/blk-mq.h:182:36: warning: 'struct gendisk' declared inside parameter list will not be visible outside of this definition or declaration void blk_mq_unregister_disk(struct gendisk *); ^~~~~~~ include/linux/blk-mq.h: In function 'blk_mq_rq_from_pdu': >> include/linux/blk-mq.h:260:22: error: invalid application of 'sizeof' to >> incomplete type 'struct request' return pdu - sizeof(struct request); ^~~~~~ include/linux/blk-mq.h: In function 'blk_mq_rq_to_pdu': >> include/linux/blk-mq.h:264:2: error: invalid use of undefined type 'struct >> request' return rq + 1; ^~~~~~ In file included from drivers/nvme/host/core.c:32:0: drivers/nvme/host/nvme.h: In function 'nvme_map_len': >> drivers/nvme/host/nvme.h:217:6: error: implicit declaration of function >> 'req_op' [-Werror=implicit-function-declaration] if (req_op(rq) == REQ_OP_DISCARD) ^~~~~~ >> drivers/nvme/host/nvme.h:220:10: error: implicit declaration of function >> 'blk_rq_bytes' [-Werror=implicit-function-declaration] return blk_rq_bytes(rq); ^~~~~~~~~~~~ drivers/nvme/host/nvme.h: In function 'nvme_cleanup_cmd': >> drivers/nvme/host/nvme.h:226:12: error: dereferencing pointer to incomplete >> type 'struct request' kfree(req->completion_data); ^~ drivers/nvme/host/nvme.h: In function 'nvme_req_needs_retry': >> drivers/nvme/host/nvme.h:243:35: error: implicit declaration of function >> 'blk_noretry_request' [-Werror=implicit-function-declaration] return !(status & NVME_SC_DNR || blk_noretry_request(req)) && ^~~~~~~~~~~~~~~~~~~ drivers/nvme/host/core.c: In function 'nvme_cancel_request': >> drivers/nvme/host/core.c:75:6: error: implicit declaration of function >> 'blk_queue_dying' [-Werror=implicit-function-declaration] if (blk_queue_dying(req->q)) ^~~~~~~~~~~~~~~ drivers/nvme/host/core.c: In function 'nvme_free_ns': >> drivers/nvme/host/core.c:157:42: error: dereferencing pointer to incomplete >> type 'struct gendisk' nvme_nvm_unregister(ns->queue, ns->disk->disk_name); ^~ >> drivers/nvme/host/core.c:163:2: error: implicit declaration of function >> 'put_disk' [-Werror=implicit-function-declaration] put_disk(ns->disk); ^~~~~~~~ drivers/nvme/host/core.c: In function 'nvme_requeue_req': >> drivers/nvme/host/core.c:203:7: error: implicit declaration of function >> 'blk_queue_stopped' [-Werror=implicit-function-declaration] if (!blk_queue_stopped(req->q)) ^~~~~~~~~~~~~~~~~ drivers/nvme/host/core.c: In function 'nvme_alloc_request': >> drivers/nvme/host/core.c:223:18: error: 'REQ_TYPE_DRV_PRIV' undeclared >> (first use in this function) req->cmd_type = REQ_TYPE_DRV_PRIV; ^~~~~~~~~~~~~~~~~ drivers/nvme/host/core.c:223:18: note: each undeclared identifier is reported only once for each function it appears in In file included from include/linux/byteorder/little_endian.h:4:0, from arch/x86/include/uapi/asm/byteorder.h:4, from include/asm-generic/bitops/le.h:5, from arch/x86/include/asm/bitops.h:504, from include/linux/bitops.h:36, from include/linux/kernel.h:10, from include/linux/sched.h:17, from include/linux/blkdev.h:4, from drivers/nvme/host/core.c:15: drivers/nvme/host/core.c: In function 'nvme_setup_discard': >> drivers/nvme/host/core.c:254:46: error: implicit declaration of function >> 'blk_rq_pos' [-Werror=implicit-function-declaration] range->slba = cpu_to_le64(nvme_block_nr(ns, blk_rq_pos(req))); ^ include/uapi/linux/byteorder/little_endian.h:30:51: note: in definition of macro '__cpu_to_le64' #define __cpu_to_le64(x) ((__force __le64)(__u64)(x)) ^ drivers/nvme/host/core.c:254:16: note: in expansion of macro 'cpu_to_le64' range->slba = cpu_to_le64(nvme_block_nr(ns, blk_rq_pos(req))); ^~~~~~~~~~~ >> drivers/nvme/host/core.c:265:2: error: implicit declaration of function >> 'blk_add_request_payload' [-Werror=implicit-function-declaration] blk_add_request_payload(req, page, offset, sizeof(*range)); ^~~~~~~~~~~~~~~~~~~~~~~ drivers/nvme/host/core.c: In function 'nvme_setup_rw': >> drivers/nvme/host/core.c:292:21: error: implicit declaration of function >> 'rq_data_dir' [-Werror=implicit-function-declaration] cmnd->rw.opcode = (rq_data_dir(req) ? nvme_cmd_write : nvme_cmd_read); ^~~~~~~~~~~ >> drivers/nvme/host/core.c:311:8: error: implicit declaration of function >> 'blk_integrity_rq' [-Werror=implicit-function-declaration] if (!blk_integrity_rq(req)) ^~~~~~~~~~~~~~~~ drivers/nvme/host/core.c: In function 'nvme_setup_cmd': drivers/nvme/host/core.c:324:23: error: 'REQ_TYPE_DRV_PRIV' undeclared (first use in this function) if (req->cmd_type == REQ_TYPE_DRV_PRIV) ^~~~~~~~~~~~~~~~~ drivers/nvme/host/core.c: In function '__nvme_submit_sync_cmd': >> drivers/nvme/host/core.c:356:9: error: implicit declaration of function >> 'blk_rq_map_kern' [-Werror=implicit-function-declaration] ret = blk_rq_map_kern(q, req, buffer, bufflen, GFP_KERNEL); ^~~~~~~~~~~~~~~ >> drivers/nvme/host/core.c:361:2: error: implicit declaration of function >> 'blk_execute_rq' [-Werror=implicit-function-declaration] blk_execute_rq(req->q, NULL, req, at_head); ^~~~~~~~~~~~~~ drivers/nvme/host/core.c: In function '__nvme_submit_user_cmd': >> drivers/nvme/host/core.c:384:24: error: dereferencing pointer to incomplete >> type 'struct request_queue' struct nvme_ns *ns = q->queuedata; ^~ -- In file included from drivers/nvme/host/nvme.h:20:0, from drivers/nvme/host/scsi.c:47: >> include/linux/blk-mq.h:128:2: error: unknown type name 'softirq_done_fn' softirq_done_fn *complete; ^~~~~~~~~~~~~~~ include/linux/blk-mq.h: In function 'blk_mq_rq_from_pdu': >> include/linux/blk-mq.h:260:22: error: invalid application of 'sizeof' to >> incomplete type 'struct request' return pdu - sizeof(struct request); ^~~~~~ include/linux/blk-mq.h: In function 'blk_mq_rq_to_pdu': >> include/linux/blk-mq.h:264:2: error: invalid use of undefined type 'struct >> request' return rq + 1; ^~~~~~ In file included from drivers/nvme/host/scsi.c:47:0: drivers/nvme/host/nvme.h: In function 'nvme_map_len': >> drivers/nvme/host/nvme.h:217:6: error: implicit declaration of function >> 'req_op' [-Werror=implicit-function-declaration] if (req_op(rq) == REQ_OP_DISCARD) ^~~~~~ >> drivers/nvme/host/nvme.h:220:10: error: implicit declaration of function >> 'blk_rq_bytes' [-Werror=implicit-function-declaration] return blk_rq_bytes(rq); ^~~~~~~~~~~~ drivers/nvme/host/nvme.h: In function 'nvme_cleanup_cmd': >> drivers/nvme/host/nvme.h:226:12: error: dereferencing pointer to incomplete >> type 'struct request' kfree(req->completion_data); ^~ drivers/nvme/host/nvme.h: In function 'nvme_req_needs_retry': >> drivers/nvme/host/nvme.h:243:35: error: implicit declaration of function >> 'blk_noretry_request' [-Werror=implicit-function-declaration] return !(status & NVME_SC_DNR || blk_noretry_request(req)) && ^~~~~~~~~~~~~~~~~~~ In file included from include/linux/swab.h:4:0, from include/uapi/linux/byteorder/little_endian.h:12, from include/linux/byteorder/little_endian.h:4, from arch/x86/include/uapi/asm/byteorder.h:4, from include/asm-generic/bitops/le.h:5, from arch/x86/include/asm/bitops.h:504, from include/linux/bitops.h:36, from include/linux/kernel.h:10, from include/linux/list.h:8, from include/linux/wait.h:6, from include/linux/fs.h:5, from include/linux/highmem.h:4, from include/linux/bio.h:23, from drivers/nvme/host/scsi.c:20: drivers/nvme/host/scsi.c: In function 'nvme_trans_bdev_limits_page': >> drivers/nvme/host/scsi.c:769:21: error: implicit declaration of function >> 'queue_max_hw_sectors' [-Werror=implicit-function-declaration] nvme_block_nr(ns, queue_max_hw_sectors(ns->queue))); ^ include/uapi/linux/swab.h:113:54: note: in definition of macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ include/linux/byteorder/generic.h:93:21: note: in expansion of macro '__cpu_to_be32' #define cpu_to_be32 __cpu_to_be32 ^~~~~~~~~~~~~ drivers/nvme/host/scsi.c:768:23: note: in expansion of macro 'cpu_to_be32' __be32 max_sectors = cpu_to_be32( ^~~~~~~~~~~ >> drivers/nvme/host/scsi.c:770:44: error: dereferencing pointer to incomplete >> type 'struct request_queue' __be32 max_discard = cpu_to_be32(ns->queue->limits.max_discard_sectors); ^ include/uapi/linux/swab.h:113:54: note: in definition of macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ include/linux/byteorder/generic.h:93:21: note: in expansion of macro '__cpu_to_be32' #define cpu_to_be32 __cpu_to_be32 ^~~~~~~~~~~~~ drivers/nvme/host/scsi.c:770:23: note: in expansion of macro 'cpu_to_be32' __be32 max_discard = cpu_to_be32(ns->queue->limits.max_discard_sectors); ^~~~~~~~~~~ drivers/nvme/host/scsi.c: In function 'nvme_trans_do_nvme_io': >> drivers/nvme/host/scsi.c:1724:7: error: implicit declaration of function >> 'get_capacity' [-Werror=implicit-function-declaration] if (get_capacity(ns->disk) - unit_num_blocks < ^~~~~~~~~~~~ drivers/nvme/host/scsi.c: In function 'nvme_scsi_translate': >> drivers/nvme/host/scsi.c:2449:9: error: 'BLK_MAX_CDB' undeclared (first use >> in this function) u8 cmd[BLK_MAX_CDB]; ^~~~~~~~~~~ drivers/nvme/host/scsi.c:2449:9: note: each undeclared identifier is reported only once for each function it appears in drivers/nvme/host/scsi.c:2449:5: warning: unused variable 'cmd' [-Wunused-variable] u8 cmd[BLK_MAX_CDB]; ^~~ drivers/nvme/host/scsi.c: In function 'nvme_sg_io': drivers/nvme/host/scsi.c:2556:20: error: 'BLK_MAX_CDB' undeclared (first use in this function) if (hdr.cmd_len > BLK_MAX_CDB) ^~~~~~~~~~~ cc1: some warnings being treated as errors -- In file included from drivers/nvme/host/nvme.h:20:0, from drivers/nvme/host/fabrics.c:21: >> include/linux/blk-mq.h:128:2: error: unknown type name 'softirq_done_fn' softirq_done_fn *complete; ^~~~~~~~~~~~~~~ include/linux/blk-mq.h: In function 'blk_mq_rq_from_pdu': >> include/linux/blk-mq.h:260:22: error: invalid application of 'sizeof' to >> incomplete type 'struct request' return pdu - sizeof(struct request); ^~~~~~ include/linux/blk-mq.h: In function 'blk_mq_rq_to_pdu': >> include/linux/blk-mq.h:264:2: error: invalid use of undefined type 'struct >> request' return rq + 1; ^~~~~~ In file included from drivers/nvme/host/fabrics.c:21:0: drivers/nvme/host/nvme.h: In function 'nvme_map_len': >> drivers/nvme/host/nvme.h:217:6: error: implicit declaration of function >> 'req_op' [-Werror=implicit-function-declaration] if (req_op(rq) == REQ_OP_DISCARD) ^~~~~~ >> drivers/nvme/host/nvme.h:220:10: error: implicit declaration of function >> 'blk_rq_bytes' [-Werror=implicit-function-declaration] return blk_rq_bytes(rq); ^~~~~~~~~~~~ drivers/nvme/host/nvme.h: In function 'nvme_cleanup_cmd': >> drivers/nvme/host/nvme.h:226:12: error: dereferencing pointer to incomplete >> type 'struct request' kfree(req->completion_data); ^~ drivers/nvme/host/nvme.h: In function 'nvme_req_needs_retry': >> drivers/nvme/host/nvme.h:243:35: error: implicit declaration of function >> 'blk_noretry_request' [-Werror=implicit-function-declaration] return !(status & NVME_SC_DNR || blk_noretry_request(req)) && ^~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors -- In file included from drivers/nvme/host/rdma.c:21:0: >> include/linux/blk-mq.h:128:2: error: unknown type name 'softirq_done_fn' softirq_done_fn *complete; ^~~~~~~~~~~~~~~ include/linux/blk-mq.h:181:33: warning: 'struct gendisk' declared inside parameter list will not be visible outside of this definition or declaration int blk_mq_register_disk(struct gendisk *); ^~~~~~~ include/linux/blk-mq.h:182:36: warning: 'struct gendisk' declared inside parameter list will not be visible outside of this definition or declaration void blk_mq_unregister_disk(struct gendisk *); ^~~~~~~ include/linux/blk-mq.h: In function 'blk_mq_rq_from_pdu': >> include/linux/blk-mq.h:260:22: error: invalid application of 'sizeof' to >> incomplete type 'struct request' return pdu - sizeof(struct request); ^~~~~~ include/linux/blk-mq.h: In function 'blk_mq_rq_to_pdu': >> include/linux/blk-mq.h:264:2: error: invalid use of undefined type 'struct >> request' return rq + 1; ^~~~~~ In file included from drivers/nvme/host/rdma.c:34:0: drivers/nvme/host/nvme.h: In function 'nvme_map_len': >> drivers/nvme/host/nvme.h:217:6: error: implicit declaration of function >> 'req_op' [-Werror=implicit-function-declaration] if (req_op(rq) == REQ_OP_DISCARD) ^~~~~~ >> drivers/nvme/host/nvme.h:220:10: error: implicit declaration of function >> 'blk_rq_bytes' [-Werror=implicit-function-declaration] return blk_rq_bytes(rq); ^~~~~~~~~~~~ drivers/nvme/host/nvme.h: In function 'nvme_cleanup_cmd': >> drivers/nvme/host/nvme.h:226:12: error: dereferencing pointer to incomplete >> type 'struct request' kfree(req->completion_data); ^~ drivers/nvme/host/nvme.h: In function 'nvme_req_needs_retry': >> drivers/nvme/host/nvme.h:243:35: error: implicit declaration of function >> 'blk_noretry_request' [-Werror=implicit-function-declaration] return !(status & NVME_SC_DNR || blk_noretry_request(req)) && ^~~~~~~~~~~~~~~~~~~ drivers/nvme/host/rdma.c: In function 'nvme_rdma_destroy_admin_queue': >> drivers/nvme/host/rdma.c:671:2: error: implicit declaration of function >> 'blk_cleanup_queue' [-Werror=implicit-function-declaration] blk_cleanup_queue(ctrl->ctrl.admin_q); ^~~~~~~~~~~~~~~~~ drivers/nvme/host/rdma.c: In function 'nvme_rdma_unmap_data': >> drivers/nvme/host/rdma.c:864:16: error: implicit declaration of function >> 'rq_data_dir' [-Werror=implicit-function-declaration] req->nents, rq_data_dir(rq) == ^~~~~~~~~~~ drivers/nvme/host/rdma.c: In function 'nvme_rdma_map_data': >> drivers/nvme/host/rdma.c:975:10: error: implicit declaration of function >> 'blk_rq_map_sg' [-Werror=implicit-function-declaration] nents = blk_rq_map_sg(rq->q, rq, req->sg_table.sgl); ^~~~~~~~~~~~~ drivers/nvme/host/rdma.c: In function 'nvme_rdma_process_nvme_rsp': >> drivers/nvme/host/rdma.c:1141:22: error: 'REQ_TYPE_DRV_PRIV' undeclared >> (first use in this function) if (rq->cmd_type == REQ_TYPE_DRV_PRIV && rq->special) ^~~~~~~~~~~~~~~~~ drivers/nvme/host/rdma.c:1141:22: note: each undeclared identifier is reported only once for each function it appears in drivers/nvme/host/rdma.c: At top level: >> drivers/nvme/host/rdma.c:1424:1: error: return type is an incomplete type nvme_rdma_timeout(struct request *rq, bool reserved) ^~~~~~~~~~~~~~~~~ drivers/nvme/host/rdma.c: In function 'nvme_rdma_timeout': >> drivers/nvme/host/rdma.c:1434:9: error: 'BLK_EH_HANDLED' undeclared (first >> use in this function) return BLK_EH_HANDLED; ^~~~~~~~~~~~~~ drivers/nvme/host/rdma.c:1434:9: warning: 'return' with a value, in function returning void drivers/nvme/host/rdma.c:1424:1: note: declared here nvme_rdma_timeout(struct request *rq, bool reserved) ^~~~~~~~~~~~~~~~~ drivers/nvme/host/rdma.c: In function 'nvme_rdma_queue_rq': >> drivers/nvme/host/rdma.c:1440:34: error: dereferencing pointer to incomplete >> type 'struct request_queue' struct nvme_ns *ns = hctx->queue->queuedata; ^~ >> drivers/nvme/host/rdma.c:1476:22: error: 'REQ_TYPE_FS' undeclared (first use >> in this function) if (rq->cmd_type == REQ_TYPE_FS && req_op(rq) == REQ_OP_FLUSH) ^~~~~~~~~~~ drivers/nvme/host/rdma.c: In function 'nvme_rdma_complete_rq': drivers/nvme/host/rdma.c:1527:23: error: 'REQ_TYPE_DRV_PRIV' undeclared (first use in this function) if (rq->cmd_type == REQ_TYPE_DRV_PRIV) ^~~~~~~~~~~~~~~~~ drivers/nvme/host/rdma.c: At top level: >> drivers/nvme/host/rdma.c:1538:14: error: initialization from incompatible >> pointer type [-Werror=incompatible-pointer-types] .complete = nvme_rdma_complete_rq, ^~~~~~~~~~~~~~~~~~~~~ drivers/nvme/host/rdma.c:1538:14: note: (near initialization for 'nvme_rdma_mq_ops.complete') drivers/nvme/host/rdma.c:1545:13: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] .timeout = nvme_rdma_timeout, ^~~~~~~~~~~~~~~~~ drivers/nvme/host/rdma.c:1545:13: note: (near initialization for 'nvme_rdma_mq_ops.timeout') drivers/nvme/host/rdma.c:1550:14: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] .complete = nvme_rdma_complete_rq, ^~~~~~~~~~~~~~~~~~~~~ drivers/nvme/host/rdma.c:1550:14: note: (near initialization for 'nvme_rdma_admin_mq_ops.complete') drivers/nvme/host/rdma.c:1556:13: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] .timeout = nvme_rdma_timeout, ^~~~~~~~~~~~~~~~~ drivers/nvme/host/rdma.c:1556:13: note: (near initialization for 'nvme_rdma_admin_mq_ops.timeout') cc1: some warnings being treated as errors vim +/kobj +61 include/linux/blk-mq.h 320ae51f Jens Axboe 2013-10-24 55 unsigned int numa_node; 17ded320 Jens Axboe 2015-01-07 56 unsigned int queue_num; 320ae51f Jens Axboe 2013-10-24 57 0d2602ca Jens Axboe 2014-05-13 58 atomic_t nr_active; 0d2602ca Jens Axboe 2014-05-13 59 320ae51f Jens Axboe 2013-10-24 60 struct blk_mq_cpu_notifier cpu_notifier; 320ae51f Jens Axboe 2013-10-24 @61 struct kobject kobj; 05229bee Jens Axboe 2015-11-05 62 05229bee Jens Axboe 2015-11-05 63 unsigned long poll_invoked; 05229bee Jens Axboe 2015-11-05 64 unsigned long poll_success; 320ae51f Jens Axboe 2013-10-24 65 }; 320ae51f Jens Axboe 2013-10-24 66 24d2f903 Christoph Hellwig 2014-04-15 67 struct blk_mq_tag_set { 320ae51f Jens Axboe 2013-10-24 68 struct blk_mq_ops *ops; 320ae51f Jens Axboe 2013-10-24 69 unsigned int nr_hw_queues; e3a2b3f9 Jens Axboe 2014-05-20 70 unsigned int queue_depth; /* max hw supported */ 320ae51f Jens Axboe 2013-10-24 71 unsigned int reserved_tags; 320ae51f Jens Axboe 2013-10-24 72 unsigned int cmd_size; /* per-request extra data */ 320ae51f Jens Axboe 2013-10-24 73 int numa_node; 320ae51f Jens Axboe 2013-10-24 74 unsigned int timeout; 320ae51f Jens Axboe 2013-10-24 75 unsigned int flags; /* BLK_MQ_F_* */ 24d2f903 Christoph Hellwig 2014-04-15 76 void *driver_data; 24d2f903 Christoph Hellwig 2014-04-15 77 24d2f903 Christoph Hellwig 2014-04-15 78 struct blk_mq_tags **tags; 0d2602ca Jens Axboe 2014-05-13 79 0d2602ca Jens Axboe 2014-05-13 80 struct mutex tag_list_lock; 0d2602ca Jens Axboe 2014-05-13 81 struct list_head tag_list; 320ae51f Jens Axboe 2013-10-24 82 }; 320ae51f Jens Axboe 2013-10-24 83 74c45052 Jens Axboe 2014-10-29 84 struct blk_mq_queue_data { 74c45052 Jens Axboe 2014-10-29 85 struct request *rq; 74c45052 Jens Axboe 2014-10-29 86 struct list_head *list; 74c45052 Jens Axboe 2014-10-29 87 bool last; 74c45052 Jens Axboe 2014-10-29 88 }; 74c45052 Jens Axboe 2014-10-29 89 74c45052 Jens Axboe 2014-10-29 90 typedef int (queue_rq_fn)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *); 320ae51f Jens Axboe 2013-10-24 91 typedef struct blk_mq_hw_ctx *(map_queue_fn)(struct request_queue *, const int); 0152fb6b Christoph Hellwig 2014-09-13 92 typedef enum blk_eh_timer_return (timeout_fn)(struct request *, bool); 320ae51f Jens Axboe 2013-10-24 93 typedef int (init_hctx_fn)(struct blk_mq_hw_ctx *, void *, unsigned int); 320ae51f Jens Axboe 2013-10-24 94 typedef void (exit_hctx_fn)(struct blk_mq_hw_ctx *, unsigned int); 24d2f903 Christoph Hellwig 2014-04-15 95 typedef int (init_request_fn)(void *, struct request *, unsigned int, 24d2f903 Christoph Hellwig 2014-04-15 96 unsigned int, unsigned int); 24d2f903 Christoph Hellwig 2014-04-15 97 typedef void (exit_request_fn)(void *, struct request *, unsigned int, 24d2f903 Christoph Hellwig 2014-04-15 98 unsigned int); 486cf989 Sagi Grimberg 2016-07-06 99 typedef int (reinit_request_fn)(void *, struct request *); 320ae51f Jens Axboe 2013-10-24 100 81481eb4 Christoph Hellwig 2014-09-13 101 typedef void (busy_iter_fn)(struct blk_mq_hw_ctx *, struct request *, void *, 81481eb4 Christoph Hellwig 2014-09-13 102 bool); f26cdc85 Keith Busch 2015-06-01 103 typedef void (busy_tag_iter_fn)(struct request *, void *, bool); 05229bee Jens Axboe 2015-11-05 104 typedef int (poll_fn)(struct blk_mq_hw_ctx *, unsigned int); 05229bee Jens Axboe 2015-11-05 105 81481eb4 Christoph Hellwig 2014-09-13 106 320ae51f Jens Axboe 2013-10-24 107 struct blk_mq_ops { 320ae51f Jens Axboe 2013-10-24 108 /* 320ae51f Jens Axboe 2013-10-24 109 * Queue request 320ae51f Jens Axboe 2013-10-24 110 */ 320ae51f Jens Axboe 2013-10-24 111 queue_rq_fn *queue_rq; 320ae51f Jens Axboe 2013-10-24 112 320ae51f Jens Axboe 2013-10-24 113 /* 320ae51f Jens Axboe 2013-10-24 114 * Map to specific hardware queue 320ae51f Jens Axboe 2013-10-24 115 */ 320ae51f Jens Axboe 2013-10-24 116 map_queue_fn *map_queue; 320ae51f Jens Axboe 2013-10-24 117 320ae51f Jens Axboe 2013-10-24 118 /* 320ae51f Jens Axboe 2013-10-24 119 * Called on request timeout 320ae51f Jens Axboe 2013-10-24 120 */ 0152fb6b Christoph Hellwig 2014-09-13 121 timeout_fn *timeout; 320ae51f Jens Axboe 2013-10-24 122 05229bee Jens Axboe 2015-11-05 123 /* 05229bee Jens Axboe 2015-11-05 124 * Called to poll for completion of a specific tag. 05229bee Jens Axboe 2015-11-05 125 */ 05229bee Jens Axboe 2015-11-05 126 poll_fn *poll; 05229bee Jens Axboe 2015-11-05 127 30a91cb4 Christoph Hellwig 2014-02-10 @128 softirq_done_fn *complete; 30a91cb4 Christoph Hellwig 2014-02-10 129 320ae51f Jens Axboe 2013-10-24 130 /* 320ae51f Jens Axboe 2013-10-24 131 * Called when the block layer side of a hardware queue has been 320ae51f Jens Axboe 2013-10-24 132 * set up, allowing the driver to allocate/init matching structures. 320ae51f Jens Axboe 2013-10-24 133 * Ditto for exit/teardown. 320ae51f Jens Axboe 2013-10-24 134 */ 320ae51f Jens Axboe 2013-10-24 135 init_hctx_fn *init_hctx; 320ae51f Jens Axboe 2013-10-24 136 exit_hctx_fn *exit_hctx; e9b267d9 Christoph Hellwig 2014-04-15 137 e9b267d9 Christoph Hellwig 2014-04-15 138 /* e9b267d9 Christoph Hellwig 2014-04-15 139 * Called for every command allocated by the block layer to allow e9b267d9 Christoph Hellwig 2014-04-15 140 * the driver to set up driver specific data. f70ced09 Ming Lei 2014-09-25 141 * f70ced09 Ming Lei 2014-09-25 142 * Tag greater than or equal to queue_depth is for setting up f70ced09 Ming Lei 2014-09-25 143 * flush request. f70ced09 Ming Lei 2014-09-25 144 * e9b267d9 Christoph Hellwig 2014-04-15 145 * Ditto for exit/teardown. e9b267d9 Christoph Hellwig 2014-04-15 146 */ e9b267d9 Christoph Hellwig 2014-04-15 147 init_request_fn *init_request; e9b267d9 Christoph Hellwig 2014-04-15 148 exit_request_fn *exit_request; 486cf989 Sagi Grimberg 2016-07-06 149 reinit_request_fn *reinit_request; 320ae51f Jens Axboe 2013-10-24 150 }; 320ae51f Jens Axboe 2013-10-24 151 320ae51f Jens Axboe 2013-10-24 152 enum { 320ae51f Jens Axboe 2013-10-24 153 BLK_MQ_RQ_QUEUE_OK = 0, /* queued fine */ 320ae51f Jens Axboe 2013-10-24 154 BLK_MQ_RQ_QUEUE_BUSY = 1, /* requeue IO for later */ 320ae51f Jens Axboe 2013-10-24 155 BLK_MQ_RQ_QUEUE_ERROR = 2, /* end IO with error */ 320ae51f Jens Axboe 2013-10-24 156 320ae51f Jens Axboe 2013-10-24 157 BLK_MQ_F_SHOULD_MERGE = 1 << 0, 8a58d1f1 Jens Axboe 2014-08-15 158 BLK_MQ_F_TAG_SHARED = 1 << 1, 8a58d1f1 Jens Axboe 2014-08-15 159 BLK_MQ_F_SG_MERGE = 1 << 2, e167dfb5 Jens Axboe 2014-10-29 160 BLK_MQ_F_DEFER_ISSUE = 1 << 4, 24391c0d Shaohua Li 2015-01-23 161 BLK_MQ_F_ALLOC_POLICY_START_BIT = 8, 24391c0d Shaohua Li 2015-01-23 162 BLK_MQ_F_ALLOC_POLICY_BITS = 1, 320ae51f Jens Axboe 2013-10-24 163 5d12f905 Jens Axboe 2014-03-19 164 BLK_MQ_S_STOPPED = 0, 0d2602ca Jens Axboe 2014-05-13 165 BLK_MQ_S_TAG_ACTIVE = 1, 320ae51f Jens Axboe 2013-10-24 166 a4391c64 Jens Axboe 2014-06-05 167 BLK_MQ_MAX_DEPTH = 10240, 506e931f Jens Axboe 2014-05-07 168 506e931f Jens Axboe 2014-05-07 169 BLK_MQ_CPU_WORK_BATCH = 8, 320ae51f Jens Axboe 2013-10-24 170 }; 24391c0d Shaohua Li 2015-01-23 171 #define BLK_MQ_FLAG_TO_ALLOC_POLICY(flags) \ 24391c0d Shaohua Li 2015-01-23 172 ((flags >> BLK_MQ_F_ALLOC_POLICY_START_BIT) & \ 24391c0d Shaohua Li 2015-01-23 173 ((1 << BLK_MQ_F_ALLOC_POLICY_BITS) - 1)) 24391c0d Shaohua Li 2015-01-23 174 #define BLK_ALLOC_POLICY_TO_MQ_FLAG(policy) \ 24391c0d Shaohua Li 2015-01-23 175 ((policy & ((1 << BLK_MQ_F_ALLOC_POLICY_BITS) - 1)) \ 24391c0d Shaohua Li 2015-01-23 176 << BLK_MQ_F_ALLOC_POLICY_START_BIT) 320ae51f Jens Axboe 2013-10-24 177 24d2f903 Christoph Hellwig 2014-04-15 178 struct request_queue *blk_mq_init_queue(struct blk_mq_tag_set *); b62c21b7 Mike Snitzer 2015-03-12 179 struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set, b62c21b7 Mike Snitzer 2015-03-12 180 struct request_queue *q); 320ae51f Jens Axboe 2013-10-24 @181 int blk_mq_register_disk(struct gendisk *); 320ae51f Jens Axboe 2013-10-24 @182 void blk_mq_unregister_disk(struct gendisk *); 320ae51f Jens Axboe 2013-10-24 183 24d2f903 Christoph Hellwig 2014-04-15 184 int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set); 24d2f903 Christoph Hellwig 2014-04-15 185 void blk_mq_free_tag_set(struct blk_mq_tag_set *set); 24d2f903 Christoph Hellwig 2014-04-15 186 320ae51f Jens Axboe 2013-10-24 187 void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule); 320ae51f Jens Axboe 2013-10-24 188 feb71dae Christoph Hellwig 2014-02-20 189 void blk_mq_insert_request(struct request *, bool, bool, bool); 320ae51f Jens Axboe 2013-10-24 190 void blk_mq_free_request(struct request *rq); 7c7f2f2b Jens Axboe 2014-11-17 191 void blk_mq_free_hctx_request(struct blk_mq_hw_ctx *, struct request *rq); 320ae51f Jens Axboe 2013-10-24 192 bool blk_mq_can_queue(struct blk_mq_hw_ctx *); 6f3b0e8b Christoph Hellwig 2015-11-26 193 6f3b0e8b Christoph Hellwig 2015-11-26 194 enum { 6f3b0e8b Christoph Hellwig 2015-11-26 195 BLK_MQ_REQ_NOWAIT = (1 << 0), /* return when out of requests */ 6f3b0e8b Christoph Hellwig 2015-11-26 196 BLK_MQ_REQ_RESERVED = (1 << 1), /* allocate from reserved pool */ 6f3b0e8b Christoph Hellwig 2015-11-26 197 }; 6f3b0e8b Christoph Hellwig 2015-11-26 198 4ce01dd1 Christoph Hellwig 2014-05-27 199 struct request *blk_mq_alloc_request(struct request_queue *q, int rw, 6f3b0e8b Christoph Hellwig 2015-11-26 200 unsigned int flags); 1f5bd336 Ming Lin 2016-06-13 201 struct request *blk_mq_alloc_request_hctx(struct request_queue *q, int op, 1f5bd336 Ming Lin 2016-06-13 202 unsigned int flags, unsigned int hctx_idx); 0e62f51f Jens Axboe 2014-06-04 203 struct request *blk_mq_tag_to_rq(struct blk_mq_tags *tags, unsigned int tag); f26cdc85 Keith Busch 2015-06-01 204 struct cpumask *blk_mq_tags_cpumask(struct blk_mq_tags *tags); 320ae51f Jens Axboe 2013-10-24 205 205fb5f5 Bart Van Assche 2014-10-30 206 enum { 205fb5f5 Bart Van Assche 2014-10-30 207 BLK_MQ_UNIQUE_TAG_BITS = 16, 205fb5f5 Bart Van Assche 2014-10-30 208 BLK_MQ_UNIQUE_TAG_MASK = (1 << BLK_MQ_UNIQUE_TAG_BITS) - 1, 205fb5f5 Bart Van Assche 2014-10-30 209 }; 205fb5f5 Bart Van Assche 2014-10-30 210 205fb5f5 Bart Van Assche 2014-10-30 211 u32 blk_mq_unique_tag(struct request *rq); 205fb5f5 Bart Van Assche 2014-10-30 212 205fb5f5 Bart Van Assche 2014-10-30 213 static inline u16 blk_mq_unique_tag_to_hwq(u32 unique_tag) 205fb5f5 Bart Van Assche 2014-10-30 214 { 205fb5f5 Bart Van Assche 2014-10-30 215 return unique_tag >> BLK_MQ_UNIQUE_TAG_BITS; 205fb5f5 Bart Van Assche 2014-10-30 216 } 205fb5f5 Bart Van Assche 2014-10-30 217 205fb5f5 Bart Van Assche 2014-10-30 218 static inline u16 blk_mq_unique_tag_to_tag(u32 unique_tag) 205fb5f5 Bart Van Assche 2014-10-30 219 { 205fb5f5 Bart Van Assche 2014-10-30 220 return unique_tag & BLK_MQ_UNIQUE_TAG_MASK; 205fb5f5 Bart Van Assche 2014-10-30 221 } 205fb5f5 Bart Van Assche 2014-10-30 222 320ae51f Jens Axboe 2013-10-24 223 struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *, const int ctx_index); f14bbe77 Jens Axboe 2014-05-27 224 struct blk_mq_hw_ctx *blk_mq_alloc_single_hw_queue(struct blk_mq_tag_set *, unsigned int, int); 320ae51f Jens Axboe 2013-10-24 225 973c0191 Keith Busch 2015-01-07 226 int blk_mq_request_started(struct request *rq); e2490073 Christoph Hellwig 2014-09-13 227 void blk_mq_start_request(struct request *rq); c8a446ad Christoph Hellwig 2014-09-13 228 void blk_mq_end_request(struct request *rq, int error); c8a446ad Christoph Hellwig 2014-09-13 229 void __blk_mq_end_request(struct request *rq, int error); 320ae51f Jens Axboe 2013-10-24 230 ed0791b2 Christoph Hellwig 2014-04-16 231 void blk_mq_requeue_request(struct request *rq); 6fca6a61 Christoph Hellwig 2014-05-28 232 void blk_mq_add_to_requeue_list(struct request *rq, bool at_head); c68ed59f Keith Busch 2015-01-07 233 void blk_mq_cancel_requeue_work(struct request_queue *q); 6fca6a61 Christoph Hellwig 2014-05-28 234 void blk_mq_kick_requeue_list(struct request_queue *q); 1885b24d Jens Axboe 2015-01-07 235 void blk_mq_abort_requeue_list(struct request_queue *q); f4829a9b Christoph Hellwig 2015-09-27 236 void blk_mq_complete_request(struct request *rq, int error); 30a91cb4 Christoph Hellwig 2014-02-10 237 320ae51f Jens Axboe 2013-10-24 238 void blk_mq_stop_hw_queue(struct blk_mq_hw_ctx *hctx); 320ae51f Jens Axboe 2013-10-24 239 void blk_mq_start_hw_queue(struct blk_mq_hw_ctx *hctx); 280d45f6 Christoph Hellwig 2013-10-25 240 void blk_mq_stop_hw_queues(struct request_queue *q); 2f268556 Christoph Hellwig 2014-04-16 241 void blk_mq_start_hw_queues(struct request_queue *q); 1b4a3258 Christoph Hellwig 2014-04-16 242 void blk_mq_start_stopped_hw_queues(struct request_queue *q, bool async); b94ec296 Mike Snitzer 2015-03-11 243 void blk_mq_run_hw_queues(struct request_queue *q, bool async); 70f4db63 Christoph Hellwig 2014-04-16 244 void blk_mq_delay_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs); e0489487 Sagi Grimberg 2016-03-10 245 void blk_mq_tagset_busy_iter(struct blk_mq_tag_set *tagset, e0489487 Sagi Grimberg 2016-03-10 246 busy_tag_iter_fn *fn, void *priv); c761d96b Jens Axboe 2015-01-02 247 void blk_mq_freeze_queue(struct request_queue *q); b4c6a028 Keith Busch 2014-12-19 248 void blk_mq_unfreeze_queue(struct request_queue *q); b4c6a028 Keith Busch 2014-12-19 249 void blk_mq_freeze_queue_start(struct request_queue *q); 486cf989 Sagi Grimberg 2016-07-06 250 int blk_mq_reinit_tagset(struct blk_mq_tag_set *set); 320ae51f Jens Axboe 2013-10-24 251 868f2f0b Keith Busch 2015-12-17 252 void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues); 868f2f0b Keith Busch 2015-12-17 253 320ae51f Jens Axboe 2013-10-24 254 /* 320ae51f Jens Axboe 2013-10-24 255 * Driver command data is immediately after the request. So subtract request 2963e3f7 Jens Axboe 2015-04-09 256 * size to get back to the original request, add request size to get the PDU. 320ae51f Jens Axboe 2013-10-24 257 */ 320ae51f Jens Axboe 2013-10-24 258 static inline struct request *blk_mq_rq_from_pdu(void *pdu) 320ae51f Jens Axboe 2013-10-24 259 { 320ae51f Jens Axboe 2013-10-24 @260 return pdu - sizeof(struct request); 320ae51f Jens Axboe 2013-10-24 261 } 320ae51f Jens Axboe 2013-10-24 262 static inline void *blk_mq_rq_to_pdu(struct request *rq) 320ae51f Jens Axboe 2013-10-24 263 { :::::: The code at line 61 was first introduced by commit :::::: 320ae51feed5c2f13664aa05a76bec198967e04d blk-mq: new multi-queue block IO queueing mechanism :::::: TO: Jens Axboe <ax...@kernel.dk> :::::: CC: Jens Axboe <ax...@kernel.dk> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: Binary data