From nobody Tue Feb 10 20:31:06 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1562311908; cv=none; d=zoho.com; s=zohoarc; b=ly2VBHUVQQcslVslBfC2qIcg41XT71isV11iBOrjvd4c/6Rs0ZdCMT4sNjOuhpB2wrLGFHUXUCxFlrgrPlHaWPMt8ceo/LTvEI1dyjeV6j+y3bfYu4H5xctx9AJtnKgI6QBoywA6beldcGmwslBsLPkjQUrbFC+LXjSnieBaY+E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1562311908; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=zWZASoHCKI6jX3RdvzZ43j8ZehMQkmeXuJ5llFa159U=; b=D99CExWIFhr+SScClA8j3/K5m27G3jkPQ3nSAJ5/WOLA4qdhLRUQxMYdn9got065DeuV+qvRqHNsbi20k074QfyXoB91eVwWiH4G+cYP+oiHFeOm7rPxQKSkxBY1gt8vCNz78+LbzTv4RxbSOj58sy3RIsfuHDv+bNgIV0umyw0= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1562311908863164.70050528776756; Fri, 5 Jul 2019 00:31:48 -0700 (PDT) Received: from localhost ([::1]:50148 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hjIh9-0006HL-Ai for importer@patchew.org; Fri, 05 Jul 2019 03:31:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44154) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hjIZc-0005Hj-9M for qemu-devel@nongnu.org; Fri, 05 Jul 2019 03:24:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hjIZZ-0005lW-Kl for qemu-devel@nongnu.org; Fri, 05 Jul 2019 03:23:59 -0400 Received: from charlie.dont.surf ([128.199.63.193]:50528) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hjIZW-0005h5-1g; Fri, 05 Jul 2019 03:23:54 -0400 Received: from localhost.localdomain (ip-5-186-120-196.cgn.fibianet.dk [5.186.120.196]) by charlie.dont.surf (Postfix) with ESMTPSA id 38D32C04E0; Fri, 5 Jul 2019 07:23:52 +0000 (UTC) From: Klaus Birkelund Jensen To: qemu-block@nongnu.org Date: Fri, 5 Jul 2019 09:23:23 +0200 Message-Id: <20190705072333.17171-7-klaus@birkelund.eu> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190705072333.17171-1-klaus@birkelund.eu> References: <20190705072333.17171-1-klaus@birkelund.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 128.199.63.193 Subject: [Qemu-devel] [PATCH 06/16] nvme: support completion queue in cmb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, matt.fitzpatrick@oakgatetech.com, qemu-devel@nongnu.org, armbru@redhat.com, keith.busch@intel.com, mreitz@redhat.com, lersek@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" While not particularly useful, allow completion queues in the controller memory buffer. Could be useful for testing. Signed-off-by: Klaus Birkelund Jensen --- hw/block/nvme.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 3c392dc336a8..b31e5ff681bd 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -57,6 +57,16 @@ static void nvme_addr_read(NvmeCtrl *n, hwaddr addr, voi= d *buf, int size) } } =20 +static void nvme_addr_write(NvmeCtrl *n, hwaddr addr, void *buf, int size) +{ + if (n->cmbsz && addr >=3D n->ctrl_mem.addr && + addr < (n->ctrl_mem.addr + int128_get64(n->ctrl_mem.size))= ) { + memcpy((void *)&n->cmbuf[addr - n->ctrl_mem.addr], buf, size); + return; + } + pci_dma_write(&n->parent_obj, addr, buf, size); +} + static int nvme_check_sqid(NvmeCtrl *n, uint16_t sqid) { return sqid < n->params.num_queues && n->sq[sqid] !=3D NULL ? 0 : -1; @@ -276,6 +286,7 @@ static void nvme_post_cqes(void *opaque) =20 QTAILQ_FOREACH_SAFE(req, &cq->req_list, entry, next) { NvmeSQueue *sq; + NvmeCqe *cqe =3D &req->cqe; hwaddr addr; =20 if (nvme_cq_full(cq)) { @@ -289,8 +300,7 @@ static void nvme_post_cqes(void *opaque) req->cqe.sq_head =3D cpu_to_le16(sq->head); addr =3D cq->dma_addr + cq->tail * n->cqe_size; nvme_inc_cq_tail(cq); - pci_dma_write(&n->parent_obj, addr, (void *)&req->cqe, - sizeof(req->cqe)); + nvme_addr_write(n, addr, (void *) cqe, sizeof(*cqe)); QTAILQ_INSERT_TAIL(&sq->req_list, req, entry); } if (cq->tail !=3D cq->head) { @@ -1399,7 +1409,7 @@ static void nvme_realize(PCIDevice *pci_dev, Error **= errp) NVME_CMBLOC_SET_OFST(n->bar.cmbloc, 0); =20 NVME_CMBSZ_SET_SQS(n->bar.cmbsz, 1); - NVME_CMBSZ_SET_CQS(n->bar.cmbsz, 0); + NVME_CMBSZ_SET_CQS(n->bar.cmbsz, 1); NVME_CMBSZ_SET_LISTS(n->bar.cmbsz, 0); NVME_CMBSZ_SET_RDS(n->bar.cmbsz, 1); NVME_CMBSZ_SET_WDS(n->bar.cmbsz, 1); --=20 2.20.1