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
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命令,这个队列概念和之前介绍块驱动中的磁...
if (result)goto put_pci;result = nvme_setup_prp_pools(dev);//设置dma需要的prp内存池。if (result)goto release;kref_init(&dev->kref);result = nvme_dev_start(dev);//创建admin queue、 io queue 、request irqif (result)goto release_pools;if (dev->online_queues > 1)result = nvme_dev_...
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_...
PTR_ERR(nvme_thread) :-EINTR; goto disable; } nvme_init_queue(dev->queues[0],0);//初始化queue,并online_queues++ result = nvme_alloc_admin_tags(dev); if (result) goto disable; nvme_setup_io_queues(dev); if (result) goto free_tags; nvme_set_irq_hints(dev); return result; free...
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,...
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个数; ...
}/*初始化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); ...
初始化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; ...