@samitouri / QOSamiQemu / commits / 4e868b806e

hw/nvme: unmap req->sg earlier in nvme_enqueue_req_completion

Instead of unmapping req->sg in nvme_post_cqes(), we can do it earlier in nvme_enqueue_req_completion(). When req completion is enqueued we don't need to access req->sg anymore. We only care about req->sq, req->cqe and req->status. Reviewed-by: Klaus Jensen <k.jensen@samsung.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@futurfusion.io> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>

Alexander Mikhalitsyn committed Jun 11, 2026 at 20:08 UTC 4e868b806e5149a9adb1073240055a7051cd5ec4
1 file changed +2 -1
hw/nvme/ctrl.c
+2 -1
@@ -1549,7 +1549,6 @@ static void nvme_post_cqes(void *opaque)
1549 QTAILQ_REMOVE(&cq->req_list, req, entry);
1550
1551 nvme_inc_cq_tail(cq);
1552 - nvme_sg_unmap(&req->sg);
1552
1553 if (QTAILQ_EMPTY(&sq->req_list) && !nvme_sq_empty(sq)) {
1554 qemu_bh_schedule(sq->bh);
@@ -1579,6 +1578,8 @@ static void nvme_enqueue_req_completion(NvmeCQueue *cq, NvmeRequest *req)
1578 req->status, req->cmd.opcode);
1579 }
1580
1581 + nvme_sg_unmap(&req->sg);
1582 +
1583 QTAILQ_REMOVE(&req->sq->out_req_list, req, entry);
1584 QTAILQ_INSERT_TAIL(&cq->req_list, req, entry);
1585