NVME Driver 解析之Create I/O Completion Queue command
来源:互联网 发布:郑大数据库程序设计 编辑:程序博客网 时间:2024/05/17 08:56
NVME Driver 解析之Create I/O Completion Queue command
先看一下spec中对Create I/O Completion Queue command的说明
Create I/O Completion Queue command就是把上面各个结构体填充好,然后发命令写到queue的tail中,然后按一下dooorbell的门铃
static int adapter_alloc_cq(struct nvme_dev *dev, u16 qid,
struct nvme_queue *nvmeq)
{
int status;struct nvme_command c;int flags = NVME_QUEUE_PHYS_CONTIG | NVME_CQ_IRQ_ENABLED;//这两个flag对应Figure 50 的PC位和IEN位memset(&c, 0, sizeof(c));c.create_cq.opcode = nvme_admin_create_cq;//命令码05h,见下图c.create_cq.prp1 = cpu_to_le64(nvmeq->cq_dma_addr);//这是prp1的地址,是在nvme_alloc_queue中通过dma_alloc_coherent实现的c.create_cq.cqid = cpu_to_le16(qid);//这里的qid是nvme_create_io_queues中传下来的,其值是c.create_cq.qsize = cpu_to_le16(nvmeq->q_depth - 1);//qsize是指queue中有多少个entry,因为是0base的,所以要-1c.create_cq.cq_flags = cpu_to_le16(flags);c.create_cq.irq_vector = cpu_to_le16(nvmeq->cq_vector);//该queue所对应的中断向量status = nvme_submit_admin_cmd(dev, &c, NULL);//提交命令if (status)return -EIO;return 0;
}
nvme_submit_admin_cmd解析
nvme_submit_admin_cmd 函数原型int nvme_submit_admin_cmd(struct nvme_dev *dev, struct nvme_command *cmd, u32 *result),它其实是调用了nvme_submit_sync_cmd(dev, 0, cmd, result, ADMIN_TIMEOUT);,即提交了一个同步的命令。
nvme提交命令有同步命令和异步命令两种,同步命令是指提交完命令以后要等待controller处理完并返回以后才能接着执行下面的操作,而异步命令则把命令提交进去以后就直接返回了,不需要等待明明处理完。同步命令多用于Admin Command 、User Admin Command,和NVME_IOCTL_SUBMIT_IO的提交。
关于同步命令的提交,将在下一篇文章中介绍
0 0
- NVME Driver 解析之Create I/O Completion Queue command
- NVMe驱动解析-响应I/O请求
- NVME Driver解析之init与probe
- I/O Completion Ports
- I/O Completion Ports
- I/O Completion Ports
- I/O Completion Ports
- I/O Completion Port
- I/O completion port
- I/O Completion Port
- I/O Completion
- I/O Completion ports
- I/O Completion Ports
- I/O Completion Ports
- NVME Driver分析之nvme_submit_sync_cmd
- Socket I/O模型之完成端口(completion port)
- Socket I/O模型之完成端口(completion port)
- Socket I/O模型之完成端口(completion port)
- hdu 4323 Magic Number (dp,编辑距离)
- Android深入浅出系列之Socket—Socket编程(二)
- 在OLTP中,索引访问的几种常规操作
- lower_bound()&&upper_bound()得用法
- Java基础Java中static,this与final
- NVME Driver 解析之Create I/O Completion Queue command
- http://blog.csdn.net/wddpxqq/article/details/7341809
- Android UI, spinner 下拉选框
- sql数据库连接代码
- 使用RSA访问目标机
- HDU ACM 1081 最大子矩阵问题
- Android深入浅出系列之Socket—Socket编程(一)
- Codeforces Round #275 (Div. 1)D(树形DP)
- 天气寒冷,许多人想以食补来御寒