312 int16_t cid; 313 c = (NvmeCqe *)&q->cq.queue[q->cq.head * NVME_CQ_ENTRY_BYTES]; 314 if (!c->cid || (le16_to_cpu(c->status) & 0x1) == q->cq_phase) { 315 break; 316 } 317 q->cq.head = (q->cq.head + 1) % NVME_QUEUE_SIZE; 318 if (!q->cq.head) ...
NVMe-oF rpoller轮询CQ队列,获取到CQE,将struct spdk_nvmf_rdma_recv放入incoming_queue等待Request object。reaped = ibv_poll_cq(rpoller->cq, 32, wc); /* Receives that are waiting for a request object */ STAILQ_HEAD(, spdk_nvmf_rdma_recv) incoming_queue; STAILQ_INSERT_HEAD(&rqpair->...
* handle_level_irq 用于电平触发中断的流控处理; * handle_edge_irq 用于边沿触发中断的流控处理; * handle_fasteoi_irq 用于需要响应eoi的中断控制器; * handle_percpu_irq 用于只在单一cpu响应的中断; * handle_nested_irq 用于处理使用线程的嵌套中断;*/#ifdef CONFIG_IRQ_PREFLOW_FASTEOI irq_preflow_handle...
unsignedint__percpu *kstat_irqs;///* irq的统计信息,在proc中可查到 */irq_flow_handler_t handle_irq;/*回调函数,当此中断产生中断时,会调用handle_irq,在handle_irq中进行遍历irqaction链表*//*handle_simple_irq 用于简单处理; * handle_level_irq 用于电平触发中断的流控处理; * handle_edge_irq 用...
* handle_fasteoi_irq 用于需要响应eoi的中断控制器; * handle_percpu_irq 用于只在单一cpu响应的中断; * handle_nested_irq 用于处理使用线程的嵌套中断; */ #ifdef CONFIG_IRQ_PREFLOW_FASTEOI irq_preflow_handler_t preflow_handler; #endif struct irqaction *action; /* IRQ action list */ ...
nvmet_reqstruct nvmet_req { structnvme_command *cmd; structnvme_completion *cqe; struct nvmet_sq *sq; struct nvmet_cq *cq; struct nvmet_ns *ns; struct scatterlist *sg; struct scatterlist * bios加入nvme启动不了 linux nvmet 描述符 ...
Expand Up@@ -961,7 +961,7 @@ static inline void nvme_handle_cqe(struct nvme_queue *nvmeq, u16 idx) req=blk_mq_tag_to_rq(nvme_queue_tagset(nvmeq),cqe->command_id); trace_nvme_sq(req,cqe->sq_head,nvmeq->sq_tail); if(!nvme_end_request(req,cqe->status,cqe->result)) ...
(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...
When the hardware processes the work request, a Completion Queue Entry (CQE, pronounced "cookie") is placed on the CQ. There is a sample of code showing how to handle completion events in ibv_ack_cq_events(3). 当硬件处理一个工作请求(WR)的时候,一个完成队列条目(CQE,发音为cookie)被放置到...
nvmet_reqstruct nvmet_req { structnvme_command *cmd; structnvme_completion *cqe; struct nvmet_sq *sq; struct nvmet_cq *cq; struct nvmet_ns *ns; struct scatterlist *sg; struct scatterlist * bios加入nvme启动不了 linux nvmet 描述符 ...