Linux内核nvme驱动分析之设备初始化

参考

独家发布 | Linux NVMe Driver学习笔记大合集
linux内核源码分析 - nvme设备的初始化
强势回归,Linux blk用实力证明自己并不弱!

驱动初始化

nvme_probe -> nvme_async_probe -> nvme_dev_add -> nvme_alloc_ns

中断与轮询

schedule_timeout与mdelay的区别
schedule_timeout函数
linux时间—延迟和定时
内核定时机制API之__round_jiffies_relative

在4.1版本的内核,有一个内核线程nvme_kthread,负责1s轮询一下所以NVMe盘,看有没有队列完成,在4.14版本的内核中,blk mq增加了poll接口,该功能由函数nvme_timeoutnvme_poll取代,nvme_timeout调用nvme_poll会查看当前是否有没有处理的完成队列,4.1版本的nvme_timeout直接取消当前的request。

static const struct blk_mq_ops nvme_mq_admin_ops = {
	.queue_rq	= nvme_queue_rq,
	.complete	= nvme_pci_complete_rq,
	.init_hctx	= nvme_admin_init_hctx,
	.exit_hctx      = nvme_admin_exit_hctx,
	.init_request	= nvme_init_request,
	.timeout	= nvme_timeout,
};

static const struct blk_mq_ops nvme_mq_ops = {
	.queue_rq	= nvme_queue_rq,
	.complete	= nvme_pci_complete_rq,
	.init_hctx	= nvme_init_hctx,
	.init_request	= nvme_init_request,
	.map_queues	= nvme_pci_map_queues,
	.timeout	= nvme_timeout,
	.poll		= nvme_poll,
};

你可能感兴趣的:(存储)