From nobody Mon Feb 9 23:00:13 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.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 (zohomail.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=1584377095; cv=none; d=zohomail.com; s=zohoarc; b=Ohg30mk2gOrgHVDbkZ0QsLhV8Q/ckaFIDHiedoddzVdTu+Ek6YdG0LDeBPulVKcM7J/tMD456nKhtDw1URFC6PLCeWKhUns3vchocrK7302Q71WupNPJlk5s49iADRbQX6YwV91AL31HNct/dYLHT8/mi8yJr0D1/uPBB4Skq0w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584377095; 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; bh=YbR9sKtEd8Cis7exsLFLU4UAEepr5oxTK1o6yeVKWe4=; b=F1DwVUUiOriH2lxLPzR1Fz/a/HFlE2Tk2NX/Wo8X1OhNqf3j2JPn/jOKVhJm5dv5OJayWVe0yEZQUPb6Wwi85cqORflR3VDpY+gXSzVrYEYZ/JKbbpvsESVryttN4+uHBmgUowusYTw4klnbdrukpkgLuNb7u9J3FyEbi2HxhmI= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.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 1584377095919327.19517802208725; Mon, 16 Mar 2020 09:44:55 -0700 (PDT) Received: from localhost ([::1]:42594 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jDsrG-0001G9-Sd for importer@patchew.org; Mon, 16 Mar 2020 12:44:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52852) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jDqkU-0008PS-8g for qemu-devel@nongnu.org; Mon, 16 Mar 2020 10:29:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jDqkS-0007td-Tz for qemu-devel@nongnu.org; Mon, 16 Mar 2020 10:29:46 -0400 Received: from charlie.dont.surf ([128.199.63.193]:48504) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jDqkO-0007IY-NY; Mon, 16 Mar 2020 10:29:40 -0400 Received: from apples.local (80-62-117-52-mobile.dk.customer.tdc.net [80.62.117.52]) by charlie.dont.surf (Postfix) with ESMTPSA id 60924BF8F5; Mon, 16 Mar 2020 14:29:39 +0000 (UTC) From: Klaus Jensen To: qemu-block@nongnu.org Subject: [PATCH v6 08/42] nvme: add support for the abort command Date: Mon, 16 Mar 2020 07:28:54 -0700 Message-Id: <20200316142928.153431-9-its@irrelevant.dk> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200316142928.153431-1-its@irrelevant.dk> References: <20200316142928.153431-1-its@irrelevant.dk> 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] [fuzzy] X-Received-From: 128.199.63.193 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: Kevin Wolf , Beata Michalska , qemu-devel@nongnu.org, Max Reitz , Klaus Jensen , Keith Busch , Javier Gonzalez , Maxim Levitsky Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen Required for compliance with NVMe revision 1.2.1. See NVM Express 1.2.1, Section 5.1 ("Abort command"). The Abort command is a best effort command; for now, the device always fails to abort the given command. Signed-off-by: Klaus Jensen Acked-by: Keith Busch Reviewed-by: Maxim Levitsky --- hw/block/nvme.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 08a83d449de3..7cf7cf55143e 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -729,6 +729,18 @@ static uint16_t nvme_identify(NvmeCtrl *n, NvmeCmd *cm= d) } } =20 +static uint16_t nvme_abort(NvmeCtrl *n, NvmeCmd *cmd, NvmeRequest *req) +{ + uint16_t sqid =3D le32_to_cpu(cmd->cdw10) & 0xffff; + + req->cqe.result =3D 1; + if (nvme_check_sqid(n, sqid)) { + return NVME_INVALID_FIELD | NVME_DNR; + } + + return NVME_SUCCESS; +} + static inline void nvme_set_timestamp(NvmeCtrl *n, uint64_t ts) { trace_nvme_dev_setfeat_timestamp(ts); @@ -863,6 +875,8 @@ static uint16_t nvme_admin_cmd(NvmeCtrl *n, NvmeCmd *cm= d, NvmeRequest *req) return nvme_create_cq(n, cmd); case NVME_ADM_CMD_IDENTIFY: return nvme_identify(n, cmd); + case NVME_ADM_CMD_ABORT: + return nvme_abort(n, cmd, req); case NVME_ADM_CMD_SET_FEATURES: return nvme_set_feature(n, cmd, req); case NVME_ADM_CMD_GET_FEATURES: @@ -1375,6 +1389,19 @@ static void nvme_realize(PCIDevice *pci_dev, Error *= *errp) id->ieee[1] =3D 0x02; id->ieee[2] =3D 0xb3; id->oacs =3D cpu_to_le16(0); + + /* + * Because the controller always completes the Abort command immediate= ly, + * there can never be more than one concurrently executing Abort comma= nd, + * so this value is never used for anything. Note that there can easil= y be + * many Abort commands in the queues, but they are not considered + * "executing" until processed by nvme_abort. + * + * The specification recommends a value of 3 for Abort Command Limit (= four + * concurrently outstanding Abort commands), so lets use that though i= t is + * inconsequential. + */ + id->acl =3D 3; id->frmw =3D 7 << 1; id->lpa =3D 1 << 0; id->sqes =3D (0x6 << 4) | 0x6; --=20 2.25.1