From nobody Sat Apr 27 11:03:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495978614655766.4779852426237; Sun, 28 May 2017 06:36:54 -0700 (PDT) Received: from localhost ([::1]:44020 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dEyNH-0005Kg-0t for importer@patchew.org; Sun, 28 May 2017 09:36:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51429) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dExuQ-0007gj-Vf for qemu-devel@nongnu.org; Sun, 28 May 2017 09:07:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dExuN-0004G4-QM for qemu-devel@nongnu.org; Sun, 28 May 2017 09:07:02 -0400 Received: from mail-wm0-x233.google.com ([2a00:1450:400c:c09::233]:38856) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dExuN-0004Fw-HC for qemu-devel@nongnu.org; Sun, 28 May 2017 09:06:59 -0400 Received: by mail-wm0-x233.google.com with SMTP id e127so28036989wmg.1 for ; Sun, 28 May 2017 06:06:59 -0700 (PDT) Received: from nitrogen.il.elastifile.com (bzq-3-168-31-230.red.bezeqint.net. [31.168.3.230]) by smtp.gmail.com with ESMTPSA id e73sm19230063wmd.1.2017.05.28.06.06.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 28 May 2017 06:06:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernelim-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=qsDGjG0vA0RMEsVG0GlGPh+CHB2+IxINXqakvoHkq8M=; b=wQEthgebUFMIWGtd/Ye/IBxvkElHNDKy/6ZSEb5HXnZCRI2VUDUOkAU7ps58Px/5NP Cw/RRHzdH5O8DNzZ7Lvbxvsbb8uXdxC6XvOjuPJh9WLYEMTM6dk6qFoAVhFA2sSHBuTn MpkTG9flIMMHrTZjDRjzBw0ZJ9k9WLBXQvKDcucoxT5M+tkCfXFuOkP/4D9dcNGU0Rch j3UDYzKQNgF0YncyzwqECSCF+z9KaxEw0Czkfy24Sr8hS8fM5RKOS9GbxdX1LsLXfXmY atrMEMwOB+26qrhNTypFd5ZZBWkM9JHeKYAeZ6ClEZvAcOCI4qhie8Z++qPtnQqxFGAp EEvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=qsDGjG0vA0RMEsVG0GlGPh+CHB2+IxINXqakvoHkq8M=; b=JjgO8mQVC4eY8N//TB/FwqDunGN7i14Ltwguj5FjDrqZD0G3u+UPKfuvBEtyQZqd2f hAUXt17d/BZlHR4dX5vpf6DRmoTStUavvFkgCghlQkKtMsLIrQGOh9ULvJV9xvu5nsoI Xq1dTUspOPfthW6k0kqH1fXA76axUzjREXmVAF9BjsSgm8lNxdpfLMJWdQT1oQ1l72y6 Ym/RSl4DTQzLCEVUlKSZhR2ZbZfFJ3Grqs9y+pSql1totBXA80flOZEZqMCjTUen/82Z NRHNKB+So1DtQpCiH7ahxU6wahdWyiNR+zp8ztkXTcOakyFIgWcpXAkGy50ZqciwB60h 2CCA== X-Gm-Message-State: AODbwcCGpoyZGA/h5v0CtITemED79r9p+ecKVop4Q8ydJrEnlZT7B7zb oCIh2OeuQCTZ/fZVCQw= X-Received: by 10.223.150.39 with SMTP id b36mr4844842wra.149.1495976818134; Sun, 28 May 2017 06:06:58 -0700 (PDT) From: Dan Aloni To: qemu-devel@nongnu.org Date: Sun, 28 May 2017 16:06:49 +0300 Message-Id: <20170528130649.28168-1-dan@kernelim.com> X-Mailer: git-send-email 2.9.4 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::233 X-Mailman-Approved-At: Sun, 28 May 2017 09:34:29 -0400 Subject: [Qemu-devel] [PATCH] nvme: Fix get/set number of queues feature, again X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Keith Busch , Alex Friedman , Stefan Hajnoczi Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The number of queues that should be return by the admin command should: 1) Only mention the number of non-admin queues. 2) It is zero-based, meaning that '0 =3D=3D one non-admin queue', '1 =3D=3D two non-admin queues', and so forth. Because our `num_queues` means the number of queues _plus_ the admin queue, then the right calculation for the number returned from the admin command is `num_queues - 2`, combining the two requirements mentioned. The issue was discovered by reducing num_queues from 64 to 8 and running a Linux VM with an SMP parameter larger than that (e.g. 22). It tries to utilize all queues, and therefore fails with an invalid queue number when trying to queue I/Os on the last queue. Signed-off-by: Dan Aloni CC: Alex Friedman CC: Keith Busch CC: Stefan Hajnoczi Reviewed-by: Keith Busch --- hw/block/nvme.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 7428db9f0c91..08ddf3a39e2f 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -573,7 +573,7 @@ static uint16_t nvme_get_feature(NvmeCtrl *n, NvmeCmd *= cmd, NvmeRequest *req) result =3D blk_enable_write_cache(n->conf.blk); break; case NVME_NUMBER_OF_QUEUES: - result =3D cpu_to_le32((n->num_queues - 1) | ((n->num_queues - 1) = << 16)); + result =3D cpu_to_le32((n->num_queues - 2) | ((n->num_queues - 2) = << 16)); break; default: return NVME_INVALID_FIELD | NVME_DNR; @@ -594,7 +594,7 @@ static uint16_t nvme_set_feature(NvmeCtrl *n, NvmeCmd *= cmd, NvmeRequest *req) break; case NVME_NUMBER_OF_QUEUES: req->cqe.result =3D - cpu_to_le32((n->num_queues - 1) | ((n->num_queues - 1) << 16)); + cpu_to_le32((n->num_queues - 2) | ((n->num_queues - 2) << 16)); break; default: return NVME_INVALID_FIELD | NVME_DNR; --=20 2.9.4