nvme_pci_iod_alloc_size(dev, NVME_MAX_KB_SZ, NVME_MAX_SEGS, true); WARN_ON_ONCE(alloc_size > PAGE_SIZE); //初始化dev->iod_mempool内存池,作为内存备用 dev->iod_mempool = mempool_create_node(1, mempool_kmalloc, mempool_kfree
alloc_size = nvme_pci_iod_alloc_size(); WARN_ON_ONCE(alloc_size > PAGE_SIZE); dev->iod_mempool = mempool_create_node(1, mempool_kmalloc, mempool_kfree, (void *) alloc_size, GFP_KERNEL, node); if (!dev->iod_mempool) { result = -ENOMEM; goto release_pools; } result = nvme_i...
.vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \ .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID 也就是当pci class为PCI_CLASS_STORAGE_EXPRESS时,就表示是nvme设备,并且这个是写在设备里的,当设备插入host时,pci driver(并不是nvme driver)回去读取这个值,然后判断它需要哪个驱动去做处理. 【文...
比如,函数nvme_map_data中有iod->use_sgl的结果可以觉得IO传输过程中是使用SGL还是PRP。 而iod->use_sgl的返回结果依赖函数nvme_pci_use_sgls的判断,主要有两种情况: 当SGL不支持的时,iod->use_sgl返回false,对应的IO数据传输就采用PRP了。 当平均请求大小avg_seg_size值小于SGL阈值sgl_threshold时,也返回fals...
调用pci_enable_device_mem来使能nvme设备的内存空间,也就是之前映射的bar0空间。 之后就可以通过readl(dev->bar + NVME_REG_CSTS)来直接操作nvme设备上的控制寄存器了,也就是nvme协议中的如下这个表。 pci有两种中断模式,一种是INT,另一种是MSI。假如不支持INT模式的话,就使能MSI模式。在这里使用的是INT模式...
(nvme_thread); } static void bio_completion(struct nvme_dev *dev, void *ctx, struct nvme_completion *cqe) { struct nvme_iod *iod = ctx; struct bio *bio = iod->private; u16 status = le16_to_cpup(&cqe->status) >> 1; dma_unmap_sg(&dev->pci_dev->dev, iod->sg, iod->nen...
Open Menu /drivers/nvme/host/pci.c Go get it Loading... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 ...
4 changes: 2 additions & 2 deletions 4 drivers/nvme/host/pci.c Original file line numberDiff line numberDiff line change @@ -668,7 +668,7 @@ static blk_status_t nvme_map_data(struct nvme_dev *dev, struct request *req, if (blk_rq_map_integrity_sg(q, req->bio, &iod->me...
bip= bio_integrity_alloc(bio, GFP_KERNEL,1);if(IS_ERR(bip)) { ret=PTR_ERR(bip);gotoout_free_meta; } bip->bip_iter.bi_size =meta_len; bip->bip_iter.bi_sector =meta_seed; ret=bio_integrity_add_page(bio, virt_to_page(meta), ...
原始仓库: https://github.com/linux-nvme/nvme-cli master 管理 管理 分支(5) 标签(55) master nvme-cli-monolithic libnvme-int-3.4.2021 integration-libnvme 1.11-stable v2.9.1 v2.9 v2.8 v2.7.1 v2.7 v2.6 v2.5 v2.4 v2.3 v2.2.1 v2.2 v2.1.2 v2.1.1 v2.1 v2.1-rc0 v2.0 v2.0-...