nvme_setup_host_mem(dev); } result = nvme_setup_io_queues(dev); if (result) goto out; /* * Keep the controller around but remove all namespaces if we don't have * any working I/O queue. */ if (dev->online_queues
2.5.1 nvme_setup_prp_pools 2.5.2 读写io meme_size 设置 和mem 空间申请 2.6 nvme 控制器初始化 2.7 nmve控制器的reset 2.8 工作队列的同步和刷新 Nvme Probe 概述 Nvme Probe 主要功能就是初始画探测pcie总线上的设备 并将该设备初始化建立连接,方便后期host 和 device 之间的数据通信 开始之前思考问题 :...
dma_addr_t dbbuf_eis_dma_addr; /* host memory buffer support: */ u64 host_mem_size; u32 nr_host_mem_descs; dma_addr_t host_mem_descs_dma; structnvme_host_mem_buf_desc *host_mem_descs; void**host_mem_desc_bufs; }; 每个设备至少两个队列,一个是admin管理命令,一个是给I/O命令...
/* host memory buffer support: */ u64 host_mem_size; u32 nr_host_mem_descs; dma_addr_t host_mem_descs_dma; structnvme_host_mem_buf_desc *host_mem_descs; void**host_mem_desc_bufs; }; 每个设备至少两个队列,一个是admin管理命令,一个是给I/O命令,这个队列概念和之前介绍块驱动中的磁...
Nvme_setup_prp_pools用来创建dma时所用的内存池,prp_page_pool是虚拟内核地址, static int nvme_setup_prp_pools(structnvme_dev *dev) { structdevice*dmadev = &dev->pci_dev->dev; dev->prp_page_pool =dma_pool_create("prp listpage", dmadev, ...
data ib_dma_mapping_error ib_dma_sync_single_for_cpu nvme_setup_cmd nvme_start_request(rq) nvme_rdma_map_data ib_dma_sync_single_for_device nvme_rdma_post_send <- drivers/nvme/host/rdma.c ib_post_send nvmf_rdma_request_process ... do -> loop switch (rdma_req->state) case RDMA_...
初始化io queue是nvme_setup_io_queue函数 /* 初始化nvme设备的所有io queue */ static int nvme_setup_io_queues(struct nvme_dev *dev) { struct nvme_queue *adminq = raw_nvmeq(dev, 0); struct pci_dev *pdev = dev->pci_dev; int result, i, vecs, nr_io_queues, size; ...
SCSI_LOG_->SCSI_LOG_HLQUEUE->[66521.609478]sd6:0:0:0:[sda]tag#23sd_setup_read_write_cmnd:block=893164736,count=8cmd->cmd_len=10staticintscsi_dispatch_cmd(struct scsi_cmnd*cmd)trace_scsi_dispatch_cmd_start(cmd)rtn=host->hostt->queuecommand(host,cmd)->.queuecommand=iscsi_queuecommand,...
}/*初始化nvme的io queue,此为nvme_queue,一个nvme设备至少一个admin queue,一个io queue*/result=nvme_setup_io_queues(dev);if(result && result != -EBUSY)gotodisable;returnresult; disable: nvme_disable_queue(dev,0); nvme_dev_list_remove(dev); ...
8、使用nvme_setup_host_mem在主机端分配DMA内存,用于设备的DMA操作,并通过nvme_admin_set_features 0x09这个命令设置给nvme设备。 9、nvme_setup_io_queues设置io queue: 1、首先会获取系统cpu个数,然后通过set feature命令去设置queue个数为cpu个数,然后根据命令的返回值去决定最终的queue个数; ...