From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615290650; cv=none; d=zohomail.com; s=zohoarc; b=IZadBBoL1viayTsCSnnz2FSTCUaWvLtcYESHfOZxzpD5RFKmqIDB0oBVCjGEz8ai2uDiyi3akxrWnLLY2RCV+5jjPudYoMqBCl5Y0dZAgvhOJOMFHSpV2xDDjelZ/zZuRE9+vbvVYgP/U0vyCGkeZ7QTf4a5pbOfvSQVyXeo+3s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615290650; 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=zIy3kiHxQ2O5o5FnX7H5rOh8QOlkpl4fovEBrQep1tQ=; b=lmTaqG/nHV2morlGk/6t/ZiX4GvWlyNSgT6djnRpeW0HOqdsTfCqWxnUnFX43a/7f7N9jfCRELCKdvDVFWv0HZFBWyna0VQUUk54cx/6vjHfnqH+cuJWk63F1kgaI2bWHood4ZRLuJUfx0oXSsRDZ/o3MxHGQjCMYoOfzJpdhjQ= 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 1615290650758507.7368609497672; Tue, 9 Mar 2021 03:50:50 -0800 (PST) Received: from localhost ([::1]:60934 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJasz-0002bL-C8 for importer@patchew.org; Tue, 09 Mar 2021 06:50:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42724) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanq-0008C8-Iw; Tue, 09 Mar 2021 06:45:30 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:55985) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanj-0008RI-BE; Tue, 09 Mar 2021 06:45:30 -0500 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailnew.west.internal (Postfix) with ESMTP id C597E2705; Tue, 9 Mar 2021 06:45:18 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Tue, 09 Mar 2021 06:45:19 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 59B6924005A; Tue, 9 Mar 2021 06:45:16 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=zIy3kiHxQ2O5o 5FnX7H5rOh8QOlkpl4fovEBrQep1tQ=; b=myngSvTL7qc2whkxpAEDLfA3G7b0v /+RxbGJPeY+Xi2DxErYqzDq2sW2CweFWEQG4eY5DdM+SrAGuI+WR0eqMJHDnJNxy OdgJDk+DWxc9eIaXkBLoG+ffdiZMJzXR7NwYh0tieJtPo3m1A94aujCZXGDgJUFM T2wDc6NkzGwCkzOavQrtKRtWnUDYbrUvCT9uAfeiHgC+JestZ9Ew0aR1sLQjLOFo D3ehmfwkN2cqcDTdvRNWrbOSdoXBjnDxFoVMHj8ceT2aalJlA6qRCSxpHAj/C9D6 t+yew3evwxXD63ZqJxhYFrdGBRERkfBFwaeWwurN0T0IOWjpCZiL48dwg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=zIy3kiHxQ2O5o5FnX7H5rOh8QOlkpl4fovEBrQep1tQ=; b=rxzw6smQ N9dik13hOzyaWKSQRBpCVnHznXqE9si/U6yq/UQZcOugFGGFnhzipo0LFxhWgtXT j9pcKBcksT1t5FKgnQgY80QUsZQlWAOqMlAk8X+WRK4t+6UzmPmJu9+REwcgd9UY PLpZZviA/3LfEQiowhESlsNgOZywpRfeYJeV3yVTGb6vrdEkvkn9yPEl5dUKiark OCHSoTkI1SHIjDSw5HtgdRbewa95HdVpknZqyZd8cg0uV04E8Szgk87c3lGQ0ZuF lT1FmU1T1LutLTFszMzGlrtRgZf1XbjtqQ1+FWU9RSV2Uj+8Ysec8nhMsO16MB5N UWSwCgIWGI7wtQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeltdetfeegkefguedvtdduffejiedvjeejudejieelveekhfekvdefleeludev ffenucffohhmrghinhepvddtudelqddtkedrohhrghenucfkphepkedtrdduieejrdelke drudeltdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhm pehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 01/38] hw/block/nvme: introduce nvme-subsys device Date: Tue, 9 Mar 2021 12:44:35 +0100 Message-Id: <20210309114512.536489-2-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im To support multi-path in QEMU NVMe device model, We need to have NVMe subsystem hierarchy to map controllers and namespaces to a NVMe subsystem. This patch introduced a simple nvme-subsys device model. The subsystem will be prepared with subsystem NQN with provided in nvme-subsys device: ex) -device nvme-subsys,id=3Dsubsys0: nqn.2019-08.org.qemu:subsys0 Signed-off-by: Minwoo Im Tested-by: Klaus Jensen Reviewed-by: Klaus Jensen Reviewed-by: Keith Busch [k.jensen: added 'nqn' device parameter per request] Signed-off-by: Klaus Jensen --- hw/block/nvme-subsys.h | 29 +++++++++++++++++ hw/block/nvme-subsys.c | 70 ++++++++++++++++++++++++++++++++++++++++++ hw/block/nvme.c | 12 ++++++++ hw/block/meson.build | 2 +- 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 hw/block/nvme-subsys.h create mode 100644 hw/block/nvme-subsys.c diff --git a/hw/block/nvme-subsys.h b/hw/block/nvme-subsys.h new file mode 100644 index 000000000000..fc86d01ff32e --- /dev/null +++ b/hw/block/nvme-subsys.h @@ -0,0 +1,29 @@ +/* + * QEMU NVM Express Subsystem: nvme-subsys + * + * Copyright (c) 2021 Minwoo Im + * + * This code is licensed under the GNU GPL v2. Refer COPYING. + */ + +#ifndef NVME_SUBSYS_H +#define NVME_SUBSYS_H + +#define TYPE_NVME_SUBSYS "nvme-subsys" +#define NVME_SUBSYS(obj) \ + OBJECT_CHECK(NvmeSubsystem, (obj), TYPE_NVME_SUBSYS) + +#define NVME_SUBSYS_MAX_CTRLS 32 + +typedef struct NvmeCtrl NvmeCtrl; +typedef struct NvmeNamespace NvmeNamespace; +typedef struct NvmeSubsystem { + DeviceState parent_obj; + uint8_t subnqn[256]; + + struct { + char *nqn; + } params; +} NvmeSubsystem; + +#endif /* NVME_SUBSYS_H */ diff --git a/hw/block/nvme-subsys.c b/hw/block/nvme-subsys.c new file mode 100644 index 000000000000..840448bb13f1 --- /dev/null +++ b/hw/block/nvme-subsys.c @@ -0,0 +1,70 @@ +/* + * QEMU NVM Express Subsystem: nvme-subsys + * + * Copyright (c) 2021 Minwoo Im + * + * This code is licensed under the GNU GPL v2. Refer COPYING. + */ + +#include "qemu/units.h" +#include "qemu/osdep.h" +#include "qemu/uuid.h" +#include "qemu/iov.h" +#include "qemu/cutils.h" +#include "qapi/error.h" +#include "hw/qdev-properties.h" +#include "hw/qdev-core.h" +#include "hw/block/block.h" +#include "block/aio.h" +#include "block/accounting.h" +#include "sysemu/sysemu.h" +#include "hw/pci/pci.h" +#include "nvme.h" +#include "nvme-subsys.h" + +static void nvme_subsys_setup(NvmeSubsystem *subsys) +{ + const char *nqn =3D subsys->params.nqn ? + subsys->params.nqn : subsys->parent_obj.id; + + snprintf((char *)subsys->subnqn, sizeof(subsys->subnqn), + "nqn.2019-08.org.qemu:%s", nqn); +} + +static void nvme_subsys_realize(DeviceState *dev, Error **errp) +{ + NvmeSubsystem *subsys =3D NVME_SUBSYS(dev); + + nvme_subsys_setup(subsys); +} + +static Property nvme_subsystem_props[] =3D { + DEFINE_PROP_STRING("nqn", NvmeSubsystem, params.nqn), + DEFINE_PROP_END_OF_LIST(), +}; + +static void nvme_subsys_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + + dc->realize =3D nvme_subsys_realize; + dc->desc =3D "Virtual NVMe subsystem"; + + device_class_set_props(dc, nvme_subsystem_props); +} + +static const TypeInfo nvme_subsys_info =3D { + .name =3D TYPE_NVME_SUBSYS, + .parent =3D TYPE_DEVICE, + .class_init =3D nvme_subsys_class_init, + .instance_size =3D sizeof(NvmeSubsystem), +}; + +static void nvme_subsys_register_types(void) +{ + type_register_static(&nvme_subsys_info); +} + +type_init(nvme_subsys_register_types) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index fb83636abdc1..98bd987abccf 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -17,6 +17,7 @@ /** * Usage: add options: * -drive file=3D,if=3Dnone,id=3D + * -device nvme-subsys,id=3D,nqn=3D * -device nvme,serial=3D,id=3D, \ * cmb_size_mb=3D, \ * [pmrdev=3D,] \ @@ -38,6 +39,17 @@ * * The PMR will use BAR 4/5 exclusively. * + * To place controller(s) and namespace(s) to a subsystem, then provide + * nvme-subsys device as above. + * + * nvme subsystem device parameters + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * - `nqn` + * This parameter provides the `` part of the string + * `nqn.2019-08.org.qemu:` which will be reported in the SUBNQN = field + * of subsystem controllers. Note that `` should be unique per + * subsystem, but this is not enforced by QEMU. If not specified, it will + * default to the value of the `id` parameter (``). * * nvme device parameters * ~~~~~~~~~~~~~~~~~~~~~~ diff --git a/hw/block/meson.build b/hw/block/meson.build index 4bf994c64ff9..549282915521 100644 --- a/hw/block/meson.build +++ b/hw/block/meson.build @@ -13,7 +13,7 @@ softmmu_ss.add(when: 'CONFIG_SSI_M25P80', if_true: files(= 'm25p80.c')) softmmu_ss.add(when: 'CONFIG_SWIM', if_true: files('swim.c')) softmmu_ss.add(when: 'CONFIG_XEN', if_true: files('xen-block.c')) softmmu_ss.add(when: 'CONFIG_TC58128', if_true: files('tc58128.c')) -softmmu_ss.add(when: 'CONFIG_NVME_PCI', if_true: files('nvme.c', 'nvme-ns.= c')) +softmmu_ss.add(when: 'CONFIG_NVME_PCI', if_true: files('nvme.c', 'nvme-ns.= c', 'nvme-subsys.c')) =20 specific_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio-blk.c')) specific_ss.add(when: 'CONFIG_VHOST_USER_BLK', if_true: files('vhost-user-= blk.c')) --=20 2.30.1 From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615290616; cv=none; d=zohomail.com; s=zohoarc; b=AVzIlO/buJhmM1yRK8v2JVtFjmGAxYmA8lJW+Lzci/EtBfXgk+Ojk1j+UZFSf7LPVPdaroSCFm/tMgqkICiK1KG2ps+726RBXY2Ouzt2gAy1ief4QMXGcbKPhXqcy2EMIcbqEMkKEjFFVsMUZ+mUoVoUMYDd5Cvwk4eUu6fhPJE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615290616; 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=VGP+Ymo6TFTLk65CJB6MoE1RmI6Gr39/j6r4vBbLqaM=; b=ka0qx9YskaKHUo7c58nabws4QPIsCu9Qls76/QwD187P6sQbzseDkHKM+1zKs6JpaTXYMMEgvvX0Ne3Sm+kMPgIJkPqm1AMLXrSlQtjGn9A17qhTCeHA81JsBKwi8lLFI2GOVShZW7U/2AKExG7h7J7XsAcwMpuQBfVzgiHehnA= 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 1615290616150996.5353113705104; Tue, 9 Mar 2021 03:50:16 -0800 (PST) Received: from localhost ([::1]:59600 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJasQ-000217-Tw for importer@patchew.org; Tue, 09 Mar 2021 06:50:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42702) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanp-0008Ax-Eu; Tue, 09 Mar 2021 06:45:29 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:47239) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanj-0008SW-Qg; Tue, 09 Mar 2021 06:45:29 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id C281C2728; Tue, 9 Mar 2021 06:45:19 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:20 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id E092B240054; Tue, 9 Mar 2021 06:45:17 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=VGP+Ymo6TFTLk 65CJB6MoE1RmI6Gr39/j6r4vBbLqaM=; b=ACUwyhfXMqbdRfLSMevA61dx2ILEh yRWkaNB+SvFcE9jZbveHUSckt2eVhwsu8i+q0EIhEjWS0N2jtt6341EstsvKHdJw CDerEI7uemFu+qlqn9/CRGNTuZe9HnPfF055AT+pTSsIsaD7vrlx75PYClp3Lrp3 xS4d0AKi88kyrx41X105Rz47A2LgxfjQzMEzb89Qc4zZ/yDwibblaY38DSi30+45 siOCnVj1hxZ9NHSBXb1ZzcUdRkODeau8WygczJA+f8pJZgnqDMp3KdPXJK2G+aER fzeiIo78IbU8iiuEhhSfde8Yh4Z41fUUJAsmYqTIMx+Qb5oxavt5/IwQg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=VGP+Ymo6TFTLk65CJB6MoE1RmI6Gr39/j6r4vBbLqaM=; b=dR0svKsZ N40VGqkrNZZEYhJ1csSzlh7RYkON1Yfr64JqQA9945dNppCQQOPmF3chfxiXMMW5 eckcxEOZ3OtCRfUbb163CdcoROiF8ENK6uaySELWHRItw7mYtVz3l9/x5tggxroJ MuCiN+fNPIeCRnt/mAzvYLbiwm33g0MF46DmtjRv2FBiR7BH0CpgJGLDtsXNe64W /g0KeBolg+QSX4DfxNBommOdF/vmFvk3ePgmt+vUvHQyQrjy5FSSGSKh3SwsCmvt h+YHCMI/fbKlc0gBq93B9vogPQqoI9AUqMUB7YZfKpsZZmBsMvFcYqmcYnI6YlHY KHkO7CBkFnxjow== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeltdetfeegkefguedvtdduffejiedvjeejudejieelveekhfekvdefleeludev ffenucffohhmrghinhepvddtudelqddtkedrohhrghenucfkphepkedtrdduieejrdelke drudeltdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhm pehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 02/38] hw/block/nvme: support to map controller to a subsystem Date: Tue, 9 Mar 2021 12:44:36 +0100 Message-Id: <20210309114512.536489-3-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im nvme controller(nvme) can be mapped to a NVMe subsystem(nvme-subsys). This patch maps a controller to a subsystem by adding a parameter 'subsys' to the nvme device. To map a controller to a subsystem, we need to put nvme-subsys first and then maps the subsystem to the controller: -device nvme-subsys,id=3Dsubsys0 -device nvme,serial=3Dfoo,id=3Dnvme0,subsys=3Dsubsys0 If 'subsys' property is not given to the nvme controller, then subsystem NQN will be created with serial (e.g., 'foo' in above example), Otherwise, it will be based on subsys id (e.g., 'subsys0' in above example). Signed-off-by: Minwoo Im Tested-by: Klaus Jensen Reviewed-by: Klaus Jensen Reviewed-by: Keith Busch Signed-off-by: Klaus Jensen --- hw/block/nvme.h | 3 +++ hw/block/nvme.c | 30 +++++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/hw/block/nvme.h b/hw/block/nvme.h index dee6092bd45f..04d4684601fd 100644 --- a/hw/block/nvme.h +++ b/hw/block/nvme.h @@ -2,6 +2,7 @@ #define HW_NVME_H =20 #include "block/nvme.h" +#include "nvme-subsys.h" #include "nvme-ns.h" =20 #define NVME_MAX_NAMESPACES 256 @@ -170,6 +171,8 @@ typedef struct NvmeCtrl { =20 uint8_t zasl; =20 + NvmeSubsystem *subsys; + NvmeNamespace namespace; NvmeNamespace *namespaces[NVME_MAX_NAMESPACES]; NvmeSQueue **sq; diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 98bd987abccf..f5a19fd54676 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -23,7 +23,8 @@ * [pmrdev=3D,] \ * max_ioqpairs=3D, \ * aerl=3D, aer_max_queued=3D, \ - * mdts=3D,zoned.append_size_limit=3D \ + * mdts=3D,zoned.append_size_limit=3D, \ + * subsys=3D * -device nvme-ns,drive=3D,bus=3D,nsid=3D,\ * zoned=3D * @@ -53,6 +54,13 @@ * * nvme device parameters * ~~~~~~~~~~~~~~~~~~~~~~ + * - `subsys` + * Specifying this parameter attaches the controller to the subsystem and + * the SUBNQN field in the controller will report the NQN of the subsyst= em + * device. This also enables multi controller capability represented in + * Identify Controller data structure in CMIC (Controller Multi-path I/O= and + * Namesapce Sharing Capabilities). + * * - `aerl` * The Asynchronous Event Request Limit (AERL). Indicates the maximum nu= mber * of concurrently outstanding Asynchronous Event Request commands suppo= rt @@ -4417,11 +4425,23 @@ static int nvme_init_pci(NvmeCtrl *n, PCIDevice *pc= i_dev, Error **errp) return 0; } =20 +static void nvme_init_subnqn(NvmeCtrl *n) +{ + NvmeSubsystem *subsys =3D n->subsys; + NvmeIdCtrl *id =3D &n->id_ctrl; + + if (!subsys) { + snprintf((char *)id->subnqn, sizeof(id->subnqn), + "nqn.2019-08.org.qemu:%s", n->params.serial); + } else { + pstrcpy((char *)id->subnqn, sizeof(id->subnqn), (char*)subsys->sub= nqn); + } +} + static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pci_dev) { NvmeIdCtrl *id =3D &n->id_ctrl; uint8_t *pci_conf =3D pci_dev->config; - char *subnqn; =20 id->vid =3D cpu_to_le16(pci_get_word(pci_conf + PCI_VENDOR_ID)); id->ssvid =3D cpu_to_le16(pci_get_word(pci_conf + PCI_SUBSYSTEM_VENDOR= _ID)); @@ -4468,9 +4488,7 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pc= i_dev) id->sgls =3D cpu_to_le32(NVME_CTRL_SGLS_SUPPORT_NO_ALIGN | NVME_CTRL_SGLS_BITBUCKET); =20 - subnqn =3D g_strdup_printf("nqn.2019-08.org.qemu:%s", n->params.serial= ); - strpadcpy((char *)id->subnqn, sizeof(id->subnqn), subnqn, '\0'); - g_free(subnqn); + nvme_init_subnqn(n); =20 id->psd[0].mp =3D cpu_to_le16(0x9c4); id->psd[0].enlat =3D cpu_to_le32(0x10); @@ -4562,6 +4580,8 @@ static Property nvme_props[] =3D { DEFINE_BLOCK_PROPERTIES(NvmeCtrl, namespace.blkconf), DEFINE_PROP_LINK("pmrdev", NvmeCtrl, pmr.dev, TYPE_MEMORY_BACKEND, HostMemoryBackend *), + DEFINE_PROP_LINK("subsys", NvmeCtrl, subsys, TYPE_NVME_SUBSYS, + NvmeSubsystem *), DEFINE_PROP_STRING("serial", NvmeCtrl, params.serial), DEFINE_PROP_UINT32("cmb_size_mb", NvmeCtrl, params.cmb_size_mb, 0), DEFINE_PROP_UINT32("num_queues", NvmeCtrl, params.num_queues, 0), --=20 2.30.1 From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615290615; cv=none; d=zohomail.com; s=zohoarc; b=GjpgXwPXXeE0pM0wk2KlEaHJ2QerZc/P3Anfah5ODJXgXXbivaML9TlMqaBsBQCYeIRGVOQZjM6ng8TdPxvMTBhhoGZtuXmXOvttl5VOKsTIZ4jWG311+nv1h+D9PLfEJCzxfI22Kizbqsfy0PjPkXLJBH+G6HeAoEKIF79R/Ys= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615290615; 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=wJM0I9I06P2I0V98zTTlkZleVFhNFr2RGgm0LhmG+sk=; b=PSUQ9sF48meYWngSpL2W4v8oHMxMvQy3KEv5RK/IErMve/Gr+EJGbLpE6T7NpNyY7f6RY/aABeEByqhWnQsLWhGhAhT+xVCh6uAFpBnxzZzGARl9rxCCA9bA4MLZtpbw5Lok5kHOghQY64Y2Z6h+MescPkeLYV/DjWDpiL6VD7U= 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 1615290615199427.18028714505454; Tue, 9 Mar 2021 03:50:15 -0800 (PST) Received: from localhost ([::1]:59570 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJasP-00020V-AE for importer@patchew.org; Tue, 09 Mar 2021 06:50:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42670) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJann-0008A0-R6; Tue, 09 Mar 2021 06:45:27 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:43639) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanj-00004q-SS; Tue, 09 Mar 2021 06:45:27 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 5425E271E; Tue, 9 Mar 2021 06:45:21 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:22 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 7BF0624005D; Tue, 9 Mar 2021 06:45:19 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=wJM0I9I06P2I0 V98zTTlkZleVFhNFr2RGgm0LhmG+sk=; b=HjNZsmSWheKv8RZTYOJN0qW2PEsci SgV1Y295+LrOqJbPHKbAZGvYIiItW4oFViJlGWDC+73m3netYW5byzUxhMvK/Ovz aDvH0FQaNpaXe0oJsLDgnXiCZ9IDrmUKQVTapEprrJMOVq30IUVmEKrHNYtHIuZe xUsmeF3K0ZoX4qFaE59Y0vVPJWZ2BXUyy9yv93/qlab7uu2K7rQFAAjSlr1jrRIt Nh+rDfqxZ5izUrQu546aA1TftlJyTmMb/n9VKFI7cBPMup282A8DX3Nkyu/O6XkP dCFvp5NzhhcICGOi5QTu+sxMmjsRw5O4nNRGfSUmJVm9D9VDLQYb9/qiQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=wJM0I9I06P2I0V98zTTlkZleVFhNFr2RGgm0LhmG+sk=; b=RtxTukoZ nPKbnHAh2f2QwbnoOcoQ97a0VueHdrYAvlrqydvWn8uoLzcQMBj4pR21WQWh2Nth iZQKq86ZwG6j6Tku7Y1+a7ipx4ju40B7Sv0dOXMFj5ocN8opoc6fMGmB4qpXjICI DmRmrkMXMZGAi6ODlQGvT5kPAe8AM1smqvFgFuu3Wl4CRPlrOacsWBT8luvAGQ2q H77ThS+bB2ihFfIs5jJsXPyrjMpH73iXDNq5uFME2jFsr+VkbiHLVdOs3LARRDl1 Ms/1zsuNusLddgL6eUmD9cTMQ1oyTYJUKWyy8r9Pa3wdkIlC/iMJsYULsgjpyXyX TzrLq0hpaZvCcg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedtne curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 03/38] hw/block/nvme: add CMIC enum value for Identify Controller Date: Tue, 9 Mar 2021 12:44:37 +0100 Message-Id: <20210309114512.536489-4-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im Added Controller Multi-path I/O and Namespace Sharing Capabilities (CMIC) field to support multi-controller in the following patches. This field is in Identify Controller data structure in [76]. Signed-off-by: Minwoo Im Tested-by: Klaus Jensen Reviewed-by: Klaus Jensen Reviewed-by: Keith Busch Signed-off-by: Klaus Jensen --- include/block/nvme.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/block/nvme.h b/include/block/nvme.h index 07cfc929368b..f1d3a78658eb 100644 --- a/include/block/nvme.h +++ b/include/block/nvme.h @@ -1034,6 +1034,10 @@ enum NvmeIdCtrlLpa { NVME_LPA_EXTENDED =3D 1 << 2, }; =20 +enum NvmeIdCtrlCmic { + NVME_CMIC_MULTI_CTRL =3D 1 << 1, +}; + #define NVME_CTRL_SQES_MIN(sqes) ((sqes) & 0xf) #define NVME_CTRL_SQES_MAX(sqes) (((sqes) >> 4) & 0xf) #define NVME_CTRL_CQES_MIN(cqes) ((cqes) & 0xf) --=20 2.30.1 From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615291251; cv=none; d=zohomail.com; s=zohoarc; b=KzH79A+f5HWaANYchfQH06GY2ZztjNE28p2t+ODjcmNapqwJ533XkqyfCIYe8UQjZEOXyHceQYwi+3Jz9kyw525tc3vu3WYEszg5ntsqqk28b3mMfeck6IM5/VHbYWH1/2EQP5z945YTfAMkVdM9e16PYQkG4zXIJqb30aswZqQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615291251; 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=C99L0/tH1ohpk9fIFzQAr03WqmfpfPGKb6ktUnvxpTg=; b=IbHAGVQb+aFWFirjjoFszanEpzo/jKm1lT65O1njnvuT3pZPPggEouYkrrVBrO6FGfTPqIMM6Np+JVilb1yfABzX6LdlpEbxlk1/P+eB9QcMMFhHdvBZfPeQL71AkrVOZ5rm/KnhQsTtALswcTN3Exy96VO1ikkfE3rrJdyi/x4= 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 1615291251610923.341074395874; Tue, 9 Mar 2021 04:00:51 -0800 (PST) Received: from localhost ([::1]:49412 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJb2e-0001fX-2f for importer@patchew.org; Tue, 09 Mar 2021 07:00:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42832) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanu-0008HB-Mi; Tue, 09 Mar 2021 06:45:34 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:34501) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanl-00006Q-B0; Tue, 09 Mar 2021 06:45:34 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id C289E275F; Tue, 9 Mar 2021 06:45:22 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:23 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 0E5F3240054; Tue, 9 Mar 2021 06:45:20 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=C99L0/tH1ohpk 9fIFzQAr03WqmfpfPGKb6ktUnvxpTg=; b=LADxGil9XcjUArrIcTtzH+SHtHBJP cqVO9jvAd3vC4CCQM2o+YpFAceKqDLA0mKIU2Neb4n1dTsKHLvh4gAINeFX5q/Sn LBX3o5Vm2hboE9dY22zdtoDukerID1shx/zQOTepaSj1Eza1gR8/w5mshdOyFD6h Balxkl3MCfz1k9ViDlUPHfx9IXqRz76r8QZC5x/Wmz3rIQ7c5YmGB0PenbtPOjpB 3QZshXB0LSGU3PD3610Fo7UeCRWzep4tozh1Z4/CYaCMsiy5XwcwmkhmfHX4rtvW fU9IXZQ5jwJgDiLggMEwPOu7+Opv4bHQY0ueHToxkjWp59g9kMyjpcC9g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=C99L0/tH1ohpk9fIFzQAr03WqmfpfPGKb6ktUnvxpTg=; b=Bpc4pphq 5kX8HBr8rtfaFvZXKYnK5Ad0tlTGYjUBjAyhIUOF8Lo4H3x3XYZ+0NCF1+l653Nt k0CmNWIQ6o2ScGRK6dREjBz3CCL/uAELJbpHrJdkkY4Wr0DCpX06+VMpQqkBX6D7 Vk4RAeXQv34yjq9SnQCqM/YzI53XBYjyH0NVbEzpDZzyTndnjQKb1XJlg2bK1xoL aMo4Dc7tWh1GYv3+/yU+omA0idCZVARCI5ejPd9jrZHD9PmuqvPzXgv32grzVAi9 K+yIuZcEPFDKLqegCS0wnJfnwOwjtS+8NoerMtSFvJ7QQrr8Gt/GwQstnqYjC+lx oU8ZUaCtZ2rbQw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedune curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 04/38] hw/block/nvme: support for multi-controller in subsystem Date: Tue, 9 Mar 2021 12:44:38 +0100 Message-Id: <20210309114512.536489-5-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im We have nvme-subsys and nvme devices mapped together. To support multi-controller scheme to this setup, controller identifier(id) has to be managed. Earlier, cntlid(controller id) used to be always 0 because we didn't have any subsystem scheme that controller id matters. This patch introduced 'cntlid' attribute to the nvme controller instance(NvmeCtrl) and make it allocated by the nvme-subsys device mapped to the controller. If nvme-subsys is not given to the controller, then it will always be 0 as it was. Added 'ctrls' array in the nvme-subsys instance to manage attached controllers to the subsystem with a limit(32). This patch didn't take list for the controllers to make it seamless with nvme-ns device. Signed-off-by: Minwoo Im Tested-by: Klaus Jensen Reviewed-by: Klaus Jensen Reviewed-by: Keith Busch Signed-off-by: Klaus Jensen --- hw/block/nvme-subsys.h | 4 ++++ hw/block/nvme.h | 1 + hw/block/nvme-subsys.c | 21 +++++++++++++++++++++ hw/block/nvme.c | 29 +++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+) diff --git a/hw/block/nvme-subsys.h b/hw/block/nvme-subsys.h index fc86d01ff32e..55411eccfb54 100644 --- a/hw/block/nvme-subsys.h +++ b/hw/block/nvme-subsys.h @@ -21,9 +21,13 @@ typedef struct NvmeSubsystem { DeviceState parent_obj; uint8_t subnqn[256]; =20 + NvmeCtrl *ctrls[NVME_SUBSYS_MAX_CTRLS]; + struct { char *nqn; } params; } NvmeSubsystem; =20 +int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp); + #endif /* NVME_SUBSYS_H */ diff --git a/hw/block/nvme.h b/hw/block/nvme.h index 04d4684601fd..b8f5f2d6ffb8 100644 --- a/hw/block/nvme.h +++ b/hw/block/nvme.h @@ -134,6 +134,7 @@ typedef struct NvmeCtrl { NvmeBus bus; BlockConf conf; =20 + uint16_t cntlid; bool qs_created; uint32_t page_size; uint16_t page_bits; diff --git a/hw/block/nvme-subsys.c b/hw/block/nvme-subsys.c index 840448bb13f1..283a97b79d57 100644 --- a/hw/block/nvme-subsys.c +++ b/hw/block/nvme-subsys.c @@ -22,6 +22,27 @@ #include "nvme.h" #include "nvme-subsys.h" =20 +int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp) +{ + NvmeSubsystem *subsys =3D n->subsys; + int cntlid; + + for (cntlid =3D 0; cntlid < ARRAY_SIZE(subsys->ctrls); cntlid++) { + if (!subsys->ctrls[cntlid]) { + break; + } + } + + if (cntlid =3D=3D ARRAY_SIZE(subsys->ctrls)) { + error_setg(errp, "no more free controller id"); + return -1; + } + + subsys->ctrls[cntlid] =3D n; + + return cntlid; +} + static void nvme_subsys_setup(NvmeSubsystem *subsys) { const char *nqn =3D subsys->params.nqn ? diff --git a/hw/block/nvme.c b/hw/block/nvme.c index f5a19fd54676..5a63c356bad9 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -4448,6 +4448,9 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pc= i_dev) strpadcpy((char *)id->mn, sizeof(id->mn), "QEMU NVMe Ctrl", ' '); strpadcpy((char *)id->fr, sizeof(id->fr), "1.0", ' '); strpadcpy((char *)id->sn, sizeof(id->sn), n->params.serial, ' '); + + id->cntlid =3D cpu_to_le16(n->cntlid); + id->rab =3D 6; id->ieee[0] =3D 0x00; id->ieee[1] =3D 0x02; @@ -4494,6 +4497,10 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *p= ci_dev) id->psd[0].enlat =3D cpu_to_le32(0x10); id->psd[0].exlat =3D cpu_to_le32(0x4); =20 + if (n->subsys) { + id->cmic |=3D NVME_CMIC_MULTI_CTRL; + } + NVME_CAP_SET_MQES(n->bar.cap, 0x7ff); NVME_CAP_SET_CQR(n->bar.cap, 1); NVME_CAP_SET_TO(n->bar.cap, 0xf); @@ -4508,6 +4515,24 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *p= ci_dev) n->bar.intmc =3D n->bar.intms =3D 0; } =20 +static int nvme_init_subsys(NvmeCtrl *n, Error **errp) +{ + int cntlid; + + if (!n->subsys) { + return 0; + } + + cntlid =3D nvme_subsys_register_ctrl(n, errp); + if (cntlid < 0) { + return -1; + } + + n->cntlid =3D cntlid; + + return 0; +} + static void nvme_realize(PCIDevice *pci_dev, Error **errp) { NvmeCtrl *n =3D NVME(pci_dev); @@ -4528,6 +4553,10 @@ static void nvme_realize(PCIDevice *pci_dev, Error *= *errp) return; } =20 + if (nvme_init_subsys(n, errp)) { + error_propagate(errp, local_err); + return; + } nvme_init_ctrl(n, pci_dev); =20 /* setup a namespace if the controller drive property was given */ --=20 2.30.1 From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615291268; cv=none; d=zohomail.com; s=zohoarc; b=LFK/UstdidY3FEh47MgXQFODE803bA+rPdNO1JPiV13lc1d3fbYfP+TU0gcPqHHXQU0O13DE2U2ZqT5aDLqBeJGAQ/GjxchwlD55XwFc3+W1Ziw+Qe49Je9qpb3Y5OtsuRMN6rJoYRpCJ479qt5fCn2j6QnF98vTpuXHwMbF2Co= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615291268; 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=ttCMfODAjtfaqTggQvOlkBJKw2ToMEl9DHUWKQ7EMUs=; b=ipcagyS5rhMa+OLw5j928w/FDKsPcE0qjLYz6rOk/GGzsYyA/HhDPbWQG2bDghz2ludqjCY2ixdDq7aQbE2uXHApOnWYQ3DJgFzEWVEIGLecqLSDbNAcNrYs3YMqrQ4kSDiXa0An51YAoIJ4zNjbhpWPbyoARlNnu+V7xQ5byV8= 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 1615291268868575.7042777856137; Tue, 9 Mar 2021 04:01:08 -0800 (PST) Received: from localhost ([::1]:50034 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJb2x-0001wI-7s for importer@patchew.org; Tue, 09 Mar 2021 07:01:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42728) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanq-0008CH-Q1; Tue, 09 Mar 2021 06:45:30 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:58169) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJann-00008n-Tp; Tue, 09 Mar 2021 06:45:30 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 697E1261C; Tue, 9 Mar 2021 06:45:24 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:25 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 93973240057; Tue, 9 Mar 2021 06:45:22 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=ttCMfODAjtfaq TggQvOlkBJKw2ToMEl9DHUWKQ7EMUs=; b=0E35OnyY7ucLaId+m3kO8m9if1n9P Osv5+LpfAB+DaMxq8SgRy+Da/S9pFgFiscv7K0j/7BzCN0/zWuzjVHWwRO6KvLjb tV6vegfd6uEcekE61XGMcev+Sk6m7OgiX5jjf0s/fIlCzRSIAqt0BfWLNqSPh9Ab JbkrLfGcIvpTMcABMsDtfWX4YFTipdvEW/Ckh9WP9TZfvMJcqG2qS+aQUygWXzAK 8YXo4d5ezK3oaX5+MqTgQIdKduLN2tUwmyGo8wemxHGI129JyHqiP5kbVvKtL5fV bBX280HerogjHkTcFl4aKbWG3Cvv+AIkjJsAMiruhKZV3gkT8Mvas8y2A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=ttCMfODAjtfaqTggQvOlkBJKw2ToMEl9DHUWKQ7EMUs=; b=WYkYAEkE ILJ511aR6YrU4TzJbcnAk+tlGSOQK+CVx0tMvzReeMNrfwtZ7JpwDqLsEJsUofLQ MyAZYUPZFusuehsARuB7NJz7vn5BmL6A/cqx2Xw3eRQgkcgd/YRK1476FQP4GNFh mHLEoyNLsi5YCk1E9eJKfa5ownocTtYsS8g++JIyw4sUqB5j50nVj5PpFXISSjRZ 1b4bhYtH9zoUDkljzaO36VWIzXi+RhAAAq5M4++Ms7exH8PH1lb0IZYzQrmoh71H VD1r8ZStddmvFYVM4uXg0Cda09QtrYpVCaTMCeJuB5XR7waHoz6kTfGA6zg04hQO 3sWWfCY+QrZo9A== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedune curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 05/38] hw/block/nvme: add NMIC enum value for Identify Namespace Date: Tue, 9 Mar 2021 12:44:39 +0100 Message-Id: <20210309114512.536489-6-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im Added Namespace Multi-path I/O and Namespace Sharing Capabilities (NMIC) field to support shared namespace from controller(s). This field is in Identify Namespace data structure in [30]. Signed-off-by: Minwoo Im Tested-by: Klaus Jensen Reviewed-by: Klaus Jensen Reviewed-by: Keith Busch Signed-off-by: Klaus Jensen --- include/block/nvme.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/block/nvme.h b/include/block/nvme.h index f1d3a78658eb..3db2b9b4cba7 100644 --- a/include/block/nvme.h +++ b/include/block/nvme.h @@ -1203,6 +1203,10 @@ enum NvmeNsIdentifierType { NVME_NIDT_CSI =3D 0x04, }; =20 +enum NvmeIdNsNmic { + NVME_NMIC_NS_SHARED =3D 1 << 0, +}; + enum NvmeCsi { NVME_CSI_NVM =3D 0x00, NVME_CSI_ZONED =3D 0x02, --=20 2.30.1 From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615290633; cv=none; d=zohomail.com; s=zohoarc; b=E9JdQn9x6/ZUl9fCmDs7fp7DHD1lPE76KGpdmWgTflDJB4zoX1Eb6ARoFM19DwJMjBoQ+WeOQ5jMfFi65MLrQhRG/xRDl6xSDHQl7Utuid2rOmn8UOfYT0qph1ZDIkLEFko0EFVnGNrklT6SESGlgL/hZ5WkkVM/6pFuqU4mvUs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615290633; 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=HBjAbbki0TFvv3l9/qiRME3glikCuCfVbb54Gj9LNEs=; b=Q0frfnKXRMMdDWjyKqQj2tkAsInDvX8z4/KmGeBpC3V3J/gQaoeEYjAR+kNpFQejcD9t3yRxTVhDtoUBPbAYrdkfN+aig0hm6/DKmb2Q6qnt8Q3yOyxIvbETt+OTLXpwfwUpYwArBl65B95zmw1CF+bAlj1gSRS8k7t/C5ZqRf0= 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 1615290633646290.65434681085344; Tue, 9 Mar 2021 03:50:33 -0800 (PST) Received: from localhost ([::1]:60248 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJasi-0002Ib-CO for importer@patchew.org; Tue, 09 Mar 2021 06:50:32 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42798) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJant-0008Fd-5c; Tue, 09 Mar 2021 06:45:33 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:46157) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanp-00009d-37; Tue, 09 Mar 2021 06:45:32 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 34C3D2773; Tue, 9 Mar 2021 06:45:26 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:26 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 2967E240054; Tue, 9 Mar 2021 06:45:24 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=HBjAbbki0TFvv 3l9/qiRME3glikCuCfVbb54Gj9LNEs=; b=JCrnSDi9jJrHU+KGArljV6Lk8Tfdq lkQf4vlTwdqrJPdlrnkC6HnoA4uG0TPA3B/NpjiIV6BAhWkdl0ewSr2UYlzWkmJv bn6i7UwABiClOAXWXnLQoWf5U1shZxR8Jwf5Oa2x4XaPWsNhU+rom1egXiQxZL1N 3CNf47OkOr2J8HJh1fiu1SwlWYvla/aa/oVOF/9HPD/ZF45hLE7O5mkuUk1KS0vV OnXfihg8KwyWXH10pihrFCqamcJEU/yI2M4UPIXceF68O/HyvGZ6QcAKUNc/8Yu+ 7vNs6NlRPQskyhvwCgoDmiIDuGXpn9pfdgu2qJBlfNoVp19pHZLYkFYeQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=HBjAbbki0TFvv3l9/qiRME3glikCuCfVbb54Gj9LNEs=; b=naHYk/wO 8/6ulL+zwnzf7GCpnyH46qfd4zLZxq5ytclCaHWKMp11AfkUTtcqClz2c7HYlfcl 6UtmgpasY9f8cSR2ft8L27JAc0/lYVEpXVhtawnVL6Fw6PTyFaPfqnBKrLk7DaAz AO+N1xuteafiqc0c3QLthxBULLGTu07rAD9ft6iXCJ/mNxkFfVOtTXMdHX6fv7fb tLSnBKCLbh8JVq90Si6A0T3cOlnjYkJLCZ6ifo8ZrgZn/Lcb3SfhJP9CqXRo0Kg/ AAkcsjgHfpC8nNZgrrfBJc10LPAYnVEL4gvouFwZgugqJHPcp2zLrEmhhtoy/jh9 RbteGSdTXcqkYA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedune curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 06/38] hw/block/nvme: support for shared namespace in subsystem Date: Tue, 9 Mar 2021 12:44:40 +0100 Message-Id: <20210309114512.536489-7-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im nvme-ns device is registered to a nvme controller device during the initialization in nvme_register_namespace() in case that 'bus' property is given which means it's mapped to a single controller. This patch introduced a new property 'subsys' just like the controller device instance did to map a namespace to a NVMe subsystem. If 'subsys' property is given to the nvme-ns device, it will belong to the specified subsystem and will be attached to all controllers in that subsystem by enabling shared namespace capability in NMIC(Namespace Multi-path I/O and Namespace Capabilities) in Identify Namespace. Usage: -device nvme-subsys,id=3Dsubsys0 -device nvme,serial=3Dfoo,id=3Dnvme0,subsys=3Dsubsys0 -device nvme,serial=3Dbar,id=3Dnvme1,subsys=3Dsubsys0 -device nvme,serial=3Dbaz,id=3Dnvme2,subsys=3Dsubsys0 -device nvme-ns,id=3Dns1,drive=3D,nsid=3D1,subsys=3Dsubsys0 # Shared -device nvme-ns,id=3Dns2,drive=3D,nsid=3D2,bus=3Dnvme2 # Non-s= hared In the above example, 'ns1' will be shared to 'nvme0' and 'nvme1' in the same subsystem. On the other hand, 'ns2' will be attached to the 'nvme2' only as a private namespace in that subsystem. All the namespace with 'subsys' parameter will attach all controllers in the subsystem to the namespace by default. Signed-off-by: Minwoo Im Tested-by: Klaus Jensen Reviewed-by: Klaus Jensen Reviewed-by: Keith Busch Signed-off-by: Klaus Jensen --- hw/block/nvme-ns.h | 7 +++++++ hw/block/nvme-subsys.h | 3 +++ hw/block/nvme-ns.c | 17 ++++++++++++++--- hw/block/nvme-subsys.c | 25 +++++++++++++++++++++++++ hw/block/nvme.c | 10 +++++++++- 5 files changed, 58 insertions(+), 4 deletions(-) diff --git a/hw/block/nvme-ns.h b/hw/block/nvme-ns.h index 293ac990e3f6..929e78861903 100644 --- a/hw/block/nvme-ns.h +++ b/hw/block/nvme-ns.h @@ -47,6 +47,8 @@ typedef struct NvmeNamespace { const uint32_t *iocs; uint8_t csi; =20 + NvmeSubsystem *subsys; + NvmeIdNsZoned *id_ns_zoned; NvmeZone *zone_array; QTAILQ_HEAD(, NvmeZone) exp_open_zones; @@ -77,6 +79,11 @@ static inline uint32_t nvme_nsid(NvmeNamespace *ns) return -1; } =20 +static inline bool nvme_ns_shared(NvmeNamespace *ns) +{ + return !!ns->subsys; +} + static inline NvmeLBAF *nvme_ns_lbaf(NvmeNamespace *ns) { NvmeIdNs *id_ns =3D &ns->id_ns; diff --git a/hw/block/nvme-subsys.h b/hw/block/nvme-subsys.h index 55411eccfb54..7a54a8512079 100644 --- a/hw/block/nvme-subsys.h +++ b/hw/block/nvme-subsys.h @@ -14,6 +14,7 @@ OBJECT_CHECK(NvmeSubsystem, (obj), TYPE_NVME_SUBSYS) =20 #define NVME_SUBSYS_MAX_CTRLS 32 +#define NVME_SUBSYS_MAX_NAMESPACES 32 =20 typedef struct NvmeCtrl NvmeCtrl; typedef struct NvmeNamespace NvmeNamespace; @@ -22,6 +23,7 @@ typedef struct NvmeSubsystem { uint8_t subnqn[256]; =20 NvmeCtrl *ctrls[NVME_SUBSYS_MAX_CTRLS]; + NvmeNamespace *namespaces[NVME_SUBSYS_MAX_NAMESPACES]; =20 struct { char *nqn; @@ -29,5 +31,6 @@ typedef struct NvmeSubsystem { } NvmeSubsystem; =20 int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp); +int nvme_subsys_register_ns(NvmeNamespace *ns, Error **errp); =20 #endif /* NVME_SUBSYS_H */ diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c index 93ac6e107a09..64b6a491adc3 100644 --- a/hw/block/nvme-ns.c +++ b/hw/block/nvme-ns.c @@ -63,6 +63,10 @@ static int nvme_ns_init(NvmeNamespace *ns, Error **errp) =20 id_ns->npda =3D id_ns->npdg =3D npdg - 1; =20 + if (nvme_ns_shared(ns)) { + id_ns->nmic |=3D NVME_NMIC_NS_SHARED; + } + return 0; } =20 @@ -363,14 +367,21 @@ static void nvme_ns_realize(DeviceState *dev, Error *= *errp) return; } =20 - if (nvme_register_namespace(n, ns, errp)) { - return; + if (ns->subsys) { + if (nvme_subsys_register_ns(ns, errp)) { + return; + } + } else { + if (nvme_register_namespace(n, ns, errp)) { + return; + } } - } =20 static Property nvme_ns_props[] =3D { DEFINE_BLOCK_PROPERTIES(NvmeNamespace, blkconf), + DEFINE_PROP_LINK("subsys", NvmeNamespace, subsys, TYPE_NVME_SUBSYS, + NvmeSubsystem *), DEFINE_PROP_UINT32("nsid", NvmeNamespace, params.nsid, 0), DEFINE_PROP_UUID("uuid", NvmeNamespace, params.uuid), DEFINE_PROP_BOOL("zoned", NvmeNamespace, params.zoned, false), diff --git a/hw/block/nvme-subsys.c b/hw/block/nvme-subsys.c index 283a97b79d57..af4804a819ee 100644 --- a/hw/block/nvme-subsys.c +++ b/hw/block/nvme-subsys.c @@ -43,6 +43,31 @@ int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp) return cntlid; } =20 +int nvme_subsys_register_ns(NvmeNamespace *ns, Error **errp) +{ + NvmeSubsystem *subsys =3D ns->subsys; + NvmeCtrl *n; + int i; + + if (subsys->namespaces[nvme_nsid(ns)]) { + error_setg(errp, "namespace %d already registerd to subsy %s", + nvme_nsid(ns), subsys->parent_obj.id); + return -1; + } + + subsys->namespaces[nvme_nsid(ns)] =3D ns; + + for (i =3D 0; i < ARRAY_SIZE(subsys->ctrls); i++) { + n =3D subsys->ctrls[i]; + + if (n && nvme_register_namespace(n, ns, errp)) { + return -1; + } + } + + return 0; +} + static void nvme_subsys_setup(NvmeSubsystem *subsys) { const char *nqn =3D subsys->params.nqn ? diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 5a63c356bad9..5e0819fd9e1c 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -26,7 +26,8 @@ * mdts=3D,zoned.append_size_limit=3D, \ * subsys=3D * -device nvme-ns,drive=3D,bus=3D,nsid=3D,\ - * zoned=3D + * zoned=3D, \ + * subsys=3D * * Note cmb_size_mb denotes size of CMB in MB. CMB is assumed to be at * offset 0 in BAR2 and supports only WDS, RDS and SQS for now. By default= , the @@ -79,6 +80,13 @@ * data size being in effect. By setting this property to 0, users can m= ake * ZASL to be equal to MDTS. This property only affects zoned namespaces. * + * nvme namespace device parameters + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * - `subsys` + * If given, the namespace will be attached to all controllers in the + * subsystem. Otherwise, `bus` must be given to attach this namespace to= a + * specific controller as a non-shared namespace. + * * Setting `zoned` to true selects Zoned Command Set at the namespace. * In this case, the following namespace properties are available to confi= gure * zoned operation: --=20 2.30.1 From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615290885; cv=none; d=zohomail.com; s=zohoarc; b=JD0EYOB03JZLaL5Y6qe7Zqyy4kl/+qMnFXQep/hc92YS2UAO46Ckh9tHoORpzW11JsvzurCex7h9sgqisOSCZUt5XJ+DPMiSWAYRiiUN2BYWmHPsQe2SHNpK0dyXzH3kqJIbUzPlOV1KC0rqUTaLFxGJtccexqeJIlY4ima+eUo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615290885; 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=aD7tbJ13aGF02plNhmaWmpogNiaV4bd/sKf8glQkBzs=; b=YuWe3NsOciizmZjloHVWPIxdXR45HHULLsH/YBkfjKlUAC07Mj9a/+lJ9WYchTav0pIqWeTOAPI/w5a2SrB/bvRuF43zrcHH0AEFhVCRadxHvJ9C3LlrlHZfbx5eAdc4nq72emhBmbyj9FByCeNFOORLeAejmNRX091ZunafcCs= 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 1615290885815363.5655568254907; Tue, 9 Mar 2021 03:54:45 -0800 (PST) Received: from localhost ([::1]:39972 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJawm-0005oA-GE for importer@patchew.org; Tue, 09 Mar 2021 06:54:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42772) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJans-0008EF-9y; Tue, 09 Mar 2021 06:45:32 -0500 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:54881) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanp-0000An-P3; Tue, 09 Mar 2021 06:45:32 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 9C8E12785; Tue, 9 Mar 2021 06:45:27 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:28 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id E2708240057; Tue, 9 Mar 2021 06:45:25 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=aD7tbJ13aGF02 plNhmaWmpogNiaV4bd/sKf8glQkBzs=; b=M0KJ2nyBrkXbZjtSZRatT3KD3O2RB l7OYwShk0ggFyiNnTo/nGa+8cVc4bWhFuOsTiJUvJNhBCer9aPsU5ihDpRycL+Gi Jku5vTwL33d2GndTNpPh1IFq8a1e2jme+9GK8+fKg+g1BjlGlhxGjVAszVRimvlf c0biWWtWoOz70WLxmpgVhzYqVu1H7i1esGtUZevAVVOGIPCv4GztqdO/UVJOPvGf KlRU301rWgnNk0hY4HG2zbYBMTj0RdW7eOyf7O4NSX6G2DLp8+peQcE8QZP4H1j0 QawIlA3c7kJ2Eys4Z7HQIwnk+VbuL51gYu2+31HaPJzPh1jC1SC8/h6jg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=aD7tbJ13aGF02plNhmaWmpogNiaV4bd/sKf8glQkBzs=; b=D898FgEs r4UNI4qkMq2mlsFtQzplnhCSCir90xCzwG+lUGPAi86pfIhPpW35vn5Dfh8+61W5 ABsxkalHda++VW99S/SSLwGuPRMh9dd9++C252SRzXYz+IfJHcl7zcVd6CyRDnwR mw2hjRrtuAssSJIZbE/t/pT3/SR/xET5Z3rpCIrt05L1y6ZLj7OCwB7qi5QF0YCT tbasp4KFSnj4tlRoqLtNYhPib9Y5m9sXQpoCxF7x7jftguHQ0mprN6A6ui4yezUU /wmT64qDIWuSfD+jKi4EcGYC77F8lGl4Crdg8liiN6DIPwmG5xXEiAUMHfxBj9oK QiwkF5128OeXzA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedune curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 07/38] hw/block/nvme: remove unused parameter in check zone write Date: Tue, 9 Mar 2021 12:44:41 +0100 Message-Id: <20210309114512.536489-8-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.25; envelope-from=its@irrelevant.dk; helo=wout2-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen Remove the unused NvmeCtrl parameter in nvme_check_zone_write. Signed-off-by: Klaus Jensen Reviewed-by: Keith Busch --- hw/block/nvme.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 5e0819fd9e1c..f39be1961e04 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1213,9 +1213,8 @@ static uint16_t nvme_check_zone_state_for_write(NvmeZ= one *zone) return NVME_INTERNAL_DEV_ERROR; } =20 -static uint16_t nvme_check_zone_write(NvmeCtrl *n, NvmeNamespace *ns, - NvmeZone *zone, uint64_t slba, - uint32_t nlb) +static uint16_t nvme_check_zone_write(NvmeNamespace *ns, NvmeZone *zone, + uint64_t slba, uint32_t nlb) { uint64_t zcap =3D nvme_zone_wr_boundary(zone); uint16_t status; @@ -1778,7 +1777,7 @@ static uint16_t nvme_do_write(NvmeCtrl *n, NvmeReques= t *req, bool append, res->slba =3D cpu_to_le64(slba); } =20 - status =3D nvme_check_zone_write(n, ns, zone, slba, nlb); + status =3D nvme_check_zone_write(ns, zone, slba, nlb); if (status) { goto invalid; } --=20 2.30.1 From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615290922; cv=none; d=zohomail.com; s=zohoarc; b=GalmdTs/xjsraPto1WpuzZaES4rkGDwyTsRRhQtm7OQSKuy/nuCfWoIBdn2DRHY6ys5msOs4K0csBRO+TLpMLby6Bi+wLYcxCw6QX3mpq75/UrfdQ4bXJH0e2tAUFSy5SfEuhj36b1+yiLwEBKWiXgF5xhpTz1yQfRXI1gGwstM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615290922; 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=VPe5sHsPPOJzSwPbwz3cH2Q6hptoAZSww7aXtvF6un0=; b=R/oLOQIUncJga9ltCuw+1dGYCN5eWzkUBMDp5nrfTqXurWNU5R0AUuGYb4tO35xGkmhZutDVh6LQYa36M55xjhMYNL9MdG62hsbnSgrNvySSnneHTXFgml5tAbsbnQwQm8ae5mp26NV9WF4Bvt3G1nO848d6W/R3eUVCh8A3yCE= 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 1615290922030763.0615843581867; Tue, 9 Mar 2021 03:55:22 -0800 (PST) Received: from localhost ([::1]:40738 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJaxM-0006Be-EC for importer@patchew.org; Tue, 09 Mar 2021 06:55:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42822) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanu-0008Ge-1v; Tue, 09 Mar 2021 06:45:34 -0500 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:34489) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanr-0000Cj-4d; Tue, 09 Mar 2021 06:45:33 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 07C9D2768; Tue, 9 Mar 2021 06:45:28 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:29 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 59825240054; Tue, 9 Mar 2021 06:45:27 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=VPe5sHsPPOJzS wPbwz3cH2Q6hptoAZSww7aXtvF6un0=; b=rMJTK114YS/YwpxiEXo3NTqR/UzRL u75K0J+32mfr6BSzPeHTDY2r6+EKDL18QociWzWs/Ztd1nkc8Cfk+1pfRsrVEzQM aZoaWS9bK/JW7cqjPdy93KtUQE55NZFvsx5XYhILIRb/lPYK1Nnw44A89nvqRK2W YDh9WH946o35fO7WGlkd5+DpewNnrycXlHgu44WC232c4RO3FWlpauzLSfWy3Q1k pv0rX+/6SUYH7DB6B30zrKj6AgWk6552zLIWxn4gVLrj2CDN4uXnUzmhYcLDphGY lh/IwBTUjXMYPxB0Izy3EI2aDda1ZtOZZ23xFfdcNN7XbKNBpb3jl+cSA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=VPe5sHsPPOJzSwPbwz3cH2Q6hptoAZSww7aXtvF6un0=; b=c9ZZMRpI QFkQei1NfsXGO9a8OIblPnikziAMtDyULRmfH8/2l1iMK5sAs537EYo2rUp6HOHm a73b9htQL6nxyv8u/iarN13VIHN87ZB0jcoa3huat8Y3Jtte2HdiratXewSEukC3 hhu92luRQ6WJJdDMqCoWIKCh/soy824K/kwYuYpHcsPFFr+EG0GVU6fF4piU8aq0 FOPlHUBJSe9ggJznbHyiE/Q5DBjRqNYQb75m8W0QSxA965HLIoxFrLM+paH0yNQk pqs0IPJMkcCW67XQ1GwlcdYdzw7FrambN8Frzv7fKfjwV/cmpi0O8wgErjX7fuBi y3b5B/MyGxFD0Q== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeehne curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 08/38] hw/block/nvme: refactor zone resource management Date: Tue, 9 Mar 2021 12:44:42 +0100 Message-Id: <20210309114512.536489-9-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.25; envelope-from=its@irrelevant.dk; helo=wout2-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen Zone transition handling and resource management is open coded (and semi-duplicated in the case of open, close and finish). In preparation for Simple Copy command support (which also needs to open zones for writing), consolidate into a set of 'nvme_zrm' functions and in the process fix a bug with the controller not closing an open zone to allow another zone to be explicitly opened. Signed-off-by: Klaus Jensen Reviewed-by: Keith Busch --- hw/block/nvme.c | 220 +++++++++++++++++++++++------------------------- 1 file changed, 103 insertions(+), 117 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index f39be1961e04..7897390b6d74 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1292,7 +1292,46 @@ static uint16_t nvme_check_zone_read(NvmeNamespace *= ns, uint64_t slba, return status; } =20 -static void nvme_auto_transition_zone(NvmeNamespace *ns) +static uint16_t nvme_zrm_finish(NvmeNamespace *ns, NvmeZone *zone) +{ + switch (nvme_get_zone_state(zone)) { + case NVME_ZONE_STATE_FULL: + return NVME_SUCCESS; + + case NVME_ZONE_STATE_IMPLICITLY_OPEN: + case NVME_ZONE_STATE_EXPLICITLY_OPEN: + nvme_aor_dec_open(ns); + /* fallthrough */ + case NVME_ZONE_STATE_CLOSED: + nvme_aor_dec_active(ns); + /* fallthrough */ + case NVME_ZONE_STATE_EMPTY: + nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_FULL); + return NVME_SUCCESS; + + default: + return NVME_ZONE_INVAL_TRANSITION; + } +} + +static uint16_t nvme_zrm_close(NvmeNamespace *ns, NvmeZone *zone) +{ + switch (nvme_get_zone_state(zone)) { + case NVME_ZONE_STATE_CLOSED: + return NVME_SUCCESS; + + case NVME_ZONE_STATE_EXPLICITLY_OPEN: + case NVME_ZONE_STATE_IMPLICITLY_OPEN: + nvme_aor_dec_open(ns); + nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_CLOSED); + /* fall through */ + + default: + return NVME_ZONE_INVAL_TRANSITION; + } +} + +static void nvme_zrm_auto_transition_zone(NvmeNamespace *ns) { NvmeZone *zone; =20 @@ -1304,34 +1343,74 @@ static void nvme_auto_transition_zone(NvmeNamespace= *ns) * Automatically close this implicitly open zone. */ QTAILQ_REMOVE(&ns->imp_open_zones, zone, entry); - nvme_aor_dec_open(ns); - nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_CLOSED); + nvme_zrm_close(ns, zone); } } } =20 -static uint16_t nvme_auto_open_zone(NvmeNamespace *ns, NvmeZone *zone) +static uint16_t __nvme_zrm_open(NvmeNamespace *ns, NvmeZone *zone, + bool implicit) { - uint16_t status =3D NVME_SUCCESS; - uint8_t zs =3D nvme_get_zone_state(zone); + int act =3D 0; + uint16_t status; =20 - if (zs =3D=3D NVME_ZONE_STATE_EMPTY) { - nvme_auto_transition_zone(ns); - status =3D nvme_aor_check(ns, 1, 1); - } else if (zs =3D=3D NVME_ZONE_STATE_CLOSED) { - nvme_auto_transition_zone(ns); - status =3D nvme_aor_check(ns, 0, 1); + switch (nvme_get_zone_state(zone)) { + case NVME_ZONE_STATE_EMPTY: + act =3D 1; + + /* fallthrough */ + + case NVME_ZONE_STATE_CLOSED: + nvme_zrm_auto_transition_zone(ns); + status =3D nvme_aor_check(ns, act, 1); + if (status) { + return status; + } + + if (act) { + nvme_aor_inc_active(ns); + } + + nvme_aor_inc_open(ns); + + if (implicit) { + nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_IMPLICITLY_OP= EN); + return NVME_SUCCESS; + } + + /* fallthrough */ + + case NVME_ZONE_STATE_IMPLICITLY_OPEN: + if (implicit) { + return NVME_SUCCESS; + } + + nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_EXPLICITLY_OPEN); + + /* fallthrough */ + + case NVME_ZONE_STATE_EXPLICITLY_OPEN: + return NVME_SUCCESS; + + default: + return NVME_ZONE_INVAL_TRANSITION; } - - return status; } =20 -static void nvme_finalize_zoned_write(NvmeNamespace *ns, NvmeRequest *req, - bool failed) +static inline uint16_t nvme_zrm_auto(NvmeNamespace *ns, NvmeZone *zone) +{ + return __nvme_zrm_open(ns, zone, true); +} + +static inline uint16_t nvme_zrm_open(NvmeNamespace *ns, NvmeZone *zone) +{ + return __nvme_zrm_open(ns, zone, false); +} + +static void nvme_finalize_zoned_write(NvmeNamespace *ns, NvmeRequest *req) { NvmeRwCmd *rw =3D (NvmeRwCmd *)&req->cmd; NvmeZone *zone; - NvmeZonedResult *res =3D (NvmeZonedResult *)&req->cqe; uint64_t slba; uint32_t nlb; =20 @@ -1341,47 +1420,8 @@ static void nvme_finalize_zoned_write(NvmeNamespace = *ns, NvmeRequest *req, =20 zone->d.wp +=3D nlb; =20 - if (failed) { - res->slba =3D 0; - } - if (zone->d.wp =3D=3D nvme_zone_wr_boundary(zone)) { - switch (nvme_get_zone_state(zone)) { - case NVME_ZONE_STATE_IMPLICITLY_OPEN: - case NVME_ZONE_STATE_EXPLICITLY_OPEN: - nvme_aor_dec_open(ns); - /* fall through */ - case NVME_ZONE_STATE_CLOSED: - nvme_aor_dec_active(ns); - /* fall through */ - case NVME_ZONE_STATE_EMPTY: - nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_FULL); - /* fall through */ - case NVME_ZONE_STATE_FULL: - break; - default: - assert(false); - } - } -} - -static void nvme_advance_zone_wp(NvmeNamespace *ns, NvmeZone *zone, - uint32_t nlb) -{ - uint8_t zs; - - zone->w_ptr +=3D nlb; - - if (zone->w_ptr < nvme_zone_wr_boundary(zone)) { - zs =3D nvme_get_zone_state(zone); - switch (zs) { - case NVME_ZONE_STATE_EMPTY: - nvme_aor_inc_active(ns); - /* fall through */ - case NVME_ZONE_STATE_CLOSED: - nvme_aor_inc_open(ns); - nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_IMPLICITLY_OP= EN); - } + nvme_zrm_finish(ns, zone); } } =20 @@ -1406,7 +1446,7 @@ static void nvme_rw_cb(void *opaque, int ret) trace_pci_nvme_rw_cb(nvme_cid(req), blk_name(blk)); =20 if (ns->params.zoned && nvme_is_write(req)) { - nvme_finalize_zoned_write(ns, req, ret !=3D 0); + nvme_finalize_zoned_write(ns, req); } =20 if (!ret) { @@ -1782,12 +1822,12 @@ static uint16_t nvme_do_write(NvmeCtrl *n, NvmeRequ= est *req, bool append, goto invalid; } =20 - status =3D nvme_auto_open_zone(ns, zone); + status =3D nvme_zrm_auto(ns, zone); if (status) { goto invalid; } =20 - nvme_advance_zone_wp(ns, zone, nlb); + zone->w_ptr +=3D nlb; } =20 data_offset =3D nvme_l2b(ns, slba); @@ -1873,73 +1913,19 @@ enum NvmeZoneProcessingMask { static uint16_t nvme_open_zone(NvmeNamespace *ns, NvmeZone *zone, NvmeZoneState state, NvmeRequest *req) { - uint16_t status; - - switch (state) { - case NVME_ZONE_STATE_EMPTY: - status =3D nvme_aor_check(ns, 1, 0); - if (status) { - return status; - } - nvme_aor_inc_active(ns); - /* fall through */ - case NVME_ZONE_STATE_CLOSED: - status =3D nvme_aor_check(ns, 0, 1); - if (status) { - if (state =3D=3D NVME_ZONE_STATE_EMPTY) { - nvme_aor_dec_active(ns); - } - return status; - } - nvme_aor_inc_open(ns); - /* fall through */ - case NVME_ZONE_STATE_IMPLICITLY_OPEN: - nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_EXPLICITLY_OPEN); - /* fall through */ - case NVME_ZONE_STATE_EXPLICITLY_OPEN: - return NVME_SUCCESS; - default: - return NVME_ZONE_INVAL_TRANSITION; - } + return nvme_zrm_open(ns, zone); } =20 static uint16_t nvme_close_zone(NvmeNamespace *ns, NvmeZone *zone, NvmeZoneState state, NvmeRequest *req) { - switch (state) { - case NVME_ZONE_STATE_EXPLICITLY_OPEN: - case NVME_ZONE_STATE_IMPLICITLY_OPEN: - nvme_aor_dec_open(ns); - nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_CLOSED); - /* fall through */ - case NVME_ZONE_STATE_CLOSED: - return NVME_SUCCESS; - default: - return NVME_ZONE_INVAL_TRANSITION; - } + return nvme_zrm_close(ns, zone); } =20 static uint16_t nvme_finish_zone(NvmeNamespace *ns, NvmeZone *zone, NvmeZoneState state, NvmeRequest *req) { - switch (state) { - case NVME_ZONE_STATE_EXPLICITLY_OPEN: - case NVME_ZONE_STATE_IMPLICITLY_OPEN: - nvme_aor_dec_open(ns); - /* fall through */ - case NVME_ZONE_STATE_CLOSED: - nvme_aor_dec_active(ns); - /* fall through */ - case NVME_ZONE_STATE_EMPTY: - zone->w_ptr =3D nvme_zone_wr_boundary(zone); - zone->d.wp =3D zone->w_ptr; - nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_FULL); - /* fall through */ - case NVME_ZONE_STATE_FULL: - return NVME_SUCCESS; - default: - return NVME_ZONE_INVAL_TRANSITION; - } + return nvme_zrm_finish(ns, zone); } =20 static uint16_t nvme_reset_zone(NvmeNamespace *ns, NvmeZone *zone, --=20 2.30.1 From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615291022; cv=none; d=zohomail.com; s=zohoarc; b=FpoGaEEnb+WDWx2icVXKtlKb2UnDatqv2cwvlzgpEK4UKyspH4mpQU5KbimEvNW+ZzFEv3Y10b0AXdNyIQYxw9AnP8Za/AB3jExTb64t+wpiDCESyp+tHkDv8JF+B11EpF08oJObtzwg3OknehcNH4OUmERXqTz6XdWGVe0GeWA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615291022; 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=uFb8yBQj3snFT6siiehYDGiWZqmzLiYnBeb/W4SacCo=; b=Cm/bZtU0hl5MIoY8bcs3N93Xs7B+s9guwa4J3PoC2TBVtdul6beYkzFgbvCtAj+hTurdzYz12P4KmxSJs8tFmGEfYRQokS45chAAHC/wirfDeF0wJj2aZEDMe7DlTmzAWtKwnZnJdDTHsGPhs93Ej2K/aw1gPAnynCuHjaruYXY= 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 1615291022519119.4033062108357; Tue, 9 Mar 2021 03:57:02 -0800 (PST) Received: from localhost ([::1]:42746 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJayz-00075r-DP for importer@patchew.org; Tue, 09 Mar 2021 06:57:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42872) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanw-0008JC-9I; Tue, 09 Mar 2021 06:45:36 -0500 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:56649) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJans-0000DL-ON; Tue, 09 Mar 2021 06:45:35 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 85D062705; Tue, 9 Mar 2021 06:45:30 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:31 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id C6B3824005A; Tue, 9 Mar 2021 06:45:28 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=uFb8yBQj3snFT 6siiehYDGiWZqmzLiYnBeb/W4SacCo=; b=vUNESlEGEX7q9lOqkMGBS8Xf1pVO/ GqDnpz8TaZzFypNPsI2OPgnBM3YxRqcYqbz5GvfnMbjjlSrNcZ+ocCWVZwvBGWTV DcoWDs97CM9sGwf23UrrlEMplVoi3Ljs0NmOEr/qVGvw65DbRL+9R0AJD56Ha/V0 ediKY9k6p4TnujZ7bc7TIxQAg8pkQJ/p+1Z4DSW/mQIvMZ0SGGMvcnNXdS3/lS5j rjDByQ6wxdxBnvgXGNWKCnh7NGblobT1qBzf/Tr5il+5buRr274eL+iam5e6hKIQ sfPjgOj/IRTcWOpsUVnrKL76rD1A5sxbieAZ2wH01F0HEEDvU60onWemA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=uFb8yBQj3snFT6siiehYDGiWZqmzLiYnBeb/W4SacCo=; b=n+4Ii3pj QewV9OZfdhfwsZHB5EpADUHy4Lyhwm3mIcZ9xdu1UBT7mrHTctA+AISTZoktfcGw iX4YcJcT8mPbD59QMP3Js7Y7MIoRCOMBmGrBEHhQs/JgmDAFTRvblxgfXnt4B9ub vhC2/EXeV1JSeIog6f+DE9QkxTnjbI1FHvqj0Z71gKRqdq/PnKCMjNMv291v3/gw emnS1wTW6pc14fCB3yZJHLDTF+81dTbREgZvcN4HCCDgx3cVJS0iHSvfP6R0E3M5 7zmiHRFYk7KUlsQ6irotdpR2CSYm+UX7/OU9IdvOCVa39fUp6wBx0CXABx9KUxSY /d1bZa+SzSII2A== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeehne curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 09/38] hw/block/nvme: pull write pointer advancement to separate function Date: Tue, 9 Mar 2021 12:44:43 +0100 Message-Id: <20210309114512.536489-10-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.25; envelope-from=its@irrelevant.dk; helo=wout2-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen In preparation for Simple Copy, pull write pointer advancement into a separate function that is independent off an NvmeRequest. Signed-off-by: Klaus Jensen Reviewed-by: Keith Busch --- hw/block/nvme.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 7897390b6d74..44129f8e8bb8 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1407,6 +1407,16 @@ static inline uint16_t nvme_zrm_open(NvmeNamespace *= ns, NvmeZone *zone) return __nvme_zrm_open(ns, zone, false); } =20 +static void __nvme_advance_zone_wp(NvmeNamespace *ns, NvmeZone *zone, + uint32_t nlb) +{ + zone->d.wp +=3D nlb; + + if (zone->d.wp =3D=3D nvme_zone_wr_boundary(zone)) { + nvme_zrm_finish(ns, zone); + } +} + static void nvme_finalize_zoned_write(NvmeNamespace *ns, NvmeRequest *req) { NvmeRwCmd *rw =3D (NvmeRwCmd *)&req->cmd; @@ -1418,11 +1428,7 @@ static void nvme_finalize_zoned_write(NvmeNamespace = *ns, NvmeRequest *req) nlb =3D le16_to_cpu(rw->nlb) + 1; zone =3D nvme_get_zone_by_slba(ns, slba); =20 - zone->d.wp +=3D nlb; - - if (zone->d.wp =3D=3D nvme_zone_wr_boundary(zone)) { - nvme_zrm_finish(ns, zone); - } + __nvme_advance_zone_wp(ns, zone, nlb); } =20 static inline bool nvme_is_write(NvmeRequest *req) --=20 2.30.1 From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615291329; cv=none; d=zohomail.com; s=zohoarc; b=VwaIi3N8OKps7vmlVSdopHUyklBhzrQtQGA9UEFDv7WVEECwjVxdSzKBmgcXHRlCb/RWTsgSSt4KuE+2EeWk8YFqTrrcPbQBNngq1jV7XhDJM2d/ZvxpGV5C2b+97zUZphbrhg6LZpCvpjXdo34bssAmg2VyjQoWqX2eQ7lP/VI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615291329; 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=Gxa+cCNcTkUW5DYNNCZFwX7JlwxNThZDoMMiVNJPyDc=; b=AdeALngmaaB6yyuPEIYxA1bgw1wjtYUkdjoMQnZr2ksIRJl9tlx9LyruEVJcUX30o9FmuUhQ2AXt2bGlYyVXi70aX1hZiZdUO/S8liVkkeRR/gi6zIsnWmSWqCVgXcuc21Ju1fIfOOYVNHTsopDZwZs0l6UHmOQvwrYn+P5tPXQ= 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 1615291329028705.6153760673343; Tue, 9 Mar 2021 04:02:09 -0800 (PST) Received: from localhost ([::1]:51450 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJb3v-0002Y4-OV for importer@patchew.org; Tue, 09 Mar 2021 07:02:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42884) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanx-0008KD-Dp; Tue, 09 Mar 2021 06:45:37 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:37325) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanu-0000G6-NS; Tue, 09 Mar 2021 06:45:37 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 161062728; Tue, 9 Mar 2021 06:45:32 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:33 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 405B2240057; Tue, 9 Mar 2021 06:45:30 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=Gxa+cCNcTkUW5 DYNNCZFwX7JlwxNThZDoMMiVNJPyDc=; b=QHjKU4E46vOurs+rVS4ZuHcH593xG GF6oKR9Gbti+cLq+oRLdBxv1EDPRDOec5ztqcKYF0WxVoHoX1iCy68EF6v6Kjv4x EqA4yAPPW6EeZ1a4hFVMf56PeXME4ux3Dd/lVw+BRqHjs/sXKasLDqQqrB5FkcJd CIEOXbbJqOfIn66LW3oz6EFLhBKKBOHhx5+dvFcABhxuvgc137KHtT0b76Y0CceC DIRHSjwxWe2iRaSW9LoYaRkWm1b/DlXz2yKfHPCsbcejXt4o2SuULGReh4P7qTbI wrv9n8Da1sEGMa6l2+DjsyApBFLf9jgqHSuLqh4PY1LkB68oWSYZ9/BKw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=Gxa+cCNcTkUW5DYNNCZFwX7JlwxNThZDoMMiVNJPyDc=; b=vOPxrjuk 7F/5Tbl9e14O+AKc9PiaL1joYZXkwAv99JyBYlRR1RfdqJT7/BkxzIsLh+lSkgWQ jkCuCX7XfugOTTeTxAYVAVu5LC6qWcrfKC2ps5IJzN5pJShFzZs6XZHFKKsb+nSD cuO9z/7Au2sERkfielnGtix6E2NwFp+9bCXLJjN6Uhlz83lnAOYLvqJo5txyvVxU Tb5fXBNXX9jDjVFwGeV4idQObgBA0FS0dxdUDehIw3n1LV/kgWuWtMgHWua1V4GC yigqd8yJPeOjGfb0pgkmdtKhlwd671dr/G8qnH4JGV08VhN5wy25omosN2KOi+dz YgA9Kyg9si20yw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeehne curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 10/38] nvme: updated shared header for copy command Date: Tue, 9 Mar 2021 12:44:44 +0100 Message-Id: <20210309114512.536489-11-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen Add new data structures and types for the Simple Copy command. Signed-off-by: Klaus Jensen Reviewed-by: Minwoo Im Acked-by: Stefan Hajnoczi Reviewed-by: Keith Busch --- include/block/nvme.h | 47 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/include/block/nvme.h b/include/block/nvme.h index 3db2b9b4cba7..9f8eb3988c0e 100644 --- a/include/block/nvme.h +++ b/include/block/nvme.h @@ -579,6 +579,7 @@ enum NvmeIoCommands { NVME_CMD_COMPARE =3D 0x05, NVME_CMD_WRITE_ZEROES =3D 0x08, NVME_CMD_DSM =3D 0x09, + NVME_CMD_COPY =3D 0x19, NVME_CMD_ZONE_MGMT_SEND =3D 0x79, NVME_CMD_ZONE_MGMT_RECV =3D 0x7a, NVME_CMD_ZONE_APPEND =3D 0x7d, @@ -724,6 +725,37 @@ typedef struct QEMU_PACKED NvmeDsmRange { uint64_t slba; } NvmeDsmRange; =20 +enum { + NVME_COPY_FORMAT_0 =3D 0x0, +}; + +typedef struct QEMU_PACKED NvmeCopyCmd { + uint8_t opcode; + uint8_t flags; + uint16_t cid; + uint32_t nsid; + uint32_t rsvd2[4]; + NvmeCmdDptr dptr; + uint64_t sdlba; + uint8_t nr; + uint8_t control[3]; + uint16_t rsvd13; + uint16_t dspec; + uint32_t reftag; + uint16_t apptag; + uint16_t appmask; +} NvmeCopyCmd; + +typedef struct QEMU_PACKED NvmeCopySourceRange { + uint8_t rsvd0[8]; + uint64_t slba; + uint16_t nlb; + uint8_t rsvd18[6]; + uint32_t reftag; + uint16_t apptag; + uint16_t appmask; +} NvmeCopySourceRange; + enum NvmeAsyncEventRequest { NVME_AER_TYPE_ERROR =3D 0, NVME_AER_TYPE_SMART =3D 1, @@ -807,6 +839,7 @@ enum NvmeStatusCodes { NVME_CONFLICTING_ATTRS =3D 0x0180, NVME_INVALID_PROT_INFO =3D 0x0181, NVME_WRITE_TO_RO =3D 0x0182, + NVME_CMD_SIZE_LIMIT =3D 0x0183, NVME_ZONE_BOUNDARY_ERROR =3D 0x01b8, NVME_ZONE_FULL =3D 0x01b9, NVME_ZONE_READ_ONLY =3D 0x01ba, @@ -994,7 +1027,7 @@ typedef struct QEMU_PACKED NvmeIdCtrl { uint8_t nvscc; uint8_t rsvd531; uint16_t acwu; - uint8_t rsvd534[2]; + uint16_t ocfs; uint32_t sgls; uint8_t rsvd540[228]; uint8_t subnqn[256]; @@ -1022,6 +1055,11 @@ enum NvmeIdCtrlOncs { NVME_ONCS_FEATURES =3D 1 << 4, NVME_ONCS_RESRVATIONS =3D 1 << 5, NVME_ONCS_TIMESTAMP =3D 1 << 6, + NVME_ONCS_COPY =3D 1 << 8, +}; + +enum NvmeIdCtrlOcfs { + NVME_OCFS_COPY_FORMAT_0 =3D 1 << 0, }; =20 enum NvmeIdCtrlFrmw { @@ -1175,7 +1213,10 @@ typedef struct QEMU_PACKED NvmeIdNs { uint16_t npdg; uint16_t npda; uint16_t nows; - uint8_t rsvd74[30]; + uint16_t mssrl; + uint32_t mcl; + uint8_t msrc; + uint8_t rsvd81[23]; uint8_t nguid[16]; uint64_t eui64; NvmeLBAF lbaf[16]; @@ -1331,6 +1372,7 @@ static inline void _nvme_check_size(void) QEMU_BUILD_BUG_ON(sizeof(NvmeZonedResult) !=3D 8); QEMU_BUILD_BUG_ON(sizeof(NvmeCqe) !=3D 16); QEMU_BUILD_BUG_ON(sizeof(NvmeDsmRange) !=3D 16); + QEMU_BUILD_BUG_ON(sizeof(NvmeCopySourceRange) !=3D 32); QEMU_BUILD_BUG_ON(sizeof(NvmeCmd) !=3D 64); QEMU_BUILD_BUG_ON(sizeof(NvmeDeleteQ) !=3D 64); QEMU_BUILD_BUG_ON(sizeof(NvmeCreateCq) !=3D 64); @@ -1338,6 +1380,7 @@ static inline void _nvme_check_size(void) QEMU_BUILD_BUG_ON(sizeof(NvmeIdentify) !=3D 64); QEMU_BUILD_BUG_ON(sizeof(NvmeRwCmd) !=3D 64); QEMU_BUILD_BUG_ON(sizeof(NvmeDsmCmd) !=3D 64); + QEMU_BUILD_BUG_ON(sizeof(NvmeCopyCmd) !=3D 64); QEMU_BUILD_BUG_ON(sizeof(NvmeRangeType) !=3D 64); QEMU_BUILD_BUG_ON(sizeof(NvmeErrorLog) !=3D 64); QEMU_BUILD_BUG_ON(sizeof(NvmeFwSlotInfoLog) !=3D 512); --=20 2.30.1 From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615291728; cv=none; d=zohomail.com; s=zohoarc; b=DhZfiZGGTjXyyg6mvQoV+q3rdmP6oX1s3jB7pTsMjFk4Ex23IPekycez/4afiQSpdYLW8wPSfEQl+XaKQp1K/MDft9cb3caq0DatlOeB3xdGv7wyr2cLkGc15Es/05VIn1VPxrHBqxBvY7qWbS1TbNei1DmcCB10yEX0TtfR7HA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615291728; 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=7rwJ7GNuRut0//IRaf58lXKmhQZPXng1Al6m7Q02E2c=; b=gU5xXpXw8J04D0GlR05dkIW5Sl7TEUQzv6DePpRVifVDLdH0QgcZtGlcyVthvCUYo9OHQSv/pIZUjlfYQkMexKerAnHFVjWaG/Ka0CoSAxSCXwg3E9d98xKJFLhkrJ6zQvnDlgwjjG/XJWPyTpH7lfygoNDIQk+lUTya6UjICB4= 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 1615291728295821.2164241657376; Tue, 9 Mar 2021 04:08:48 -0800 (PST) Received: from localhost ([::1]:60064 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbAM-0006Kl-Ny for importer@patchew.org; Tue, 09 Mar 2021 07:08:46 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42914) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJany-0008MP-H7; Tue, 09 Mar 2021 06:45:38 -0500 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:45843) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanv-0000Gx-LV; Tue, 09 Mar 2021 06:45:38 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 76DA1261C; Tue, 9 Mar 2021 06:45:33 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:34 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id C4AAC24005E; Tue, 9 Mar 2021 06:45:31 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=7rwJ7GNuRut0/ /IRaf58lXKmhQZPXng1Al6m7Q02E2c=; b=UajePubSDJBI4QYHmLPk8aMgd/zQH 5ujIyzd1MZnhI15WOxuSB3aWYLd8D9y/ZDXG5IrZCClLAe+/rj9LeYCp72cqFfqm bNK2KOGNDwFNWaDQQzHugWc1p/vtQkrVcG2LKflU/I8pQhwuBdjkRwnCFn3vk3Nz w276If2b2hVwbTNcqLNRrAizaGbiLvjEVweb+aVVq9Xy50JRhOLg+FGxSQR61YKy rd5bOvLLNA3ygX7vCNtyZieW3PpZL5vhv/dCXc7t4wupRXumQ5yI0sRPcPb97O5g blqM2pqdHP4YVE+63/p4S2LxCT0xSsKa2kvaTVKRo+y/yyOuR+Eqztcfg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=7rwJ7GNuRut0//IRaf58lXKmhQZPXng1Al6m7Q02E2c=; b=m4blXnBb vIgfj62a0+BFGpf/bnl0Yby7fpYvoYzsUWFBrE2ez9iuouxj71A6ctC28sPWgMFO mG9xx+v1kYRPE/EDO4+94dQnJBWaJXQ83LfFExIImmgWr9CbYuQRvck52tQYj7Qg 46rtO4QzEKQHmfn1wy8kn6aL31kyfOByx7lKf+eAlHCw4XObc7CM78ndbHZZyksh e7/c7dvXofr4dAfis9okUDOA+AJ5WObYtE/hOmg44WCUiJpHCw6VgZuUts6usbMP 8+jDbyACPgU0kaOAHksFJ8JbwI3tb/UazFLKO/s2Y5iCv+mxG+eJYdSXX6f8UVqJ bbwyFH1SFhS3oA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeehne curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 11/38] hw/block/nvme: add simple copy command Date: Tue, 9 Mar 2021 12:44:45 +0100 Message-Id: <20210309114512.536489-12-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.25; envelope-from=its@irrelevant.dk; helo=wout2-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen Add support for TP 4065a ("Simple Copy Command"), v2020.05.04 ("Ratified"). The implementation uses a bounce buffer to first read in the source logical blocks, then issue a write of that bounce buffer. The default maximum number of source logical blocks is 128, translating to 512 KiB for 4k logical blocks which aligns with the default value of MDTS. Signed-off-by: Klaus Jensen Reviewed-by: Keith Busch --- hw/block/nvme-ns.h | 4 + hw/block/nvme.h | 1 + hw/block/nvme-ns.c | 8 ++ hw/block/nvme.c | 252 +++++++++++++++++++++++++++++++++++++++++- hw/block/trace-events | 6 + 5 files changed, 270 insertions(+), 1 deletion(-) diff --git a/hw/block/nvme-ns.h b/hw/block/nvme-ns.h index 929e78861903..7af6884862b5 100644 --- a/hw/block/nvme-ns.h +++ b/hw/block/nvme-ns.h @@ -29,6 +29,10 @@ typedef struct NvmeNamespaceParams { uint32_t nsid; QemuUUID uuid; =20 + uint16_t mssrl; + uint32_t mcl; + uint8_t msrc; + bool zoned; bool cross_zone_read; uint64_t zone_size_bs; diff --git a/hw/block/nvme.h b/hw/block/nvme.h index b8f5f2d6ffb8..cb2b5175f1a1 100644 --- a/hw/block/nvme.h +++ b/hw/block/nvme.h @@ -69,6 +69,7 @@ static inline const char *nvme_io_opc_str(uint8_t opc) case NVME_CMD_COMPARE: return "NVME_NVM_CMD_COMPARE"; case NVME_CMD_WRITE_ZEROES: return "NVME_NVM_CMD_WRITE_ZEROES"; case NVME_CMD_DSM: return "NVME_NVM_CMD_DSM"; + case NVME_CMD_COPY: return "NVME_NVM_CMD_COPY"; case NVME_CMD_ZONE_MGMT_SEND: return "NVME_ZONED_CMD_MGMT_SEND"; case NVME_CMD_ZONE_MGMT_RECV: return "NVME_ZONED_CMD_MGMT_RECV"; case NVME_CMD_ZONE_APPEND: return "NVME_ZONED_CMD_ZONE_APPEND"; diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c index 64b6a491adc3..fd73d0321109 100644 --- a/hw/block/nvme-ns.c +++ b/hw/block/nvme-ns.c @@ -67,6 +67,11 @@ static int nvme_ns_init(NvmeNamespace *ns, Error **errp) id_ns->nmic |=3D NVME_NMIC_NS_SHARED; } =20 + /* simple copy */ + id_ns->mssrl =3D cpu_to_le16(ns->params.mssrl); + id_ns->mcl =3D cpu_to_le32(ns->params.mcl); + id_ns->msrc =3D ns->params.msrc; + return 0; } =20 @@ -384,6 +389,9 @@ static Property nvme_ns_props[] =3D { NvmeSubsystem *), DEFINE_PROP_UINT32("nsid", NvmeNamespace, params.nsid, 0), DEFINE_PROP_UUID("uuid", NvmeNamespace, params.uuid), + DEFINE_PROP_UINT16("mssrl", NvmeNamespace, params.mssrl, 128), + DEFINE_PROP_UINT32("mcl", NvmeNamespace, params.mcl, 128), + DEFINE_PROP_UINT8("msrc", NvmeNamespace, params.msrc, 127), DEFINE_PROP_BOOL("zoned", NvmeNamespace, params.zoned, false), DEFINE_PROP_SIZE("zoned.zone_size", NvmeNamespace, params.zone_size_bs, NVME_DEFAULT_ZONE_SIZE), diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 44129f8e8bb8..ab4723ff319a 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -195,6 +195,7 @@ static const uint32_t nvme_cse_iocs_nvm[256] =3D { [NVME_CMD_WRITE] =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_= LBCC, [NVME_CMD_READ] =3D NVME_CMD_EFF_CSUPP, [NVME_CMD_DSM] =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_= LBCC, + [NVME_CMD_COPY] =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_= LBCC, [NVME_CMD_COMPARE] =3D NVME_CMD_EFF_CSUPP, }; =20 @@ -204,6 +205,7 @@ static const uint32_t nvme_cse_iocs_zoned[256] =3D { [NVME_CMD_WRITE] =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_= LBCC, [NVME_CMD_READ] =3D NVME_CMD_EFF_CSUPP, [NVME_CMD_DSM] =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_= LBCC, + [NVME_CMD_COPY] =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_= LBCC, [NVME_CMD_COMPARE] =3D NVME_CMD_EFF_CSUPP, [NVME_CMD_ZONE_APPEND] =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_= LBCC, [NVME_CMD_ZONE_MGMT_SEND] =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_= LBCC, @@ -1532,6 +1534,136 @@ static void nvme_aio_zone_reset_cb(void *opaque, in= t ret) nvme_enqueue_req_completion(nvme_cq(req), req); } =20 +struct nvme_copy_ctx { + int copies; + uint8_t *bounce; + uint32_t nlb; +}; + +struct nvme_copy_in_ctx { + NvmeRequest *req; + QEMUIOVector iov; +}; + +static void nvme_copy_cb(void *opaque, int ret) +{ + NvmeRequest *req =3D opaque; + NvmeNamespace *ns =3D req->ns; + struct nvme_copy_ctx *ctx =3D req->opaque; + + trace_pci_nvme_copy_cb(nvme_cid(req)); + + if (ns->params.zoned) { + NvmeCopyCmd *copy =3D (NvmeCopyCmd *)&req->cmd; + uint64_t sdlba =3D le64_to_cpu(copy->sdlba); + NvmeZone *zone =3D nvme_get_zone_by_slba(ns, sdlba); + + __nvme_advance_zone_wp(ns, zone, ctx->nlb); + } + + if (!ret) { + block_acct_done(blk_get_stats(ns->blkconf.blk), &req->acct); + } else { + block_acct_failed(blk_get_stats(ns->blkconf.blk), &req->acct); + nvme_aio_err(req, ret); + } + + g_free(ctx->bounce); + g_free(ctx); + + nvme_enqueue_req_completion(nvme_cq(req), req); +} + +static void nvme_copy_in_complete(NvmeRequest *req) +{ + NvmeNamespace *ns =3D req->ns; + NvmeCopyCmd *copy =3D (NvmeCopyCmd *)&req->cmd; + struct nvme_copy_ctx *ctx =3D req->opaque; + uint64_t sdlba =3D le64_to_cpu(copy->sdlba); + uint16_t status; + + trace_pci_nvme_copy_in_complete(nvme_cid(req)); + + block_acct_done(blk_get_stats(ns->blkconf.blk), &req->acct); + + status =3D nvme_check_bounds(ns, sdlba, ctx->nlb); + if (status) { + trace_pci_nvme_err_invalid_lba_range(sdlba, ctx->nlb, ns->id_ns.ns= ze); + goto invalid; + } + + if (ns->params.zoned) { + NvmeZone *zone =3D nvme_get_zone_by_slba(ns, sdlba); + + status =3D nvme_check_zone_write(ns, zone, sdlba, ctx->nlb); + if (status) { + goto invalid; + } + + status =3D nvme_zrm_auto(ns, zone); + if (status) { + goto invalid; + } + + zone->w_ptr +=3D ctx->nlb; + } + + qemu_iovec_init(&req->iov, 1); + qemu_iovec_add(&req->iov, ctx->bounce, nvme_l2b(ns, ctx->nlb)); + + block_acct_start(blk_get_stats(ns->blkconf.blk), &req->acct, 0, + BLOCK_ACCT_WRITE); + + req->aiocb =3D blk_aio_pwritev(ns->blkconf.blk, nvme_l2b(ns, sdlba), + &req->iov, 0, nvme_copy_cb, req); + + return; + +invalid: + req->status =3D status; + + g_free(ctx->bounce); + g_free(ctx); + + nvme_enqueue_req_completion(nvme_cq(req), req); +} + +static void nvme_aio_copy_in_cb(void *opaque, int ret) +{ + struct nvme_copy_in_ctx *in_ctx =3D opaque; + NvmeRequest *req =3D in_ctx->req; + NvmeNamespace *ns =3D req->ns; + struct nvme_copy_ctx *ctx =3D req->opaque; + + qemu_iovec_destroy(&in_ctx->iov); + g_free(in_ctx); + + trace_pci_nvme_aio_copy_in_cb(nvme_cid(req)); + + if (ret) { + nvme_aio_err(req, ret); + } + + ctx->copies--; + + if (ctx->copies) { + return; + } + + if (req->status) { + block_acct_failed(blk_get_stats(ns->blkconf.blk), &req->acct); + + g_free(ctx->bounce); + g_free(ctx); + + nvme_enqueue_req_completion(nvme_cq(req), req); + + return; + } + + nvme_copy_in_complete(req); +} + struct nvme_compare_ctx { QEMUIOVector iov; uint8_t *bounce; @@ -1650,6 +1782,121 @@ static uint16_t nvme_dsm(NvmeCtrl *n, NvmeRequest *= req) return status; } =20 +static uint16_t nvme_copy(NvmeCtrl *n, NvmeRequest *req) +{ + NvmeNamespace *ns =3D req->ns; + NvmeCopyCmd *copy =3D (NvmeCopyCmd *)&req->cmd; + g_autofree NvmeCopySourceRange *range =3D NULL; + + uint16_t nr =3D copy->nr + 1; + uint8_t format =3D copy->control[0] & 0xf; + uint32_t nlb =3D 0; + + uint8_t *bounce =3D NULL, *bouncep =3D NULL; + struct nvme_copy_ctx *ctx; + uint16_t status; + int i; + + trace_pci_nvme_copy(nvme_cid(req), nvme_nsid(ns), nr, format); + + if (!(n->id_ctrl.ocfs & (1 << format))) { + trace_pci_nvme_err_copy_invalid_format(format); + return NVME_INVALID_FIELD | NVME_DNR; + } + + if (nr > ns->id_ns.msrc + 1) { + return NVME_CMD_SIZE_LIMIT | NVME_DNR; + } + + range =3D g_new(NvmeCopySourceRange, nr); + + status =3D nvme_dma(n, (uint8_t *)range, nr * sizeof(NvmeCopySourceRan= ge), + DMA_DIRECTION_TO_DEVICE, req); + if (status) { + return status; + } + + for (i =3D 0; i < nr; i++) { + uint64_t slba =3D le64_to_cpu(range[i].slba); + uint32_t _nlb =3D le16_to_cpu(range[i].nlb) + 1; + + if (_nlb > le16_to_cpu(ns->id_ns.mssrl)) { + return NVME_CMD_SIZE_LIMIT | NVME_DNR; + } + + status =3D nvme_check_bounds(ns, slba, _nlb); + if (status) { + trace_pci_nvme_err_invalid_lba_range(slba, _nlb, ns->id_ns.nsz= e); + return status; + } + + if (NVME_ERR_REC_DULBE(ns->features.err_rec)) { + status =3D nvme_check_dulbe(ns, slba, _nlb); + if (status) { + return status; + } + } + + if (ns->params.zoned) { + status =3D nvme_check_zone_read(ns, slba, _nlb); + if (status) { + return status; + } + } + + nlb +=3D _nlb; + } + + if (nlb > le32_to_cpu(ns->id_ns.mcl)) { + return NVME_CMD_SIZE_LIMIT | NVME_DNR; + } + + bounce =3D bouncep =3D g_malloc(nvme_l2b(ns, nlb)); + + block_acct_start(blk_get_stats(ns->blkconf.blk), &req->acct, 0, + BLOCK_ACCT_READ); + + ctx =3D g_new(struct nvme_copy_ctx, 1); + + ctx->bounce =3D bounce; + ctx->nlb =3D nlb; + ctx->copies =3D 1; + + req->opaque =3D ctx; + + for (i =3D 0; i < nr; i++) { + uint64_t slba =3D le64_to_cpu(range[i].slba); + uint32_t nlb =3D le16_to_cpu(range[i].nlb) + 1; + + size_t len =3D nvme_l2b(ns, nlb); + int64_t offset =3D nvme_l2b(ns, slba); + + trace_pci_nvme_copy_source_range(slba, nlb); + + struct nvme_copy_in_ctx *in_ctx =3D g_new(struct nvme_copy_in_ctx,= 1); + in_ctx->req =3D req; + + qemu_iovec_init(&in_ctx->iov, 1); + qemu_iovec_add(&in_ctx->iov, bouncep, len); + + ctx->copies++; + + blk_aio_preadv(ns->blkconf.blk, offset, &in_ctx->iov, 0, + nvme_aio_copy_in_cb, in_ctx); + + bouncep +=3D len; + } + + /* account for the 1-initialization */ + ctx->copies--; + + if (!ctx->copies) { + nvme_copy_in_complete(req); + } + + return NVME_NO_COMPLETE; +} + static uint16_t nvme_compare(NvmeCtrl *n, NvmeRequest *req) { NvmeRwCmd *rw =3D (NvmeRwCmd *)&req->cmd; @@ -2387,6 +2634,8 @@ static uint16_t nvme_io_cmd(NvmeCtrl *n, NvmeRequest = *req) return nvme_compare(n, req); case NVME_CMD_DSM: return nvme_dsm(n, req); + case NVME_CMD_COPY: + return nvme_copy(n, req); case NVME_CMD_ZONE_MGMT_SEND: return nvme_zone_mgmt_send(n, req); case NVME_CMD_ZONE_MGMT_RECV: @@ -4484,9 +4733,10 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *p= ci_dev) id->nn =3D cpu_to_le32(n->num_namespaces); id->oncs =3D cpu_to_le16(NVME_ONCS_WRITE_ZEROES | NVME_ONCS_TIMESTAMP | NVME_ONCS_FEATURES | NVME_ONCS_DSM | - NVME_ONCS_COMPARE); + NVME_ONCS_COMPARE | NVME_ONCS_COPY); =20 id->vwc =3D (0x2 << 1) | 0x1; + id->ocfs =3D cpu_to_le16(NVME_OCFS_COPY_FORMAT_0); id->sgls =3D cpu_to_le32(NVME_CTRL_SGLS_SUPPORT_NO_ALIGN | NVME_CTRL_SGLS_BITBUCKET); =20 diff --git a/hw/block/trace-events b/hw/block/trace-events index d32475c3989e..4b5ee04024f4 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -43,12 +43,17 @@ pci_nvme_admin_cmd(uint16_t cid, uint16_t sqid, uint8_t= opcode, const char *opna pci_nvme_read(uint16_t cid, uint32_t nsid, uint32_t nlb, uint64_t count, u= int64_t lba) "cid %"PRIu16" nsid %"PRIu32" nlb %"PRIu32" count %"PRIu64" lb= a 0x%"PRIx64"" pci_nvme_write(uint16_t cid, const char *verb, uint32_t nsid, uint32_t nlb= , uint64_t count, uint64_t lba) "cid %"PRIu16" opname '%s' nsid %"PRIu32" n= lb %"PRIu32" count %"PRIu64" lba 0x%"PRIx64"" pci_nvme_rw_cb(uint16_t cid, const char *blkname) "cid %"PRIu16" blk '%s'" +pci_nvme_copy(uint16_t cid, uint32_t nsid, uint16_t nr, uint8_t format) "c= id %"PRIu16" nsid %"PRIu32" nr %"PRIu16" format 0x%"PRIx8"" +pci_nvme_copy_source_range(uint64_t slba, uint32_t nlb) "slba 0x%"PRIx64" = nlb %"PRIu32"" +pci_nvme_copy_in_complete(uint16_t cid) "cid %"PRIu16"" +pci_nvme_copy_cb(uint16_t cid) "cid %"PRIu16"" pci_nvme_block_status(int64_t offset, int64_t bytes, int64_t pnum, int ret= , bool zeroed) "offset %"PRId64" bytes %"PRId64" pnum %"PRId64" ret 0x%x ze= roed %d" pci_nvme_dsm(uint16_t cid, uint32_t nsid, uint32_t nr, uint32_t attr) "cid= %"PRIu16" nsid %"PRIu32" nr %"PRIu32" attr 0x%"PRIx32"" pci_nvme_dsm_deallocate(uint16_t cid, uint32_t nsid, uint64_t slba, uint32= _t nlb) "cid %"PRIu16" nsid %"PRIu32" slba %"PRIu64" nlb %"PRIu32"" pci_nvme_compare(uint16_t cid, uint32_t nsid, uint64_t slba, uint32_t nlb)= "cid %"PRIu16" nsid %"PRIu32" slba 0x%"PRIx64" nlb %"PRIu32"" pci_nvme_compare_cb(uint16_t cid) "cid %"PRIu16"" pci_nvme_aio_discard_cb(uint16_t cid) "cid %"PRIu16"" +pci_nvme_aio_copy_in_cb(uint16_t cid) "cid %"PRIu16"" pci_nvme_aio_zone_reset_cb(uint16_t cid, uint64_t zslba) "cid %"PRIu16" zs= lba 0x%"PRIx64"" pci_nvme_create_sq(uint64_t addr, uint16_t sqid, uint16_t cqid, uint16_t q= size, uint16_t qflags) "create submission queue, addr=3D0x%"PRIx64", sqid= =3D%"PRIu16", cqid=3D%"PRIu16", qsize=3D%"PRIu16", qflags=3D%"PRIu16"" pci_nvme_create_cq(uint64_t addr, uint16_t cqid, uint16_t vector, uint16_t= size, uint16_t qflags, int ien) "create completion queue, addr=3D0x%"PRIx6= 4", cqid=3D%"PRIu16", vector=3D%"PRIu16", qsize=3D%"PRIu16", qflags=3D%"PRI= u16", ien=3D%d" @@ -113,6 +118,7 @@ pci_nvme_err_addr_read(uint64_t addr) "addr 0x%"PRIx64"" pci_nvme_err_addr_write(uint64_t addr) "addr 0x%"PRIx64"" pci_nvme_err_cfs(void) "controller fatal status" pci_nvme_err_aio(uint16_t cid, const char *errname, uint16_t status) "cid = %"PRIu16" err '%s' status 0x%"PRIx16"" +pci_nvme_err_copy_invalid_format(uint8_t format) "format 0x%"PRIx8"" pci_nvme_err_invalid_sgld(uint16_t cid, uint8_t typ) "cid %"PRIu16" type 0= x%"PRIx8"" pci_nvme_err_invalid_num_sgld(uint16_t cid, uint8_t typ) "cid %"PRIu16" ty= pe 0x%"PRIx8"" pci_nvme_err_invalid_sgl_excess_length(uint16_t cid) "cid %"PRIu16"" --=20 2.30.1 From nobody Fri May 17 20:31:28 2024 Delivered-To: importer@patchew.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=1615291741; cv=none; d=zohomail.com; s=zohoarc; b=HBRyS1iGD5E2cPm2UKpmngswsy5ZDp131Lla/5hkw5vvJ7glKy0N1rCqAZV2cqkfR3b9yAk4DKzXvmgZsBV8wogSrj2b+umTfg0JIVkcbvJbS+xhsL5OpoqhXhYnHNakdWQJe1fszr+f+HQBa8qzC/yM77QumbL1QS7xOhLqgaM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615291741; 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=RBzvJrr8fa3LFkTLuZP2K9V1LWoxzVtfWByZdu/YYZM=; b=kLxsO0RJyfeXHZUA8LepTyjNe1+KctGPxobl/3SVfR0vmjsNLRAK7UAzcHHFdmf1val0HNdpC79BGzNocaSMjPaISh6Go4u7nJQpDudTXPsjGV0WGnU45wImcud6iKSw0zSORpt1wpQ/KX1E25mYkpB6LryuQlOOOxSt3H/kqhM= 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 161529174122561.07509926202772; Tue, 9 Mar 2021 04:09:01 -0800 (PST) Received: from localhost ([::1]:60554 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbAa-0006Yf-2v for importer@patchew.org; Tue, 09 Mar 2021 07:09:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42922) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanz-0008OZ-E0; Tue, 09 Mar 2021 06:45:39 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:52073) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJanx-0000Jd-G8; Tue, 09 Mar 2021 06:45:39 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 35FE12711; Tue, 9 Mar 2021 06:45:35 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:35 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 3FD24240054; Tue, 9 Mar 2021 06:45:33 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=RBzvJrr8fa3LF kTLuZP2K9V1LWoxzVtfWByZdu/YYZM=; b=LsghLgyGhawImL/IaxaITmxL+zdOz Pmfu210SO7dVHOiMsavCLCZEKuswm1RDi6+AiLa5PPNtjS/lDoc4wCZaG2agWf/+ /1BiNb1BsVeOMizdyX9eA1XHH4hc/Cd9dGmTakvBjSmxKs5Sb/PMtIiPZ4Pv/+4c 70a8hg2LnXAsB/zFxpwAUi68fXWOZMbt81+mIZWGPW13USoWpzBEwTYktm3xpqTe Wp1lZ7nvO4JWShdk7I9RMsQ7/BsJUX1rkPUTe6pUpUaUgnga3yYtVvaoJcnTCB1Q mtVGOXIfLoOhlW+mfK72Y6ztMLAndEAjTaMIs559WtmVmM+oaGqP9lt4g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=RBzvJrr8fa3LFkTLuZP2K9V1LWoxzVtfWByZdu/YYZM=; b=NtDsBJho Zrr3RZAloyVEah0F6/VSNFHB9GLNmJXElud2XrHMoHdtagLnUhN9BqW1Q5jzaVbS qEcH2zuns3JeB5NMt2lgJYF84nFnjGIiZVTO1SO2vNaMSymA46eL6R6mb3I2cbhm aJcQkv/pXTV1++WWf3o7eTEP1hVtyAkPIGqHZAwb8n9+BROYl4VWJ9h5ku/tx4Wj n8pWC98Gd+h9j0zyG5TvjwWGWseavQdrTTifuxp4fhAtbgPQ4plCArEEsrqz66en rfd4iekcQrk0ZTVdcb+PQGKd4bZCP0acvmOpKfW/8H5oRY61EW1K04fGVc1kzcm4 bJVuDotHMeQHeg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeelne curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 12/38] hw/block/nvme: fix Close Zone Date: Tue, 9 Mar 2021 12:44:46 +0100 Message-Id: <20210309114512.536489-13-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Dmitry Fomichev , Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Dmitry Fomichev Implicitly and Explicitly Open zones can be closed by Close Zone management function. This got broken by a recent commit ("hw/block/nvme: refactor zone resource management") and now such commands fail with Invalid Zone State Transition status. Modify nvm_zrm_close() function to make Close Zone work correctly. Signed-off-by: Dmitry Fomichev Signed-off-by: Klaus Jensen --- hw/block/nvme.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index ab4723ff319a..56ef07b74d27 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1319,14 +1319,13 @@ static uint16_t nvme_zrm_finish(NvmeNamespace *ns, = NvmeZone *zone) static uint16_t nvme_zrm_close(NvmeNamespace *ns, NvmeZone *zone) { switch (nvme_get_zone_state(zone)) { - case NVME_ZONE_STATE_CLOSED: - return NVME_SUCCESS; - case NVME_ZONE_STATE_EXPLICITLY_OPEN: case NVME_ZONE_STATE_IMPLICITLY_OPEN: nvme_aor_dec_open(ns); nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_CLOSED); /* fall through */ + case NVME_ZONE_STATE_CLOSED: + return NVME_SUCCESS; =20 default: return NVME_ZONE_INVAL_TRANSITION; --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615292160; cv=none; d=zohomail.com; s=zohoarc; b=L5VHv79dcajv67HpQpcrQTyAf2fJr/QfgA+6WDpBXTTeEbBGiYzAwGYnI66qP2jdTZ/0g5efXUZ4SpqV2HOYlSSkxUC/1gokR9MXWeywj8LpQtWVpZ34cs6cAsHAb968VgJOjDR2f2ehLFtvaWUkpBeH9sx4if8r/AFBigs9tFw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615292160; 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=UrKdYwGrVaGOulNLHfnJ/mvHVJitFlGANq1iGrvBrjE=; b=HXys7L1npyueDPDO5kDVa27jU4roSdUSDO05UHjWa/xNkIHG6Klzi71j/3fnrdTD/MbbreMckFIbLxHKTXn1WeBxDtwQkgA6wIXjnP11/ZBVKM6TRSscVU0YsVWqn1uf8dIq1XKga+c43/z/JlYc8hTaQd83Y/kEKPJn/wae8b8= 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 1615292159971631.0776185819598; Tue, 9 Mar 2021 04:15:59 -0800 (PST) Received: from localhost ([::1]:41184 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbHK-0001u8-DJ for importer@patchew.org; Tue, 09 Mar 2021 07:15:58 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42960) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJao1-0008SX-WF; Tue, 09 Mar 2021 06:45:42 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:56397) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJao0-0000OO-4g; Tue, 09 Mar 2021 06:45:41 -0500 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailnew.west.internal (Postfix) with ESMTP id D4E762705; Tue, 9 Mar 2021 06:45:37 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Tue, 09 Mar 2021 06:45:38 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id C69AF24005A; Tue, 9 Mar 2021 06:45:34 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=UrKdYwGrVaGOu lNLHfnJ/mvHVJitFlGANq1iGrvBrjE=; b=OF5l4nh3Sw5Hw5JL5VP1bV61KMfrl fMVkCpyB9Vecsjk8tbocVkEjubnP+a8PriqLzHDO2VNdA/XnfvRrJS9MIfMBeog7 9NpJe9r1ZWF3PEPY9kmZp105wvT5g6U5P40B9c5nQTig//ij1fFKjAy6dV1aPWWS jF1YHRnA23T2fRH1IViw6BYe737X6gyj4v2FKBmTglJw2wttjdvOI/JNbNlDEdPg kYjLPTdMV6WcvSnasd7MbrwFLsRz2pXimOBLKnX2VkActvQmSn0LBn6k79khfllS h2A5h+b8zP6ZqoiD9YJ9oPrEmzYGOG2Nn0qeYM18hxK8XZ62hEieqGczQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=UrKdYwGrVaGOulNLHfnJ/mvHVJitFlGANq1iGrvBrjE=; b=c5alaxzo iczre2y+vxpZZZULezogkJpg8LWvRSy+w+PuEYDKu1UyB4qLg1vh/si44aNrYHdq sHmaN851ilsrxCBe1wv8MwociwrOk54R8t4X8N4JBYamlrUE9sq2lp+IKb32gthI 1uTJESReqDJgowye9uaGstwsjTgDGmWHerNjH5is43Z1p2SeE19KsDWcX000zn6U g2XYW3GrHYE7KZOGkTG83nu+8VtgkXJhvuT/UNe2B+iMfSl0+oSplFaG74qeW7is UI0tfdzU11fwIQiusehlVnbUgGBLoQQhOFnSru9AdmTbGjPaBEdd+iUj0KNr9W1X ucCDXgnGuNxK9Q== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedtne curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 13/38] hw/block/nvme: add missing mor/mar constraint checks Date: Tue, 9 Mar 2021 12:44:47 +0100 Message-Id: <20210309114512.536489-14-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Dmitry Fomichev , Klaus Jensen , Gollu Appalanaidu , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen Firstly, if zoned.max_active is non-zero, zoned.max_open must be less than or equal to zoned.max_active. Secondly, if only zones.max_active is set, we have to explicitly set zones.max_open or we end up with an invalid MAR/MOR configuration. This is an artifact of the parameters not being zeroes-based like in the spec. Cc: Dmitry Fomichev Reported-by: Gollu Appalanaidu Signed-off-by: Klaus Jensen Reviewed-by: Dmitry Fomichev --- hw/block/nvme-ns.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c index fd73d0321109..0e8760020483 100644 --- a/hw/block/nvme-ns.c +++ b/hw/block/nvme-ns.c @@ -163,6 +163,18 @@ static int nvme_ns_zoned_check_calc_geometry(NvmeNames= pace *ns, Error **errp) return -1; } =20 + if (ns->params.max_active_zones) { + if (ns->params.max_open_zones > ns->params.max_active_zones) { + error_setg(errp, "max_open_zones (%u) exceeds max_active_zones= (%u)", + ns->params.max_open_zones, ns->params.max_active_zo= nes); + return -1; + } + + if (!ns->params.max_open_zones) { + ns->params.max_open_zones =3D ns->params.max_active_zones; + } + } + if (ns->params.zd_extension_size) { if (ns->params.zd_extension_size & 0x3f) { error_setg(errp, --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615292512; cv=none; d=zohomail.com; s=zohoarc; b=Pyd9LgfF62W06LvvniJWGhGAz56ZbwzTg4e8s2KCy58WLaCDto9Tu3DIsKp87uSWHu8gvCdA5lxucmlNKqe0fTur05hjJZfZllO268QuGI82VjPaUW8mtbLsVBOx9KTc/XhsCzq5in7Lexank7vWM0uKsMYocG//zPopXgAN0p4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615292512; 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=6tUgHYgUp2ybC6UX/X0aIvrDkDk1L72fYFBNNAan4Kc=; b=KAL2DM7fM0B/S2mBI0z0cVnxXS/dS6PJGnFSL61VU1JhhnZwCPFDfFHLSaTB/5FFyZPMy13kHqGmeyY/oHtQNV/MldA2EP9DltOI6NhUt8imIQ6zaIcLgIV5pUYQzCHqyvomlisLw/9R6kzxzSQohUkv9iwjdUcPwukgud9iHG8= 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 1615292512708494.9211256935297; Tue, 9 Mar 2021 04:21:52 -0800 (PST) Received: from localhost ([::1]:50196 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbN1-000607-FW for importer@patchew.org; Tue, 09 Mar 2021 07:21:51 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43026) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJao6-00006z-63; Tue, 09 Mar 2021 06:45:46 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:36413) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJao3-0000Rx-Ja; Tue, 09 Mar 2021 06:45:45 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 5F6EA2777; Tue, 9 Mar 2021 06:45:41 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:42 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 71DEA240054; Tue, 9 Mar 2021 06:45:36 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=6tUgHYgUp2ybC 6UX/X0aIvrDkDk1L72fYFBNNAan4Kc=; b=Te9Pv2W3Zfn8zJFlPpxWIzZ2t3zfM EZurQUoYse0cGhctP8fPD1eTyTFxx1fHfY4wftpkAFOKK7JKPKldERYXiRNvAnsV p4ejeTwNqAIZvttrG2jmQYcEaDEH/+8suI+lEhU0pmOiN3GNa5x7WdLAPo2JcoKu fCWaPN3B0s+o7sgHoHwP2UJ8/RveKuxCUHGW+aq0SxGfXlxnE+Utn+kcs5e4+xb/ dejuKfSkWzdQAJ+pTXwjQTZEpdjnyNKEYeRQBCfrUV7ZoVY53JNZ6N8ZH0MsPd6f JnUD3CPtI9sOHSPH5n9iKYQtwu/1hJrGEXAUHpigxrrxCjD7Xr0WYh4wg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=6tUgHYgUp2ybC6UX/X0aIvrDkDk1L72fYFBNNAan4Kc=; b=Ox33hHoJ /nW9b7PqZ2bu45wT5S6fCmEDchTiJ2/0mFEpMK94HfkBB0GLsY1v3kjWmmkll9JZ /A78BDVTSTBsHUlTWn+mDMk1X2acZ1yfNZhGRCzWBKqha2ca0yWFE5NiPgL495aA GH2xJWckClrxpW8+WXQv6EXt4GUV6gI4ieM2BIzpa4LGaltk9j55Efz3C0RcDzEu izGoEVt+WVGaGxl13EoIrDg0flX2Oo0lI0C6dH2t/rg7PltIYavb2IEw2+VHShLp kYRKY45mwpkFwU3uuDvokjipHHkSkD8smym5DiF2DbZnrClphYAAsZwKDlOuIu/F letimaXKWTNi7A== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeelne curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 14/38] hw/block/nvme: improve invalid zasl value reporting Date: Tue, 9 Mar 2021 12:44:48 +0100 Message-Id: <20210309114512.536489-15-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Dmitry Fomichev , Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen , Corne Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen The Zone Append Size Limit (ZASL) must be at least 4096 bytes, so improve the user experience by adding an early parameter check in nvme_check_constraints. When ZASL is still too small due to the host configuring the device for an even larger page size, convert the trace point in nvme_start_ctrl to an NVME_GUEST_ERR such that this is logged by QEMU instead of only traced. Reported-by: Corne Cc: Dmitry Fomichev Reviewed-by: Dmitry Fomichev Signed-off-by: Klaus Jensen --- hw/block/nvme.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 56ef07b74d27..2addaf7c4f70 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -3997,8 +3997,10 @@ static int nvme_start_ctrl(NvmeCtrl *n) n->zasl =3D n->params.mdts; } else { if (n->params.zasl_bs < n->page_size) { - trace_pci_nvme_err_startfail_zasl_too_small(n->params.zasl_bs, - n->page_size); + NVME_GUEST_ERR(pci_nvme_err_startfail_zasl_too_small, + "Zone Append Size Limit (ZASL) of %d bytes is t= oo " + "small; must be at least %d bytes", + n->params.zasl_bs, n->page_size); return -1; } n->zasl =3D 31 - clz32(n->params.zasl_bs / n->page_size); @@ -4517,6 +4519,12 @@ static void nvme_check_constraints(NvmeCtrl *n, Erro= r **errp) error_setg(errp, "zone append size limit has to be a power of = 2"); return; } + + if (n->params.zasl_bs < 4096) { + error_setg(errp, "zone append size limit must be at least " + "4096 bytes"); + return; + } } } =20 --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615292170; cv=none; d=zohomail.com; s=zohoarc; b=OU+05twfzQhMNY2YFul14EE4DNXbN61jOhCsyeHK6LFsD6qX9hrfQObkDbxkyPsR/trdKnzlLo6H0zPNdGzedAvxe+X8Zak9I+YM1nV11CglQse0AoT1fGi8i/VqR9JImsZ5OOPXqj59IRbR3DNx2UucImNbV4+kLj41EnCG56c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615292170; h=Content-Type: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=8kLCTHp85eguY/HHYXJKS5iwHeLIpO34j+MzMyA8bXk=; b=KbWPDgm23zJ3s4JHtEJS9ubhJUyc3HiTGimorqPfAw3pwe3djQIw9QQuJgVL8cc5pH5f8WQCG6LPIaA0D6zrv4peYwOPelgD/9RtbIw+QL3vB6dFK/SBf2XhwGHWFDgZcFfYjgiWkt0h7XewaT1T32qZjf+8M65op5cyA47PSxA= 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 1615292170298321.508224104856; Tue, 9 Mar 2021 04:16:10 -0800 (PST) Received: from localhost ([::1]:41564 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbHV-00023K-3s for importer@patchew.org; Tue, 09 Mar 2021 07:16:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42998) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJao4-0008Vd-87; Tue, 09 Mar 2021 06:45:44 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:54973) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJao2-0000RX-FW; Tue, 09 Mar 2021 06:45:43 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 1F00C271E; Tue, 9 Mar 2021 06:45:40 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:40 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 3622E24005C; Tue, 9 Mar 2021 06:45:38 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; s=fm2; bh= 8kLCTHp85eguY/HHYXJKS5iwHeLIpO34j+MzMyA8bXk=; b=Iao/aCa+rqVpaHX1 O+X4SaqCCQdUcQVAPwE4oR4HHtySDtxoUkasv6N1ByaUbMXleNuypY2tlaVgbI5S sXujf2q/Cs77mOxrcfx/9MqlncBGElSOkMsprjLQMU8qbqCV1dbpW0e/v+5nPHn9 p+BPwwDG8rqrYTf0IbFARAL9PY7y3XkOsmMH/Ka6rsBVVVxBaT4LX+WgPkHg+yXW TMQjeOOzIZ5BP8VNsVJYiKdIoLWhru0zRl7fBo+HjZ2rHNUuNxLvHKLEVBcA/Q22 6vefI7ZbQoUyddD11l8p5sNVtE1QtoEZSdTAMFMMnSEz2OBuuutKZcDeuUzezGq4 QAwJDg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; bh=8kLCTHp85eguY/HHYXJKS5iwHeLIpO34j+MzMyA8b Xk=; b=pQ9S1rlIxMR6jOgbq+ms1YhkgtM4nV/Tph/CHu9lzMO5ZKx7AhDetsdVI dRhhJ9E1sPtGKcXr/+7OB7Vmg1YMgpJkKiqnVitrl46YbSmt1s4kIaKOYUMemP4n gmfEM7IVNgRiHLY80OcDQrBuvyKjmpAmyaJMKdBd6O5d+25AX/lj5bEIQ/Aye55T abDesfD3P4SVehsgq7QIlfqSolT7bXeXMV5RtXi05NtyLZcKVsAO6PBSG21S950A IkP9Zi1ZzQiFnXe+nqUoLoop0QmVGAAkRHwPCpwDLqweKiZStL/w9Xdel+orFftC rJHaExpeuWgqdWXuK5mLvXNJnOfhQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfgggtgfesthekredtredtjeenucfhrhhomhepmfhlrghu shculfgvnhhsvghnuceoihhtshesihhrrhgvlhgvvhgrnhhtrdgukheqnecuggftrfgrth htvghrnhepteevuedugeevieehgeeileeufeetvddtkeetfeelgeehudfhjeeuledvhfff tdegnecukfhppeektddrudeijedrleekrdduledtnecuvehluhhsthgvrhfuihiivgeptd enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 15/38] hw/block/nvme: use locally assigned QEMU IEEE OUI Date: Tue, 9 Mar 2021 12:44:49 +0100 Message-Id: <20210309114512.536489-16-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Gollu Appalanaidu , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" From: Gollu Appalanaidu Commit 6eb7a071292a ("hw/block/nvme: change controller pci id") changed the controller to use a Red Hat assigned PCI Device and Vendor ID, but did not change the IEEE OUI away from the Intel IEEE OUI. Fix that and use the locally assigned QEMU IEEE OUI instead if the `use-intel-id` parameter is not explicitly set. Also reverse the Intel IEEE OUI bytes. Signed-off-by: Gollu Appalanaidu Signed-off-by: Klaus Jensen Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/block/nvme.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 2addaf7c4f70..a54ef34ce5e7 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -4707,9 +4707,17 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *p= ci_dev) id->cntlid =3D cpu_to_le16(n->cntlid); =20 id->rab =3D 6; - id->ieee[0] =3D 0x00; - id->ieee[1] =3D 0x02; - id->ieee[2] =3D 0xb3; + + if (n->params.use_intel_id) { + id->ieee[0] =3D 0xb3; + id->ieee[1] =3D 0x02; + id->ieee[2] =3D 0x00; + } else { + id->ieee[0] =3D 0x00; + id->ieee[1] =3D 0x54; + id->ieee[2] =3D 0x52; + } + id->mdts =3D n->params.mdts; id->ver =3D cpu_to_le32(NVME_SPEC_VER); id->oacs =3D cpu_to_le16(0); --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615291386; cv=none; d=zohomail.com; s=zohoarc; b=adnjhyCNRdE7vEF9SR6wb6ixm8lZVVqei96nyFw+SfIHq0vMNtUfY3a0SIYZxizL4kXc32GW/+ursWH6msIMiHdKmsE0N9X7EOgI2NHyK6B5IuEIi2wSSv/BG3SzxiRtMMK776FU8yXlgMYuf4p7dv1nJVPZAXSp76JycshMq8Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615291386; 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=9ip56/1vreSg0U5OPWQrt5MkA2j/R2lzAxHwugePUa0=; b=noGWk44UiMB34chZgdq0pfxds6sTRswxXevRyMA2Z9i1rYIAy3+OSKArQrIn01Cck/1Qv7CD3jg2wg8BWC0Uz51xStdCYk3BaH2WDaKmP7Q7FgDQsKHii8jQ33ugD+YoOO9AoM3UhCxazxb8duVrOz3HXBfeW2HIIh8cOfEDB+Y= 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 1615291386087421.03688420487595; Tue, 9 Mar 2021 04:03:06 -0800 (PST) Received: from localhost ([::1]:52304 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJb4q-0002yh-Oh for importer@patchew.org; Tue, 09 Mar 2021 07:03:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43040) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJao6-00007j-OQ; Tue, 09 Mar 2021 06:45:46 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:41499) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJao4-0000Sc-9A; Tue, 09 Mar 2021 06:45:46 -0500 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailnew.west.internal (Postfix) with ESMTP id 03BA42783; Tue, 9 Mar 2021 06:45:41 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Tue, 09 Mar 2021 06:45:42 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id D554324005A; Tue, 9 Mar 2021 06:45:39 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=9ip56/1vreSg0 U5OPWQrt5MkA2j/R2lzAxHwugePUa0=; b=LmkcRAVhvl7Ed+gzYYcszPugHtLSl scdQIJETRnWWrhfgMiaziyN/OC1bns4+rvvyYRxksxlUrK+IJCsi3Ln8MyP/ATsU /8HugM2bY4RbAMFkHq/URBhp7cayM+0/2inLrwCynYJUdN18kxfj1Rgia8nIdcV2 xJ+igb6zDN5nTnptP65A5ww4OoYQEQSjMjGGycIJGPfjFckTrkN4IvHrU2MoNCch DSyJGaoJvPWy02GBnQrmOjpU5TI166ASKuRd98LydQzhLkQCwUH9dwchD/ZFz1GT FlXPGjbCDpmt1U3qQN4svL/5cKn+9bks7uItRRrrBsU5sGrmjQfLZSJVw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=9ip56/1vreSg0U5OPWQrt5MkA2j/R2lzAxHwugePUa0=; b=uVP2mMxr vbFmf2RB2RTxQDUZ7mxIHGHPsGFiySMjZPVeIG1vDZHonNyhB/xfWgRZ+voiTTuC nyUswWzv2gZRoyn60/dIcV6ZcZgTeGTauJiJ/eqMuN1J0m5EcquoMAJqTXtFbgw9 miEXcGVT7Ngh8gq7aNCNQvhgwlC8P1+gVVgy66U7c9HQZnz1+loqjW6PD7CENmRK 8LMQ6PKzM2WcV/N0dk3pAMmS4+0eL76VU7onoMdBKvJeXPcMzzVSPcD87tu/3Uwj zBSFEVQF4SGWc71CRu1Ixt3JgqvlsglNNwvJKH7BTUkcZrt256FUOqp31F8FbAwy YyLDHU/Z0O0CTg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedune curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 16/38] hw/block/nvme: add broadcast nsid support flush command Date: Tue, 9 Mar 2021 12:44:50 +0100 Message-Id: <20210309114512.536489-17-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Gollu Appalanaidu , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Gollu Appalanaidu Add support for using the broadcast nsid to issue a flush on all namespaces through a single command. Signed-off-by: Gollu Appalanaidu Reviewed-by: Klaus Jensen Acked-by: Stefan Hajnoczi Acked-by: Keith Busch Signed-off-by: Klaus Jensen --- include/block/nvme.h | 8 +++ hw/block/nvme.c | 124 +++++++++++++++++++++++++++++++++++++++--- hw/block/trace-events | 2 + 3 files changed, 127 insertions(+), 7 deletions(-) diff --git a/include/block/nvme.h b/include/block/nvme.h index 9f8eb3988c0e..b23f3ae2279f 100644 --- a/include/block/nvme.h +++ b/include/block/nvme.h @@ -1062,6 +1062,14 @@ enum NvmeIdCtrlOcfs { NVME_OCFS_COPY_FORMAT_0 =3D 1 << 0, }; =20 +enum NvmeIdctrlVwc { + NVME_VWC_PRESENT =3D 1 << 0, + NVME_VWC_NSID_BROADCAST_NO_SUPPORT =3D 0 << 1, + NVME_VWC_NSID_BROADCAST_RESERVED =3D 1 << 1, + NVME_VWC_NSID_BROADCAST_CTRL_SPEC =3D 2 << 1, + NVME_VWC_NSID_BROADCAST_SUPPORT =3D 3 << 1, +}; + enum NvmeIdCtrlFrmw { NVME_FRMW_SLOT1_RO =3D 1 << 0, }; diff --git a/hw/block/nvme.c b/hw/block/nvme.c index a54ef34ce5e7..db1a3aabd8e8 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1466,6 +1466,41 @@ static void nvme_rw_cb(void *opaque, int ret) nvme_enqueue_req_completion(nvme_cq(req), req); } =20 +struct nvme_aio_flush_ctx { + NvmeRequest *req; + NvmeNamespace *ns; + BlockAcctCookie acct; +}; + +static void nvme_aio_flush_cb(void *opaque, int ret) +{ + struct nvme_aio_flush_ctx *ctx =3D opaque; + NvmeRequest *req =3D ctx->req; + uintptr_t *num_flushes =3D (uintptr_t *)&req->opaque; + + BlockBackend *blk =3D ctx->ns->blkconf.blk; + BlockAcctCookie *acct =3D &ctx->acct; + BlockAcctStats *stats =3D blk_get_stats(blk); + + trace_pci_nvme_aio_flush_cb(nvme_cid(req), blk_name(blk)); + + if (!ret) { + block_acct_done(stats, acct); + } else { + block_acct_failed(stats, acct); + nvme_aio_err(req, ret); + } + + (*num_flushes)--; + g_free(ctx); + + if (*num_flushes) { + return; + } + + nvme_enqueue_req_completion(nvme_cq(req), req); +} + static void nvme_aio_discard_cb(void *opaque, int ret) { NvmeRequest *req =3D opaque; @@ -1949,10 +1984,56 @@ static uint16_t nvme_compare(NvmeCtrl *n, NvmeReque= st *req) =20 static uint16_t nvme_flush(NvmeCtrl *n, NvmeRequest *req) { - block_acct_start(blk_get_stats(req->ns->blkconf.blk), &req->acct, 0, - BLOCK_ACCT_FLUSH); - req->aiocb =3D blk_aio_flush(req->ns->blkconf.blk, nvme_rw_cb, req); - return NVME_NO_COMPLETE; + uint32_t nsid =3D le32_to_cpu(req->cmd.nsid); + uintptr_t *num_flushes =3D (uintptr_t *)&req->opaque; + uint16_t status; + struct nvme_aio_flush_ctx *ctx; + NvmeNamespace *ns; + + trace_pci_nvme_flush(nvme_cid(req), nsid); + + if (nsid !=3D NVME_NSID_BROADCAST) { + req->ns =3D nvme_ns(n, nsid); + if (unlikely(!req->ns)) { + return NVME_INVALID_FIELD | NVME_DNR; + } + + block_acct_start(blk_get_stats(req->ns->blkconf.blk), &req->acct, = 0, + BLOCK_ACCT_FLUSH); + req->aiocb =3D blk_aio_flush(req->ns->blkconf.blk, nvme_rw_cb, req= ); + return NVME_NO_COMPLETE; + } + + /* 1-initialize; see comment in nvme_dsm */ + *num_flushes =3D 1; + + for (int i =3D 1; i <=3D n->num_namespaces; i++) { + ns =3D nvme_ns(n, i); + if (!ns) { + continue; + } + + ctx =3D g_new(struct nvme_aio_flush_ctx, 1); + ctx->req =3D req; + ctx->ns =3D ns; + + (*num_flushes)++; + + block_acct_start(blk_get_stats(ns->blkconf.blk), &ctx->acct, 0, + BLOCK_ACCT_FLUSH); + blk_aio_flush(ns->blkconf.blk, nvme_aio_flush_cb, ctx); + } + + /* account for the 1-initialization */ + (*num_flushes)--; + + if (*num_flushes) { + status =3D NVME_NO_COMPLETE; + } else { + status =3D req->status; + } + + return status; } =20 static uint16_t nvme_read(NvmeCtrl *n, NvmeRequest *req) @@ -2608,6 +2689,29 @@ static uint16_t nvme_io_cmd(NvmeCtrl *n, NvmeRequest= *req) return NVME_INVALID_NSID | NVME_DNR; } =20 + /* + * In the base NVM command set, Flush may apply to all namespaces + * (indicated by NSID being set to 0xFFFFFFFF). But if that feature is= used + * along with TP 4056 (Namespace Types), it may be pretty screwed up. + * + * If NSID is indeed set to 0xFFFFFFFF, we simply cannot associate the + * opcode with a specific command since we cannot determine a unique I= /O + * command set. Opcode 0x0 could have any other meaning than something + * equivalent to flushing and say it DOES have completely different + * semantics in some other command set - does an NSID of 0xFFFFFFFF th= en + * mean "for all namespaces, apply whatever command set specific comma= nd + * that uses the 0x0 opcode?" Or does it mean "for all namespaces, app= ly + * whatever command that uses the 0x0 opcode if, and only if, it allows + * NSID to be 0xFFFFFFFF"? + * + * Anyway (and luckily), for now, we do not care about this since the + * device only supports namespace types that includes the NVM Flush co= mmand + * (NVM and Zoned), so always do an NVM Flush. + */ + if (req->cmd.opcode =3D=3D NVME_CMD_FLUSH) { + return nvme_flush(n, req); + } + req->ns =3D nvme_ns(n, nsid); if (unlikely(!req->ns)) { return NVME_INVALID_FIELD | NVME_DNR; @@ -2619,8 +2723,6 @@ static uint16_t nvme_io_cmd(NvmeCtrl *n, NvmeRequest = *req) } =20 switch (req->cmd.opcode) { - case NVME_CMD_FLUSH: - return nvme_flush(n, req); case NVME_CMD_WRITE_ZEROES: return nvme_write_zeroes(n, req); case NVME_CMD_ZONE_APPEND: @@ -4750,7 +4852,15 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *p= ci_dev) NVME_ONCS_FEATURES | NVME_ONCS_DSM | NVME_ONCS_COMPARE | NVME_ONCS_COPY); =20 - id->vwc =3D (0x2 << 1) | 0x1; + /* + * NOTE: If this device ever supports a command set that does NOT use = 0x0 + * as a Flush-equivalent operation, support for the broadcast NSID in = Flush + * should probably be removed. + * + * See comment in nvme_io_cmd. + */ + id->vwc =3D NVME_VWC_NSID_BROADCAST_SUPPORT | NVME_VWC_PRESENT; + id->ocfs =3D cpu_to_le16(NVME_OCFS_COPY_FORMAT_0); id->sgls =3D cpu_to_le32(NVME_CTRL_SGLS_SUPPORT_NO_ALIGN | NVME_CTRL_SGLS_BITBUCKET); diff --git a/hw/block/trace-events b/hw/block/trace-events index 4b5ee04024f4..b04f7a3e1890 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -40,6 +40,7 @@ pci_nvme_map_prp(uint64_t trans_len, uint32_t len, uint64= _t prp1, uint64_t prp2, pci_nvme_map_sgl(uint16_t cid, uint8_t typ, uint64_t len) "cid %"PRIu16" t= ype 0x%"PRIx8" len %"PRIu64"" pci_nvme_io_cmd(uint16_t cid, uint32_t nsid, uint16_t sqid, uint8_t opcode= , const char *opname) "cid %"PRIu16" nsid %"PRIu32" sqid %"PRIu16" opc 0x%"= PRIx8" opname '%s'" pci_nvme_admin_cmd(uint16_t cid, uint16_t sqid, uint8_t opcode, const char= *opname) "cid %"PRIu16" sqid %"PRIu16" opc 0x%"PRIx8" opname '%s'" +pci_nvme_flush(uint16_t cid, uint32_t nsid) "cid %"PRIu16" nsid %"PRIu32"" pci_nvme_read(uint16_t cid, uint32_t nsid, uint32_t nlb, uint64_t count, u= int64_t lba) "cid %"PRIu16" nsid %"PRIu32" nlb %"PRIu32" count %"PRIu64" lb= a 0x%"PRIx64"" pci_nvme_write(uint16_t cid, const char *verb, uint32_t nsid, uint32_t nlb= , uint64_t count, uint64_t lba) "cid %"PRIu16" opname '%s' nsid %"PRIu32" n= lb %"PRIu32" count %"PRIu64" lba 0x%"PRIx64"" pci_nvme_rw_cb(uint16_t cid, const char *blkname) "cid %"PRIu16" blk '%s'" @@ -55,6 +56,7 @@ pci_nvme_compare_cb(uint16_t cid) "cid %"PRIu16"" pci_nvme_aio_discard_cb(uint16_t cid) "cid %"PRIu16"" pci_nvme_aio_copy_in_cb(uint16_t cid) "cid %"PRIu16"" pci_nvme_aio_zone_reset_cb(uint16_t cid, uint64_t zslba) "cid %"PRIu16" zs= lba 0x%"PRIx64"" +pci_nvme_aio_flush_cb(uint16_t cid, const char *blkname) "cid %"PRIu16" bl= k '%s'" pci_nvme_create_sq(uint64_t addr, uint16_t sqid, uint16_t cqid, uint16_t q= size, uint16_t qflags) "create submission queue, addr=3D0x%"PRIx64", sqid= =3D%"PRIu16", cqid=3D%"PRIu16", qsize=3D%"PRIu16", qflags=3D%"PRIu16"" pci_nvme_create_cq(uint64_t addr, uint16_t cqid, uint16_t vector, uint16_t= size, uint16_t qflags, int ien) "create completion queue, addr=3D0x%"PRIx6= 4", cqid=3D%"PRIu16", vector=3D%"PRIu16", qsize=3D%"PRIu16", qflags=3D%"PRI= u16", ien=3D%d" pci_nvme_del_sq(uint16_t qid) "deleting submission queue sqid=3D%"PRIu16"" --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615292201; cv=none; d=zohomail.com; s=zohoarc; b=oCse0Wre0TmofQ89W1CdLOVdFmcl21NBj5iI8NOeAecMozOJLNHVFfdrETpkcHcf267/ZyAmqFFsXGlu4RUGufJDsCqos5E1xWZAbhKLGMEk91AY8r3zkTDXOjMmYtBx/5AJkh3nVMy1UD7FQ0BG5/w9C975v4gvubNQFh3Z1cA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615292201; 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=aOmn5re5Met7Ki7b/tNZHVQqzNhkqaxr3jRGvFquYug=; b=bEe/wySDw9DILZ6dm5jjOXbgy9jzzr0l/wJDsTi8L8qbd56OoNXm2dcyH6EZ75wiB1BETPpyjr2pAZtxfuCOu8sZ2AfR6C6XrEEM9JZ5EIgr3gauJB/lAGH2pAqUu9tvVl4CxmrUX9PVs0cnsZ+1hSo5kbS+Ttz7Zol5Jd9lCX4= 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 1615292201823149.17993928100987; Tue, 9 Mar 2021 04:16:41 -0800 (PST) Received: from localhost ([::1]:42590 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbI0-0002WB-Kx for importer@patchew.org; Tue, 09 Mar 2021 07:16:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43094) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoB-0000ET-5u; Tue, 09 Mar 2021 06:45:55 -0500 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:33315) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJao6-0000UQ-Dp; Tue, 09 Mar 2021 06:45:50 -0500 Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id 38DBC2711; Tue, 9 Mar 2021 06:45:44 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Tue, 09 Mar 2021 06:45:44 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 68724240057; Tue, 9 Mar 2021 06:45:41 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=aOmn5re5Met7K i7b/tNZHVQqzNhkqaxr3jRGvFquYug=; b=YvmJFFf3enb+M4FJvVB9aHyvuxzYQ D+iTF2CwOPujRMgpko8y3GIYhcCA+/WAM0MtD1GefstqYiJU5kztaBXD15vxJIam TrUvxcsYe13sqQTTBWyp0zuRvTxWUaslAdOocMRzTRhir+3aEpy/s7ShP1lgd2jr KLcOBzATTirzVhM3lCVEuj7dzLvtLa3pQEqY5aAvCMwlqcgD8dd1NeIJqqK29vAT oIsZFfYUdwBOHfQ1JHqOCmWyb7+MFdR84Cf68cIORhd27L+sLrSFWErMMquIvinr MRVer+u9SDTM7z/xAFp1fLdyvx9eEzXUuvywQbdBicsfLEs2oMvMLowEw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=aOmn5re5Met7Ki7b/tNZHVQqzNhkqaxr3jRGvFquYug=; b=gC4PqG4K G5IU3FsEoNFCeTC5vALIVzjhsDst8qroiXgbWlVVQOpViyQ+7O768915GFuICnDx aXwnG8z5s6ZRHbMouygpVOFlXfHtuXRFjKwjCMu+4AOyzzAQSKXE1IKmTx0QuWqF WXfls2NFTJ9+2HpnT5n4KgNcgiImrOsd5HlXj1Qgc4dcuMrmokuIkjX8qdlRB2MP YUkBYr20rx8uFZRLmijPNomruTT8zqYNHlkAWr9PeVO/AcUibTWmWR+vSylJ7mdL wKy8h1T6naDP2JC+QULUuYRmiqf8cyhVJ9/HIceei+0KiRlM9kggR6nQMUrzJaY4 iCyYSUEEA8E68A== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedtne curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 17/38] hw/block/nvme: document 'mdts' nvme device parameter Date: Tue, 9 Mar 2021 12:44:51 +0100 Message-Id: <20210309114512.536489-18-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.25; envelope-from=its@irrelevant.dk; helo=wout2-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen Document the 'mdts' nvme device parameter. Signed-off-by: Klaus Jensen Reviewed-by: Keith Busch --- hw/block/nvme.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index db1a3aabd8e8..6921b1957d28 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -72,6 +72,12 @@ * completion when there are no outstanding AERs. When the maximum numbe= r of * enqueued events are reached, subsequent events will be dropped. * + * - `mdts` + * Indicates the maximum data transfer size for a command that transfers= data + * between host-accessible memory and the controller. The value is speci= fied + * as a power of two (2^n) and is in units of the minimum memory page si= ze + * (CAP.MPSMIN). The default value is 7 (i.e. 512 KiB). + * * - `zoned.append_size_limit` * The maximum I/O size in bytes that is allowed in Zone Append command. * The default is 128KiB. Since internally this this value is maintained= as --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615291809; cv=none; d=zohomail.com; s=zohoarc; b=AAXrthXfxa8TYcjNfqkpS25vzhaU0dhjy2SBdJaK7nEhbrPOpT8mZFP/bKu3jRtNCaZ4Fg4S2pNwkePyEMp//gCvk/DyTw4oObH1urIYWvdWOwdUqKkJ8g3SQ3d/sZrIF/axmBCHfMKwMV5rYQZjeBkaI8ASk5pjA6ZUFk1uuao= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615291809; 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=N2sxWmQY3TSN3vzsgnGyjfQ0Pkb9jD+qFZer4OZkbjM=; b=KgPw0C9C+38BSxIxktiv/RrcYIkQKOmDZfO9Q3gww05R2ua7GjZwEFDSdyk0RpA7RnN405K/yjQk4s8Xf06Mgp0dRbYWQVUOgHT4ABGiUpehmYS+abfqhrlgvgztDYhP+B/cBbqn4zMkR0ECHobm8qBrMO5eHH5ahJPMHVjLFjw= 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 1615291809254165.63850960563332; Tue, 9 Mar 2021 04:10:09 -0800 (PST) Received: from localhost ([::1]:33964 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbBg-0007Ea-2a for importer@patchew.org; Tue, 09 Mar 2021 07:10:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43096) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoB-0000Ed-6W; Tue, 09 Mar 2021 06:45:55 -0500 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:32771) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJao6-0000Uu-RT; Tue, 09 Mar 2021 06:45:49 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 9418A2785; Tue, 9 Mar 2021 06:45:44 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:45 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id D453E240054; Tue, 9 Mar 2021 06:45:42 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=N2sxWmQY3TSN3 vzsgnGyjfQ0Pkb9jD+qFZer4OZkbjM=; b=Wtg7JFQhAJQwhpe1vIE0eEDPqlfbm /DkjS/sEuintfLr1p1alKHtXm8V3+D27bUkj6rx8WVHoUa1KbJeFDSqi1E1UxpnJ C5IjgkILNXRROjqKxMsvjOBa6BW1wnqGTAgqbL04tB2YPRZ1OEj6kpVhdSspE113 aYY/7fJuMiTg9nSpjk/7vVJWmylZDZWCctClqkjrcZLHEYNN8Ibt7/hDLAiulv2H 7hT7QtzQaxzSgp0c2btsSa/YSaYX9LRmq6kmVvDxUNOPy+CrstfxWNkUQJz7jJ5J jqY7SyIzOkVz1B4I0pXbUD85SN7uCJpSSa3terj400D/SQUZqzCd9XvjQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=N2sxWmQY3TSN3vzsgnGyjfQ0Pkb9jD+qFZer4OZkbjM=; b=jxFUzFQe 5mkbF/Cibuj8ObV6BfLvL6wKrGqE20Rv7y22Uo1/4Wm6oHNyeS/zHdPwIhdgIncv dv29MfmreRoNk2mhzHmB6MwMDPpfoKsVJvFEfC974cVSgnGdCRGKusTjZnnldyMU F/ytnzGEIzhVzeY6HE8Y8/hGw/vhyR8GwgjDVESNgabFOCD4DYyks1p0MqEZiD8U Mdf9CXp1bhNBPbI6mGHu4EUha4lHKLMYdwQftk5Rb2m8vrSTYROy3FbXVsg7gpOG Syq06YkJ1OpKTrH68vHornAKIpYlgenWiCW11suuemOoRC6DXERuogsf9eHgBSRa BHJqCqorJcXy1A== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeduud enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 18/38] hw/block/nvme: deduplicate bad mdts trace event Date: Tue, 9 Mar 2021 12:44:52 +0100 Message-Id: <20210309114512.536489-19-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.25; envelope-from=its@irrelevant.dk; helo=wout2-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen If mdts is exceeded, trace it from a single place. Signed-off-by: Klaus Jensen Reviewed-by: Keith Busch --- hw/block/nvme.c | 6 +----- hw/block/trace-events | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 6921b1957d28..b7ec9dccc0fa 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1084,6 +1084,7 @@ static inline uint16_t nvme_check_mdts(NvmeCtrl *n, s= ize_t len) uint8_t mdts =3D n->params.mdts; =20 if (mdts && len > n->page_size << mdts) { + trace_pci_nvme_err_mdts(len); return NVME_INVALID_FIELD | NVME_DNR; } =20 @@ -1954,7 +1955,6 @@ static uint16_t nvme_compare(NvmeCtrl *n, NvmeRequest= *req) =20 status =3D nvme_check_mdts(n, len); if (status) { - trace_pci_nvme_err_mdts(nvme_cid(req), len); return status; } =20 @@ -2057,7 +2057,6 @@ static uint16_t nvme_read(NvmeCtrl *n, NvmeRequest *r= eq) =20 status =3D nvme_check_mdts(n, data_size); if (status) { - trace_pci_nvme_err_mdts(nvme_cid(req), data_size); goto invalid; } =20 @@ -2125,7 +2124,6 @@ static uint16_t nvme_do_write(NvmeCtrl *n, NvmeReques= t *req, bool append, if (!wrz) { status =3D nvme_check_mdts(n, data_size); if (status) { - trace_pci_nvme_err_mdts(nvme_cid(req), data_size); goto invalid; } } @@ -2619,7 +2617,6 @@ static uint16_t nvme_zone_mgmt_recv(NvmeCtrl *n, Nvme= Request *req) =20 status =3D nvme_check_mdts(n, data_size); if (status) { - trace_pci_nvme_err_mdts(nvme_cid(req), data_size); return status; } =20 @@ -3061,7 +3058,6 @@ static uint16_t nvme_get_log(NvmeCtrl *n, NvmeRequest= *req) =20 status =3D nvme_check_mdts(n, len); if (status) { - trace_pci_nvme_err_mdts(nvme_cid(req), len); return status; } =20 diff --git a/hw/block/trace-events b/hw/block/trace-events index b04f7a3e1890..e1a85661cf3f 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -114,7 +114,7 @@ pci_nvme_clear_ns_close(uint32_t state, uint64_t slba) = "zone state=3D%"PRIu32", sl pci_nvme_clear_ns_reset(uint32_t state, uint64_t slba) "zone state=3D%"PRI= u32", slba=3D%"PRIu64" transitioned to Empty state" =20 # nvme traces for error conditions -pci_nvme_err_mdts(uint16_t cid, size_t len) "cid %"PRIu16" len %zu" +pci_nvme_err_mdts(size_t len) "len %zu" pci_nvme_err_req_status(uint16_t cid, uint32_t nsid, uint16_t status, uint= 8_t opc) "cid %"PRIu16" nsid %"PRIu32" status 0x%"PRIx16" opc 0x%"PRIx8"" pci_nvme_err_addr_read(uint64_t addr) "addr 0x%"PRIx64"" pci_nvme_err_addr_write(uint64_t addr) "addr 0x%"PRIx64"" --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615292504; cv=none; d=zohomail.com; s=zohoarc; b=SQY+CwOZYAP2R6KX1AsCrdbbULF7Ajs8jXqkXIC/0S2CSniqPH1wJGoD7m0E29lxbJFBuFltdkP0qpZ6b97crDI7F/oCn/2Khi1bQ2owo87FqvhFRPePvJL0NcmTYwAVei7f2oVV7rLOMiTP3PblGWXfZsp3eGavEu6gQ3uh1wU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615292504; 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=sutYCGjlvLUxWTbCNN8K+RVTXbb/J4WzRLvRbkHGppI=; b=IRKkUozKd2EdUcSotvb/UHpL7ufKkt44JVfFB5wMou7vRPOXJ4gtOLcL37rwiWznzgSPEXVdZHh0HuNzp6ax8qo7o7nZhDcfcT+rSOqXcmzchLb4nv7sylmqDrbH79fF9YYSp+GQ0iiPhyVBqu+n+f/QkvgNsWsCfBK+ZRORNdg= 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 1615292504143561.456291128998; Tue, 9 Mar 2021 04:21:44 -0800 (PST) Received: from localhost ([::1]:49850 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbMs-0005rh-8s for importer@patchew.org; Tue, 09 Mar 2021 07:21:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43124) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoF-0000FJ-QI; Tue, 09 Mar 2021 06:45:56 -0500 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:55011) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJao8-0000Wc-5O; Tue, 09 Mar 2021 06:45:54 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 0E764277D; Tue, 9 Mar 2021 06:45:45 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:46 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 4D00224005A; Tue, 9 Mar 2021 06:45:44 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=sutYCGjlvLUxW TbCNN8K+RVTXbb/J4WzRLvRbkHGppI=; b=k8+hyKRFaLxpmlcH1cab4NZ+cke3G Sv2ikZTx8UTkwSTuoxGbNTVNWo9DyQPaoTfKjPV6vtToa8PUpt81+NMXb9oGOWiH yKTHpeLK/Dqdrm+DSSbHUso1RNUbcTg7BYm2MZjHCvCQU4ZPcnNt9y4bFxKpVSNu 04lYYQbcy4uLfq9fSiCjcRwSD1x4ryfOmeLK/GKpTBzHwczPaVXt+NnazbYzAsxT 5/VdNg9ktI+GSM8T8YsmZwgqinzucxkqYUOtKWaYUa+bRNKsci8/vpXom7eEPkPh ZlxsrOAkUcB70in9AEpvKf/ue36ZP2Qr+2apnlNVJJicXt1lmbWQK9Zkg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=sutYCGjlvLUxWTbCNN8K+RVTXbb/J4WzRLvRbkHGppI=; b=UmK9DOvC LEIlhDEceWrW34NFFyMOYEi/7tuLFImua3lUklaqWiIsJwdKfzxkg8CzKn7BZI69 wP187K4zsUhIy4ipmkJzkmIlf7m+3+FY8BKRtt2NlFwReyzx2hSjGLR3fXplmgHf 6+FP6pcnRt5ZK8d3GD5ehCS12ELZnHAszmsDEt5OtvsffbG3J6SJ7DwP0DzK9RFY ose+b6eoLkeQ8qMQIqY9RroaR1FNUt72CRBPGLv7zMG23F0HxPbjfr7pcORpH8gz FATU3I1HOoPDtRkHM/zmjtk7wSrVuMXzFyxNJQrzW1wds687DPDZVev0qBI+Ln7m n+2CnS99UDi4MQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeduud enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 19/38] hw/block/nvme: align zoned.zasl with mdts Date: Tue, 9 Mar 2021 12:44:53 +0100 Message-Id: <20210309114512.536489-20-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.25; envelope-from=its@irrelevant.dk; helo=wout2-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen ZASL (Zone Append Size Limit) is defined exactly like MDTS (Maximum Data Transfer Size), that is, it is a value in units of the minimum memory page size (CAP.MPSMIN) and is reported as a power of two. The 'mdts' nvme device parameter is specified as in the spec, but the 'zoned.append_size_limit' parameter is specified in bytes. This is suboptimal for a number of reasons: 1. It is just plain confusing wrt. the definition of mdts. 2. There is a lot of complexity involved in validating the value; it must be a power of two, it should be larger than 4k, if it is zero we set it internally to mdts, but still report it as zero. 3. While "hw/block/nvme: improve invalid zasl value reporting" slightly improved the handling of the parameter, the validation is still wrong; it does not depend on CC.MPS, it depends on CAP.MPSMIN. And we are not even checking that it is actually less than or equal to MDTS, which is kinda the *one* condition it must satisfy. Fix this by defining zasl exactly like mdts and checking the one thing that it must satisfy (that it is less than or equal to mdts). Also, change the default value from 128KiB to 0 (aka, whatever mdts is). Signed-off-by: Klaus Jensen Reviewed-by: Keith Busch --- hw/block/nvme.h | 4 +-- hw/block/nvme.c | 59 +++++++++++++------------------------------ hw/block/trace-events | 2 +- 3 files changed, 19 insertions(+), 46 deletions(-) diff --git a/hw/block/nvme.h b/hw/block/nvme.h index cb2b5175f1a1..f45ace0cff5b 100644 --- a/hw/block/nvme.h +++ b/hw/block/nvme.h @@ -20,7 +20,7 @@ typedef struct NvmeParams { uint32_t aer_max_queued; uint8_t mdts; bool use_intel_id; - uint32_t zasl_bs; + uint8_t zasl; bool legacy_cmb; } NvmeParams; =20 @@ -171,8 +171,6 @@ typedef struct NvmeCtrl { QTAILQ_HEAD(, NvmeAsyncEvent) aer_queue; int aer_queued; =20 - uint8_t zasl; - NvmeSubsystem *subsys; =20 NvmeNamespace namespace; diff --git a/hw/block/nvme.c b/hw/block/nvme.c index b7ec9dccc0fa..23e1c91ed258 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -22,8 +22,8 @@ * cmb_size_mb=3D, \ * [pmrdev=3D,] \ * max_ioqpairs=3D, \ - * aerl=3D, aer_max_queued=3D, \ - * mdts=3D,zoned.append_size_limit=3D, \ + * aerl=3D,aer_max_queued=3D, \ + * mdts=3D,zoned.zasl=3D, \ * subsys=3D * -device nvme-ns,drive=3D,bus=3D,nsid=3D,\ * zoned=3D, \ @@ -78,13 +78,11 @@ * as a power of two (2^n) and is in units of the minimum memory page si= ze * (CAP.MPSMIN). The default value is 7 (i.e. 512 KiB). * - * - `zoned.append_size_limit` - * The maximum I/O size in bytes that is allowed in Zone Append command. - * The default is 128KiB. Since internally this this value is maintained= as - * ZASL =3D log2( / ), some values assig= ned - * to this property may be rounded down and result in a lower maximum ZA - * data size being in effect. By setting this property to 0, users can m= ake - * ZASL to be equal to MDTS. This property only affects zoned namespaces. + * - `zoned.zasl` + * Indicates the maximum data transfer size for the Zone Append command.= Like + * `mdts`, the value is specified as a power of two (2^n) and is in unit= s of + * the minimum memory page size (CAP.MPSMIN). The default value is 0 (i.= e. + * defaulting to the value of `mdts`). * * nvme namespace device parameters * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2144,10 +2142,9 @@ static uint16_t nvme_do_write(NvmeCtrl *n, NvmeReque= st *req, bool append, goto invalid; } =20 - if (nvme_l2b(ns, nlb) > (n->page_size << n->zasl)) { - trace_pci_nvme_err_append_too_large(slba, nlb, n->zasl); - status =3D NVME_INVALID_FIELD; - goto invalid; + if (n->params.zasl && data_size > n->page_size << n->params.za= sl) { + trace_pci_nvme_err_zasl(data_size); + return NVME_INVALID_FIELD | NVME_DNR; } =20 slba =3D zone->w_ptr; @@ -3221,9 +3218,8 @@ static uint16_t nvme_identify_ctrl_csi(NvmeCtrl *n, N= vmeRequest *req) if (c->csi =3D=3D NVME_CSI_NVM) { return nvme_rpt_empty_id_struct(n, req); } else if (c->csi =3D=3D NVME_CSI_ZONED) { - if (n->params.zasl_bs) { - id.zasl =3D n->zasl; - } + id.zasl =3D n->params.zasl; + return nvme_dma(n, (uint8_t *)&id, sizeof(id), DMA_DIRECTION_FROM_DEVICE, req); } @@ -4097,19 +4093,6 @@ static int nvme_start_ctrl(NvmeCtrl *n) nvme_init_sq(&n->admin_sq, n, n->bar.asq, 0, 0, NVME_AQA_ASQS(n->bar.aqa) + 1); =20 - if (!n->params.zasl_bs) { - n->zasl =3D n->params.mdts; - } else { - if (n->params.zasl_bs < n->page_size) { - NVME_GUEST_ERR(pci_nvme_err_startfail_zasl_too_small, - "Zone Append Size Limit (ZASL) of %d bytes is t= oo " - "small; must be at least %d bytes", - n->params.zasl_bs, n->page_size); - return -1; - } - n->zasl =3D 31 - clz32(n->params.zasl_bs / n->page_size); - } - nvme_set_timestamp(n, 0ULL); =20 QTAILQ_INIT(&n->aer_queue); @@ -4618,17 +4601,10 @@ static void nvme_check_constraints(NvmeCtrl *n, Err= or **errp) host_memory_backend_set_mapped(n->pmr.dev, true); } =20 - if (n->params.zasl_bs) { - if (!is_power_of_2(n->params.zasl_bs)) { - error_setg(errp, "zone append size limit has to be a power of = 2"); - return; - } - - if (n->params.zasl_bs < 4096) { - error_setg(errp, "zone append size limit must be at least " - "4096 bytes"); - return; - } + if (n->params.zasl > n->params.mdts) { + error_setg(errp, "zoned.zasl (Zone Append Size Limit) must be less= " + "than or equal to mdts (Maximum Data Transfer Size)"); + return; } } =20 @@ -4997,8 +4973,7 @@ static Property nvme_props[] =3D { DEFINE_PROP_UINT8("mdts", NvmeCtrl, params.mdts, 7), DEFINE_PROP_BOOL("use-intel-id", NvmeCtrl, params.use_intel_id, false), DEFINE_PROP_BOOL("legacy-cmb", NvmeCtrl, params.legacy_cmb, false), - DEFINE_PROP_SIZE32("zoned.append_size_limit", NvmeCtrl, params.zasl_bs, - NVME_DEFAULT_MAX_ZA_SIZE), + DEFINE_PROP_UINT8("zoned.zasl", NvmeCtrl, params.zasl, 0), DEFINE_PROP_END_OF_LIST(), }; =20 diff --git a/hw/block/trace-events b/hw/block/trace-events index e1a85661cf3f..25ba51ea5405 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -115,6 +115,7 @@ pci_nvme_clear_ns_reset(uint32_t state, uint64_t slba) = "zone state=3D%"PRIu32", sl =20 # nvme traces for error conditions pci_nvme_err_mdts(size_t len) "len %zu" +pci_nvme_err_zasl(size_t len) "len %zu" pci_nvme_err_req_status(uint16_t cid, uint32_t nsid, uint16_t status, uint= 8_t opc) "cid %"PRIu16" nsid %"PRIu32" status 0x%"PRIx16" opc 0x%"PRIx8"" pci_nvme_err_addr_read(uint64_t addr) "addr 0x%"PRIx64"" pci_nvme_err_addr_write(uint64_t addr) "addr 0x%"PRIx64"" @@ -144,7 +145,6 @@ pci_nvme_err_zone_boundary(uint64_t slba, uint32_t nlb,= uint64_t zcap) "lba 0x%" pci_nvme_err_zone_invalid_write(uint64_t slba, uint64_t wp) "lba 0x%"PRIx6= 4" wp 0x%"PRIx64"" pci_nvme_err_zone_write_not_ok(uint64_t slba, uint32_t nlb, uint16_t statu= s) "slba=3D%"PRIu64", nlb=3D%"PRIu32", status=3D0x%"PRIx16"" pci_nvme_err_zone_read_not_ok(uint64_t slba, uint32_t nlb, uint16_t status= ) "slba=3D%"PRIu64", nlb=3D%"PRIu32", status=3D0x%"PRIx16"" -pci_nvme_err_append_too_large(uint64_t slba, uint32_t nlb, uint8_t zasl) "= slba=3D%"PRIu64", nlb=3D%"PRIu32", zasl=3D%"PRIu8"" pci_nvme_err_insuff_active_res(uint32_t max_active) "max_active=3D%"PRIu32= " zone limit exceeded" pci_nvme_err_insuff_open_res(uint32_t max_open) "max_open=3D%"PRIu32" zone= limit exceeded" pci_nvme_err_zd_extension_map_error(uint32_t zone_idx) "can't map descript= or extension for zone_idx=3D%"PRIu32"" --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615292875; cv=none; d=zohomail.com; s=zohoarc; b=fYnuH5xmBxFymgHnrxESnCDM2uc9tnYDU4L9Gtwmdp/Q4tEAm2heKxRJFrUzUP38Nx51RRwn5CYORrkvq7BO0sJAdOX/Rm3qoER9IZwAGUPJoPYnYCB3g+LksQxHxWt+cyskzx2ptTqUTlWWJain715NPV7sWVr7AbnIcJ6rwpk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615292875; 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=qCxJEoDSwUl1FJEMHsPgvHJkiE+SsVnjF8Ib1ZKWozI=; b=cGWBUuv6wyuOLE5aN0jdkQfviy4zhds4OYXXH7l0EPlYNZloMieRXSXS9uoDEFSsC6+a6IMTW7DjC6yXxwbYCGuG1weCZ6FaSnhDoLAYYnwRut2cxVtYVXz1rKvc4XR771dwGguBDbDm/KRwVFmJ08aKT3qNaRLrsA0kW17EYSY= 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 1615292875258172.11563698962482; Tue, 9 Mar 2021 04:27:55 -0800 (PST) Received: from localhost ([::1]:58492 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbSr-0001Bs-MZ for importer@patchew.org; Tue, 09 Mar 2021 07:27:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43170) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoI-0000GQ-4z; Tue, 09 Mar 2021 06:45:58 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:54085) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoB-0000Ye-BR; Tue, 09 Mar 2021 06:45:57 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id B536F271E; Tue, 9 Mar 2021 06:45:47 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:48 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id B9EFA240057; Tue, 9 Mar 2021 06:45:45 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=qCxJEoDSwUl1F JEMHsPgvHJkiE+SsVnjF8Ib1ZKWozI=; b=n1rQ+7h6RXrEzQ3UmxHXOZ8LaVrOw 0goVI+oyItBMu0l5CI+zxplPmc9/TctsBIN0Q7ZoNq1XycCVZdJWgDwcLFs1TGBX okvxSyex9ED5CCg0PPyyJyZUUg2dmbcscj3UzFXFIzwSj/AscKweOA086uGD8LVt uxPk5W6+S0J5MLDq9FYGmykHaaMoXoS6UEVRPu9XJn0f7BcBe71L9d6t8+Ib4a+N 78QGsQkd2SOErjHxd44EmyCG6WWt+zfi4Yc1bqzIESJEMQkehHPgnE6ajJ6QTiXA y4R2ndZLylpgxbdgD4ja2w7a6vdc+AJhanT5TcI/Pw+hemXZznhIdv0mQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=qCxJEoDSwUl1FJEMHsPgvHJkiE+SsVnjF8Ib1ZKWozI=; b=X016JFdi OB35pgSQ6yg2ZExJRsGFUxC7Br91Uyr1XG45Z7kipYK5XG6TCtB7ozNOnQmoO74y b0dyfAQ7Vca+uwaKCn2d3XZYbU3u1SQofZvWSA6LkedeY27Cm1u/ApQMbrQxtE3N h0J+9jJ7WKqncbEVdm7FSBtIIA42f4hbmF2nUK5SvJwcCCtyY/7SZI0jG8Uve+XS lbhIFX8rn13qEqfxYVw361lwVaT3vAiY1F+EHgbMrmE/+htjCnG3wx/LRr0TmXzi QbTnpIZF3DFqzBVPY6/eYnm9Gy4IP7tbw1ELDzT/O4mXI249GAifk4A0xou4/Bw0 1tD5fooQqLNZUw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedufe enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 20/38] hw/block/nvme: remove unnecessary endian conversion Date: Tue, 9 Mar 2021 12:44:54 +0100 Message-Id: <20210309114512.536489-21-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Gollu Appalanaidu , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Gollu Appalanaidu Remove an unnecessary le_to_cpu conversion in Identify. Signed-off-by: Gollu Appalanaidu Signed-off-by: Klaus Jensen Reviewed-by: Minwoo Im --- hw/block/nvme.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 23e1c91ed258..64340a00df4e 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -3422,7 +3422,7 @@ static uint16_t nvme_identify(NvmeCtrl *n, NvmeReques= t *req) { NvmeIdentify *c =3D (NvmeIdentify *)&req->cmd; =20 - switch (le32_to_cpu(c->cns)) { + switch (c->cns) { case NVME_ID_CNS_NS: /* fall through */ case NVME_ID_CNS_NS_PRESENT: --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615293062; cv=none; d=zohomail.com; s=zohoarc; b=HWmqfgeQuDKa19FEJOTjoEWgVMASp95mH82u6GsqfS79Ad9uTlQJM2DILtiBuzjmv6L+XRVk2W/ULBvCg2LfyxRbl9B/pN3JlK3OSEcJ6O/uVGRVj93FYpW3lASE3EQou9xl/FC5EOQWFMC7p2Oy6Z/Kzl1xfNlxWDJrws++U9Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615293062; 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=9kfoo5LmIjYQUskPSybh7IJXb6p46qFOfRO7WxR1oZI=; b=Enkzq6sPqF5m/J1yxdGeRapVVpusfTmZqcN/DQPIjUFyKH3nVajOv/Osah3WppW62UxYzStiNGSDrBKcZV430keWahJVL2Bsq5ehyKwO2t0G2qBJz980JibiI/Qo3ROvhvK+s1dKSITTeL+JY/JakvlvzAjS2H980RZZUW39+aw= 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 1615293062001311.6501667231705; Tue, 9 Mar 2021 04:31:02 -0800 (PST) Received: from localhost ([::1]:33352 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbVs-0002U3-MO for importer@patchew.org; Tue, 09 Mar 2021 07:31:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43328) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaob-0000U9-2s; Tue, 09 Mar 2021 06:46:17 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:57557) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoZ-0000Zw-9K; Tue, 09 Mar 2021 06:46:16 -0500 Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailnew.west.internal (Postfix) with ESMTP id 704522783; Tue, 9 Mar 2021 06:45:49 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Tue, 09 Mar 2021 06:45:50 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 713B924005D; Tue, 9 Mar 2021 06:45:47 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=9kfoo5LmIjYQU skPSybh7IJXb6p46qFOfRO7WxR1oZI=; b=PZM3tPsOoPPNWobyeZJQqqQdervqA DpmhhL+GUXKE8Ax06Yl+0K9l5VQD+sOYwfdidJfBSpSTGub9fJ40OirnLqVE8gGz OiJT/jNGbRQrPfAbgTH+LlQ4ogg7TF+nAJdEJValDwDhswiRenGdukM7moRZ8HG+ WrBGTVKtFQqvFV2f71zZQHTyyLiqgby7zKe6OSTnT2pdeQCFJ3wxQW2ridYev86s Cug3hvUepOGwo8Kx08qr7ZuwWd8+bgUtkFZ38oK1yq5A6zpsCS5eAcugLt9dSbkt U4sBtR7pavmBehEG5rxc1KspGEF79YwyqVENK8nEXRbKV4tNWM12u2hcA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=9kfoo5LmIjYQUskPSybh7IJXb6p46qFOfRO7WxR1oZI=; b=LKb3HwUi BrJ5vpmoyWSm52fqWqxBTVMXGpHWfSgWSkuISeTpUFLvndPy+u50lnsnHFRCQppt XwNd0N9FS/aVf5UaKbT74S2+RU86PjJ7+mtaJUHss83Y9sPPJ1AWt29/yoDCzD9A sDsJqRaZEvLvNUXzNvNW01B7GarbkjLyv73yfwhD3jnRr0hXxLNHNYbL80FEmtRw 6f42dnhMoy7kUHAGgHG2vNyQZ8pptVPGZaWaddis7Vt7OF41rpr6VWTJPbDzDDry dLuDjgxOe3vPmFuDvMwcmHWrDgVJI4Tqq4P5Wznu0hCC7h2uOcT521Vq64qgEpcn nIENrr0I90X3iw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedune curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 21/38] hw/block/nvme: add identify trace event Date: Tue, 9 Mar 2021 12:44:55 +0100 Message-Id: <20210309114512.536489-22-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Gollu Appalanaidu , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Gollu Appalanaidu Add a trace event for the Identify command. Signed-off-by: Gollu Appalanaidu Signed-off-by: Klaus Jensen Reviewed-by: Minwoo Im --- hw/block/nvme.c | 3 +++ hw/block/trace-events | 1 + 2 files changed, 4 insertions(+) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 64340a00df4e..f5538fd00f49 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -3422,6 +3422,9 @@ static uint16_t nvme_identify(NvmeCtrl *n, NvmeReques= t *req) { NvmeIdentify *c =3D (NvmeIdentify *)&req->cmd; =20 + trace_pci_nvme_identify(nvme_cid(req), c->cns, le16_to_cpu(c->ctrlid), + c->csi); + switch (c->cns) { case NVME_ID_CNS_NS: /* fall through */ diff --git a/hw/block/trace-events b/hw/block/trace-events index 25ba51ea5405..c165ee2a97c3 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -61,6 +61,7 @@ pci_nvme_create_sq(uint64_t addr, uint16_t sqid, uint16_t= cqid, uint16_t qsize, pci_nvme_create_cq(uint64_t addr, uint16_t cqid, uint16_t vector, uint16_t= size, uint16_t qflags, int ien) "create completion queue, addr=3D0x%"PRIx6= 4", cqid=3D%"PRIu16", vector=3D%"PRIu16", qsize=3D%"PRIu16", qflags=3D%"PRI= u16", ien=3D%d" pci_nvme_del_sq(uint16_t qid) "deleting submission queue sqid=3D%"PRIu16"" pci_nvme_del_cq(uint16_t cqid) "deleted completion queue, cqid=3D%"PRIu16"" +pci_nvme_identify(uint16_t cid, uint8_t cns, uint16_t ctrlid, uint8_t csi)= "cid %"PRIu16" cns 0x%"PRIx8" ctrlid %"PRIu16" csi 0x%"PRIx8"" pci_nvme_identify_ctrl(void) "identify controller" pci_nvme_identify_ctrl_csi(uint8_t csi) "identify controller, csi=3D0x%"PR= Ix8"" pci_nvme_identify_ns(uint32_t ns) "nsid %"PRIu32"" --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615292185; cv=none; d=zohomail.com; s=zohoarc; b=YLUmtFTmUe7THPVZaivN6P9JMQ2WoW30kQKZpV9cKyAtuBrKZNkF39/3BsiTX9OQ48K6l1+m5tk4QCD+QIxbK/AGSPiJgUX64g7fsP0mqADhl/HDQxD8Y5rc1HUle3i1qN22VSr3eKcfkpOyXNbxe0mhZ1uoFZ1MYMvgtC451pI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615292185; 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=lcFhqdQmFIMeoc4OeqdEW6d+jb8xy7ztJHSf3HbE1Jg=; b=JKW5Jc/OXBWYWKdIhpezrcQFHUzsAAPi67oPi+uOBQfPPw/9rXdlGnjXhgi4ZlgCukUoegCZZ7CnBJYyGmoztclC9+lnhu+vCQx93K5hCskMkLhX6g7qmKKkmqh9lrPQrC/HKab3TehBs+LvyP63O6QkEPLfkEKCBWCrRgqCjj8= 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 1615292185564963.846223914983; Tue, 9 Mar 2021 04:16:25 -0800 (PST) Received: from localhost ([::1]:42086 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbHk-0002GQ-Bm for importer@patchew.org; Tue, 09 Mar 2021 07:16:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43374) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoc-0000VM-70; Tue, 09 Mar 2021 06:46:22 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:58471) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoZ-0000aH-9C; Tue, 09 Mar 2021 06:46:17 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 36B92261C; Tue, 9 Mar 2021 06:45:51 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:51 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 1AC1724005E; Tue, 9 Mar 2021 06:45:49 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=lcFhqdQmFIMeo c4OeqdEW6d+jb8xy7ztJHSf3HbE1Jg=; b=ioa2a6VFIRB3iu3ij/OLKNHL9HIT9 gA+q+UWWeLVPpu1tYzVIhG4XOjCq54ntp6aCx38U+64Ev5R0v91jhVSN8NLQoJ9A x6qi8pdSzs8UkX+JxTNSNjTIWsltK75gmCKiO71JKgoa6LmssdCcewT0Ne0v+KNj qaoR6cw3Bin6TUE7ThnCzBhNW3aJwYqFvn1VVnjDO6cMQSIvLh4MFxgbkPKj0Buj w2GcaKxpTRER4kfbIjwAOoJbxxn0HbHHYTEEv83jAanz+w0SOD2eEQz+mnEekVvV kPJJ94w/KV1a8K7zZXk42QcKiepz3EwvTuxTpfxtuSGFT6Q5yUg0PeJow== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=lcFhqdQmFIMeoc4OeqdEW6d+jb8xy7ztJHSf3HbE1Jg=; b=U9tzOLas 4xXtsCaLT2gGJ9pDPkOUHByZiFs8pzVEFrLGwwdEmubcYt3NQQqqKnaxtb48l88D SrdHWFJpIRaI5dhB3CStY65guPfieHivhcGlnzH8gH24hqQoq4624EvWOxHuYcgL EN/kP7OPRYY8PqwvLpfdpMfcsSmVGBWfwQqo+M3toXJuEWjZ+tkJ9eJIhu6ZH0ef QEKwOMqx50ANbzYeGtxh3+QD/M/ADDqY/PkLJyjgVdbBpW9ZDUKskE/YgWg4d4U1 doFcRS0Ay7k83aKe3NTiROvQ/W+YUkfFpfutpNNNGHLdFxOG8s1lLIYIt72nSlr0 2hz1Ew+S4IAFtQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedufe enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 22/38] hw/block/nvme: fix potential compilation error Date: Tue, 9 Mar 2021 12:44:56 +0100 Message-Id: <20210309114512.536489-23-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Gollu Appalanaidu , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Gollu Appalanaidu assert may be compiled to a noop and we could end up returning an uninitialized status. Fix this by always returning Internal Device Error as a fallback. Note that, as pointed out by Philippe, per commit 262a69f4282 ("osdep.h: Prohibit disabling assert() in supported builds") this shouldn't be possible. But clean it up so we don't worry about it again. Signed-off-by: Gollu Appalanaidu [k.jensen: split commit] Signed-off-by: Klaus Jensen --- hw/block/nvme.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index f5538fd00f49..de3d0ca51bb4 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1246,8 +1246,6 @@ static uint16_t nvme_check_zone_write(NvmeNamespace *= ns, NvmeZone *zone, =20 static uint16_t nvme_check_zone_state_for_read(NvmeZone *zone) { - uint16_t status; - switch (nvme_get_zone_state(zone)) { case NVME_ZONE_STATE_EMPTY: case NVME_ZONE_STATE_IMPLICITLY_OPEN: @@ -1255,16 +1253,14 @@ static uint16_t nvme_check_zone_state_for_read(Nvme= Zone *zone) case NVME_ZONE_STATE_FULL: case NVME_ZONE_STATE_CLOSED: case NVME_ZONE_STATE_READ_ONLY: - status =3D NVME_SUCCESS; - break; + return NVME_SUCCESS; case NVME_ZONE_STATE_OFFLINE: - status =3D NVME_ZONE_OFFLINE; - break; + return NVME_ZONE_OFFLINE; default: assert(false); } =20 - return status; + return NVME_INTERNAL_DEV_ERROR; } =20 static uint16_t nvme_check_zone_read(NvmeNamespace *ns, uint64_t slba, --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615293412; cv=none; d=zohomail.com; s=zohoarc; b=euNo5kSEq/fQLgzIrB81dMM5LJDLzakyHXekKdOLJhHbytSKXpeOd2t1ad983IpThwRhwoRUBaf9Nz3TtTZM/X1YYSDILCA2L9HianXz53CQ+z2+floDNuAnACM6eUg0jLWkEwhyTWmtYi7l4fP86iCYOEqR3ufOGRGaglX9Ge8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615293412; 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=ikZI4SqCFrlxb8pxm76EXX8zt/XdX1KHkArjxS2L0tg=; b=LaffMyhj49lTPLyU7pnmF+uOwhCkQrNVLkDUl7G3nvRIlX6pWdTqxhcMh00QXA3Lz11J3TIUYFEWJhzAL4BxyE/ueNInu1jQEJ4voi7rR2WMtG8Be8ED717XaXGZG+OKEqI+JK3a88GlAnXAfGVmdUTqehD2+1PVaC8cEOdFy0k= 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 1615293412302826.1284956117286; Tue, 9 Mar 2021 04:36:52 -0800 (PST) Received: from localhost ([::1]:42440 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbbX-0006P4-6X for importer@patchew.org; Tue, 09 Mar 2021 07:36:51 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43442) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoi-0000Xr-2X; Tue, 09 Mar 2021 06:46:24 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:38865) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoZ-0000aU-Uo; Tue, 09 Mar 2021 06:46:23 -0500 Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailnew.west.internal (Postfix) with ESMTP id 8FA3D2792; Tue, 9 Mar 2021 06:45:52 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Tue, 09 Mar 2021 06:45:53 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id A13E8240054; Tue, 9 Mar 2021 06:45:50 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=ikZI4SqCFrlxb 8pxm76EXX8zt/XdX1KHkArjxS2L0tg=; b=j1wtB7jDtqK/R3DumTC00iOuBVRAm a5Uta4+afKZcH0XYjzec6E/1vV6TJiF+wdQU9XQAkeJlrLapYky9qRBzvlr0oid0 42swjhr6c+XHQG74nZovFCBSy0S99ylsUGeMQQw/XenuD1vy0OdW7Pd//m3QptUd ftGpK5Vjpzpt/74RQGcGhmcJqm1YYD4tq/pDkhEIPYEoQEGwLUBinRT610l8OM5g YQWgfWrJEqqg5YutZg7xGj0qB1PdIn1YD1fCB5GCAaPPxoLrxcWyrDlnPc5Y+9ta AywM3Iu3t55Zy+FZp7J5AT6pr57PuEw47jkwWIxq/wCqFTCPF7U1ITOmA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=ikZI4SqCFrlxb8pxm76EXX8zt/XdX1KHkArjxS2L0tg=; b=t1ra6wHP CloDR6xMoSWlCu6CXRDJguhVl37CcpiOutWy1nydsV5QAo+W+pSEi0qKJwR2RtiM 9RYNkDgAM3jbt+LxHzKPl1aV+mSMuU5/6n5CO5dulY2Osov7Z9BVoWJlNmSw8mWG Vc5+mfomCGoy7/xwHdGe6ZOsWIUZhWShD/yEOCEYjefBv4+90LglmoFv9Sddw/75 j29BL9/VeeVeErBcEnMwKUK5wqBm/h12gGGMfbUJcSQXshlNCK0nIjhgJKKJMbr7 GG7T4KZDITxj09Fq9iqQ2TToNEMQrsllf/pKLz8rn27uIhQEUU+enXoV+ojG5Ez/ dXZJQQp2pg4pug== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedune curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 23/38] hw/block/nvme: add trace event for zone read check Date: Tue, 9 Mar 2021 12:44:57 +0100 Message-Id: <20210309114512.536489-24-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Gollu Appalanaidu , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Gollu Appalanaidu Add a trace event for the offline zone condition when checking zone read. Signed-off-by: Gollu Appalanaidu [k.jensen: split commit] Signed-off-by: Klaus Jensen --- hw/block/nvme.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index de3d0ca51bb4..b81c4c3705f1 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1255,6 +1255,7 @@ static uint16_t nvme_check_zone_state_for_read(NvmeZo= ne *zone) case NVME_ZONE_STATE_READ_ONLY: return NVME_SUCCESS; case NVME_ZONE_STATE_OFFLINE: + trace_pci_nvme_err_zone_is_offline(zone->d.zslba); return NVME_ZONE_OFFLINE; default: assert(false); --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615293878; cv=none; d=zohomail.com; s=zohoarc; b=YHlpg9wSfDC7lBoZqa1U6cHmNCTOG25vDz5x6pyX08VU2ek6QopVq4XsNTdmpB8tVrcPZffq4PEdhz+eg/UJJuXzeaDSUbL9RwEZmh5KE/6+ZkD4YdKkqzvxnGfU6FASh4ZJikqwud2WM67YcPGJ9qQ+owHJC7RJfRQsxMvOpsE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615293878; 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=am3vOXA9jlaXtiQ3D6Wb3XYRAyi1RgWZq6qd7jkTtd8=; b=UBkrcMY/iXuSd5YXoN0IMol/gLHNAO+z6ehn2gXnE200NxKtbBYUSnXl4NDE+HYWUhAy9ah6RwoDiYhunNUo8p+yEJgUM1qw7LiOHD2LYoL8lr97VukadvkwMP6Kk3RyGBrJurPehHLRA5fdxsZBXLeDss+xwy1Yrgs0JCc4/wA= 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 1615293878476211.5351602811345; Tue, 9 Mar 2021 04:44:38 -0800 (PST) Received: from localhost ([::1]:53950 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbj3-0002tB-7V for importer@patchew.org; Tue, 09 Mar 2021 07:44:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43448) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoi-0000YA-En; Tue, 09 Mar 2021 06:46:24 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:42989) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoa-0000af-CO; Tue, 09 Mar 2021 06:46:24 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 1AE142711; Tue, 9 Mar 2021 06:45:54 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:54 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 3D8DF24005A; Tue, 9 Mar 2021 06:45:52 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=am3vOXA9jlaXt iQ3D6Wb3XYRAyi1RgWZq6qd7jkTtd8=; b=J6D1NfwEVwZvyp7sW1SmxOQo3m0xt w3CqboyzUD/YlM/K8peh9ZpgiDliJcqR15ThY3BmkzbrkWi72mKJt4LnK94eorpO k25iG8Xo4LawoS6tEMH1OAt3mBZxvupJmmr9kyliL5RWkh5XR4pB/E6x6VOu7Q0e 4t+3hNdiDZ7SVxfyOqAGE9pbaDBDQ1EmZvzkzqAS4pPxLsAW1Il66lIBKT+sihqa OtJQWSQ+2QfV+Toz0+68bwncBwNDagE34zZ+CIuXwrTbpyPkOXwYLq0T6NCMQBLS SVu4/TikskysRgqncIXb0NlFhr7xxXijP/9npPtBTgtVTa05DTo5zCh8g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=am3vOXA9jlaXtiQ3D6Wb3XYRAyi1RgWZq6qd7jkTtd8=; b=B46N4HX1 T4KuwtQnMSPw6b2o4iAfIGCPCVg1/yLAyp56FYLiFofQ5q7m7dY2egg1JYek/ZOj 1TimsmzqTGC6LeqEktWfOEP79TYS3of+BWONZ8/kHiQ1YEGxBTPH5ATmpt7GLYP8 0Wda7hK89GTDH8PZFbqHb3fFbEDxhqt7q875HpIeqXfe49Spe6eyV7eGezdDbSSa EhQTvSfX6hgni6hWA6lLjv0U9XtEol8gJn0spgSF4mY6rHc3O0LvS0hjmqCCJHvA PIZ8zUfCnLrEvzASm93azlvOZjGdDquNTRvn5H42VFN693cDTkifBahW5Ly5BQfF qkqI3DsGAUm3jg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeduhe enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 24/38] hw/block/nvme: report non-mdts command size limit for dsm Date: Tue, 9 Mar 2021 12:44:58 +0100 Message-Id: <20210309114512.536489-25-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Gollu Appalanaidu , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Gollu Appalanaidu Dataset Management is not subject to MDTS, but exceeded a certain size per range causes internal looping. Report this limit (DMRSL) in the NVM command set specific identify controller data structure. Signed-off-by: Gollu Appalanaidu Signed-off-by: Klaus Jensen Reviewed-by: Keith Busch --- hw/block/nvme.h | 2 ++ include/block/nvme.h | 11 +++++++++++ hw/block/nvme.c | 27 +++++++++++++++++++-------- hw/block/trace-events | 1 + 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/hw/block/nvme.h b/hw/block/nvme.h index f45ace0cff5b..294fac1defe3 100644 --- a/hw/block/nvme.h +++ b/hw/block/nvme.h @@ -171,6 +171,8 @@ typedef struct NvmeCtrl { QTAILQ_HEAD(, NvmeAsyncEvent) aer_queue; int aer_queued; =20 + uint32_t dmrsl; + NvmeSubsystem *subsys; =20 NvmeNamespace namespace; diff --git a/include/block/nvme.h b/include/block/nvme.h index b23f3ae2279f..16d8c4c90f7e 100644 --- a/include/block/nvme.h +++ b/include/block/nvme.h @@ -1041,6 +1041,16 @@ typedef struct NvmeIdCtrlZoned { uint8_t rsvd1[4095]; } NvmeIdCtrlZoned; =20 +typedef struct NvmeIdCtrlNvm { + uint8_t vsl; + uint8_t wzsl; + uint8_t wusl; + uint8_t dmrl; + uint32_t dmrsl; + uint64_t dmsl; + uint8_t rsvd16[4080]; +} NvmeIdCtrlNvm; + enum NvmeIdCtrlOacs { NVME_OACS_SECURITY =3D 1 << 0, NVME_OACS_FORMAT =3D 1 << 1, @@ -1396,6 +1406,7 @@ static inline void _nvme_check_size(void) QEMU_BUILD_BUG_ON(sizeof(NvmeEffectsLog) !=3D 4096); QEMU_BUILD_BUG_ON(sizeof(NvmeIdCtrl) !=3D 4096); QEMU_BUILD_BUG_ON(sizeof(NvmeIdCtrlZoned) !=3D 4096); + QEMU_BUILD_BUG_ON(sizeof(NvmeIdCtrlNvm) !=3D 4096); QEMU_BUILD_BUG_ON(sizeof(NvmeLBAF) !=3D 4); QEMU_BUILD_BUG_ON(sizeof(NvmeLBAFE) !=3D 16); QEMU_BUILD_BUG_ON(sizeof(NvmeIdNs) !=3D 4096); diff --git a/hw/block/nvme.c b/hw/block/nvme.c index b81c4c3705f1..30aef5b09ef4 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1789,6 +1789,10 @@ static uint16_t nvme_dsm(NvmeCtrl *n, NvmeRequest *r= eq) trace_pci_nvme_dsm_deallocate(nvme_cid(req), nvme_nsid(ns), sl= ba, nlb); =20 + if (nlb > n->dmrsl) { + trace_pci_nvme_dsm_single_range_limit_exceeded(nlb, n->dmr= sl); + } + offset =3D nvme_l2b(ns, slba); len =3D nvme_l2b(ns, nlb); =20 @@ -3208,20 +3212,24 @@ static uint16_t nvme_identify_ctrl(NvmeCtrl *n, Nvm= eRequest *req) static uint16_t nvme_identify_ctrl_csi(NvmeCtrl *n, NvmeRequest *req) { NvmeIdentify *c =3D (NvmeIdentify *)&req->cmd; - NvmeIdCtrlZoned id =3D {}; + uint8_t id[NVME_IDENTIFY_DATA_SIZE] =3D {}; =20 trace_pci_nvme_identify_ctrl_csi(c->csi); =20 - if (c->csi =3D=3D NVME_CSI_NVM) { - return nvme_rpt_empty_id_struct(n, req); - } else if (c->csi =3D=3D NVME_CSI_ZONED) { - id.zasl =3D n->params.zasl; + switch (c->csi) { + case NVME_CSI_NVM: + ((NvmeIdCtrlNvm *)&id)->dmrsl =3D cpu_to_le32(n->dmrsl); + break; =20 - return nvme_dma(n, (uint8_t *)&id, sizeof(id), - DMA_DIRECTION_FROM_DEVICE, req); + case NVME_CSI_ZONED: + ((NvmeIdCtrlZoned *)&id)->zasl =3D n->params.zasl; + break; + + default: + return NVME_INVALID_FIELD | NVME_DNR; } =20 - return NVME_INVALID_FIELD | NVME_DNR; + return nvme_dma(n, id, sizeof(id), DMA_DIRECTION_FROM_DEVICE, req); } =20 static uint16_t nvme_identify_ns(NvmeCtrl *n, NvmeRequest *req) @@ -4655,6 +4663,9 @@ int nvme_register_namespace(NvmeCtrl *n, NvmeNamespac= e *ns, Error **errp) =20 n->namespaces[nsid - 1] =3D ns; =20 + n->dmrsl =3D MIN_NON_ZERO(n->dmrsl, + BDRV_REQUEST_MAX_BYTES / nvme_l2b(ns, 1)); + return 0; } =20 diff --git a/hw/block/trace-events b/hw/block/trace-events index c165ee2a97c3..8deeacc8c35c 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -51,6 +51,7 @@ pci_nvme_copy_cb(uint16_t cid) "cid %"PRIu16"" pci_nvme_block_status(int64_t offset, int64_t bytes, int64_t pnum, int ret= , bool zeroed) "offset %"PRId64" bytes %"PRId64" pnum %"PRId64" ret 0x%x ze= roed %d" pci_nvme_dsm(uint16_t cid, uint32_t nsid, uint32_t nr, uint32_t attr) "cid= %"PRIu16" nsid %"PRIu32" nr %"PRIu32" attr 0x%"PRIx32"" pci_nvme_dsm_deallocate(uint16_t cid, uint32_t nsid, uint64_t slba, uint32= _t nlb) "cid %"PRIu16" nsid %"PRIu32" slba %"PRIu64" nlb %"PRIu32"" +pci_nvme_dsm_single_range_limit_exceeded(uint32_t nlb, uint32_t dmrsl) "nl= b %"PRIu32" dmrsl %"PRIu32"" pci_nvme_compare(uint16_t cid, uint32_t nsid, uint64_t slba, uint32_t nlb)= "cid %"PRIu16" nsid %"PRIu32" slba 0x%"PRIx64" nlb %"PRIu32"" pci_nvme_compare_cb(uint16_t cid) "cid %"PRIu16"" pci_nvme_aio_discard_cb(uint16_t cid) "cid %"PRIu16"" --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615293907; cv=none; d=zohomail.com; s=zohoarc; b=QGzkxlUNM72zR0qofOOn01Op+NFPJ9PQNpGk7rwJroRYms6pwe/scqNFkSfwNJJ4D1ggntSToC7iskYHNanPq4q3BiVFlYgUA89RR4vVzF2FYh8KuMJzGuN7LoGuH5U5q4ug7iRErRLFzFs/qbDeCmq2y6vgTDccaFSI/dkqcUs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615293907; 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=v91QNZvooqGNTgq+UmcY+WmenF4oOpB1iD5BoMIg2dY=; b=cSO5Z8XXZVJIb3Rk/69hm0Fa/0apfdHrT7Hi+UONEsTJT55tngyc4hUpdtRCR3lYHyDZu6YQnWL26Ewy4sfXJ6obfxPk7ss0d5/mGEIw0GloCoT3+4DhjgDt/kpThS+jdPVnopzDxC/fMXDluuihTVZ6BEFhng6XWcOkV1esU1M= 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 1615293907113155.22446060962818; Tue, 9 Mar 2021 04:45:07 -0800 (PST) Received: from localhost ([::1]:55210 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbjV-0003Pa-Qd for importer@patchew.org; Tue, 09 Mar 2021 07:45:06 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43474) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaok-0000Yp-IH; Tue, 09 Mar 2021 06:46:28 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:57827) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaog-0000cr-3F; Tue, 09 Mar 2021 06:46:24 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id A3E04277D; Tue, 9 Mar 2021 06:45:55 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:56 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id C8C09240054; Tue, 9 Mar 2021 06:45:53 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=v91QNZvooqGNT gq+UmcY+WmenF4oOpB1iD5BoMIg2dY=; b=ELE0NpbSFQK5ixJqp1xAeSHpp/sBt fZI5tc9W3DGaRG+G0CdWs1SNEdAR3b+R6pWSA7D0O8Wb/Vrbfk17WjUjYANh1NhC RWcIvu+jpUl5KR+x/2ofoocSVcgG/MZ2yxPtJ9uPGBBHALMYYDs1oWPCMax1scm6 CqJRR4JwtKzNqAHaP0taEaeNtY90OqRKXjCffvuyFqbBvkININCz/UU1SatSdfO2 Cxx4OlAM7vy7kHFpY8QSgJ4Mx33vYopbjz2CLkKuxEgY7ngAYNJwAmEp8pSeeuwx PkK1HX7Z+3Fpv9MbYgLUJ+ZlC0jX2STMCJlULfxHEd7VM/IgXdT06a1lQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=v91QNZvooqGNTgq+UmcY+WmenF4oOpB1iD5BoMIg2dY=; b=qnhJtm2M sJCY2fRNP+e3HZp94DFqxe8Cuj0/jNPuww5dP/d0dYdp79FABITWp8P9tzLWdmjR MUnzZK1nR43iCt7l60RwNOXpiiHB6dLOlyBQTchNGPSexAEaxdPhI1gTY8w/NIWW bWrhfm7rg+T12wFu4csyntnLaTf0ReVMIMBa8HTItFef1e6mtl8Jx+CGx9MqhHVC MJs9YjiqMmTqstdRtunAHuiv/xJBVzW91fv6XZ6TJtdb02euTO9wVc42tahYfOJl BIk8kKcOn5kPlkxPnnSaaVDs8ArmCyAU/FZIuoD1FjaYjXc2O+3sshuXHp25E1Q9 sHPbN6DRr0lsJg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeduhe enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 25/38] hw/block/nvme: remove redundant len member in compare context Date: Tue, 9 Mar 2021 12:44:59 +0100 Message-Id: <20210309114512.536489-26-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen The 'len' member of the nvme_compare_ctx struct is redundant since the same information is available in the 'iov' member. Signed-off-by: Klaus Jensen Reviewed-by: Minwoo Im Reviewed-by: Keith Busch --- hw/block/nvme.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 30aef5b09ef4..fcdd6b7cb9f0 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1703,7 +1703,6 @@ static void nvme_aio_copy_in_cb(void *opaque, int ret) struct nvme_compare_ctx { QEMUIOVector iov; uint8_t *bounce; - size_t len; }; =20 static void nvme_compare_cb(void *opaque, int ret) @@ -1724,16 +1723,16 @@ static void nvme_compare_cb(void *opaque, int ret) goto out; } =20 - buf =3D g_malloc(ctx->len); + buf =3D g_malloc(ctx->iov.size); =20 - status =3D nvme_dma(nvme_ctrl(req), buf, ctx->len, DMA_DIRECTION_TO_DE= VICE, - req); + status =3D nvme_dma(nvme_ctrl(req), buf, ctx->iov.size, + DMA_DIRECTION_TO_DEVICE, req); if (status) { req->status =3D status; goto out; } =20 - if (memcmp(buf, ctx->bounce, ctx->len)) { + if (memcmp(buf, ctx->bounce, ctx->iov.size)) { req->status =3D NVME_CMP_FAILURE; } =20 @@ -1974,7 +1973,6 @@ static uint16_t nvme_compare(NvmeCtrl *n, NvmeRequest= *req) =20 ctx =3D g_new(struct nvme_compare_ctx, 1); ctx->bounce =3D bounce; - ctx->len =3D len; =20 req->opaque =3D ctx; =20 --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615293435; cv=none; d=zohomail.com; s=zohoarc; b=WP4ThdRVAbSl0AlOmdbW1a6H21U7R/mCzuKrBwPJ4DoIAg1MORYsXZsfkf7+bRcA9SlUhFZWo/t2eXQVxzjBwOZGawHfx1yFm9fURI+fNXy4KoxAO+WEDZn2ANYc51pgCwx9LzfwSmx7/n0Q4ejdmsJnLdFRQfCZ8WUvVUgCl5I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615293435; 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=Re6pRRP8bBYoLq0ogKlehpxUJu2Kf6ynBPbje7OPWhc=; b=l3KxWhLblQsDFMcUZtZZFHQsfdNyNJwQ+EVde7N0q5zVv4AWDCUJZlmzfVE1Ppwq1d1YGwshmqJHmQ656C5hDw52ZGZtDmXN1PfzkuN34VbTwSBXlApy9AEeQiuk5OvqKeClh/T5x4QRYoDqwZ8mcAK/L8CxoOa9IP3IsA6D+Mw= 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 1615293435402373.80034434698337; Tue, 9 Mar 2021 04:37:15 -0800 (PST) Received: from localhost ([::1]:43060 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbbu-0006fx-7u for importer@patchew.org; Tue, 09 Mar 2021 07:37:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43476) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaok-0000Yq-Jx; Tue, 09 Mar 2021 06:46:28 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:34107) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaog-0000ct-35; Tue, 09 Mar 2021 06:46:26 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 20812279C; Tue, 9 Mar 2021 06:45:57 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:57 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 5AED624005A; Tue, 9 Mar 2021 06:45:55 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=Re6pRRP8bBYoL q0ogKlehpxUJu2Kf6ynBPbje7OPWhc=; b=Y4C+r+6NBI7pObG/0eQsP8Z/LV9tE HfHVTdGAGbtkFyDjxu07U2/+LuC//ZMTuDoVWYpsd9EpeMF4yNMOso4zHvG0XVJp WBH3s4yXeBkk+MiYJmj88t89B2FHJDf3cvkN3gAFQIjfWWoq8iVFe0kuKl4i8dwm +bYhBGim3JgfsqAcp0bCyLiBEYT02Ihzv96N8bVXTZAd4ZN+y6aXylRR6qRUiU8q cdd52G+iazSYE6+aFRQPJBtNXSLNn4Wb2LYIeGr5CGYPR7p9Yr+Zltr2ulwV2pkq cRZsXwctl+0nS7nV7dTzAIj5AsTcQGrxT0ZrLXSo27Bsb1pC2wXBnLVXA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=Re6pRRP8bBYoLq0ogKlehpxUJu2Kf6ynBPbje7OPWhc=; b=Fq7mxb8K NJ2vdoXJPq14JPGUoTWDkrXl8T+NriI0KaCN+hz69B5qdHhrwf0Ou8RrvLtDLPGv nUQ2U0Ug72wcUqcjbFsuHytGsJA0VvFH2J/i1Pb7D6GS1yzBML8QuEx9BuzeMaP5 en6MXMerfz0lztixoqmJqxwDtYCUwjmvt0jPaZ3To1UhQ2E8kE5oMuPtjTGWAEDm +QqXhIT9X7FmfkjuprCaiW4WJtJa7hufgBpAC+EZPn247ypeKTkEZmUIT/hGUstl H7pxdHFMgwkKM1EBkUbruX4Fe/AatsNHVOp2xHBkEREqFqY5kza9iPF1RRivWGqt ZcAhDM0/nRqvYQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeduhe enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 26/38] hw/block/nvme: remove block accounting for write zeroes Date: Tue, 9 Mar 2021 12:45:00 +0100 Message-Id: <20210309114512.536489-27-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen A Write Zeroes commands should not be counted in either the 'Data Units Written' or in 'Host Write Commands' SMART/Health Information Log page. Signed-off-by: Klaus Jensen Reviewed-by: Minwoo Im Reviewed-by: Keith Busch --- hw/block/nvme.c | 1 - 1 file changed, 1 deletion(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index fcdd6b7cb9f0..88e800898526 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -2181,7 +2181,6 @@ static uint16_t nvme_do_write(NvmeCtrl *n, NvmeReques= t *req, bool append, nvme_rw_cb, req); } } else { - block_acct_start(blk_get_stats(blk), &req->acct, 0, BLOCK_ACCT_WRI= TE); req->aiocb =3D blk_aio_pwrite_zeroes(blk, data_offset, data_size, BDRV_REQ_MAY_UNMAP, nvme_rw_cb, req); --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615292555; cv=none; d=zohomail.com; s=zohoarc; b=RUlQlzvKqv42Xh+KuEkBlUSDircB0q6dqQhahrCiJgAVk8e+gcQgU5HF3hF/4We3vfnHJLilLg2ACTriNkc5W6ENplDZbueah+nVolpsi0FfzggIf/8awxdHKUDEdC+eg/sBP7Rgd/xllRBgQot29oZ4CkD1L2fNRk5t/O6EMvw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615292555; 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=tC9OnheygbOgy2iheSiwJY9pgiRiMV7Ov0a4W6vz4HY=; b=HtfkPZMqslzBwC5Z4Bm4eu1lPoHSZL1CaP4uB9JedOVA06aGZNCRxE2BhQLPTuKGIie4CXFKU9BsatqXmStC7aLGgz4pUZDgTZ3Aybx7g5ALFdTzwwnyrXUWT+eDTkbEK+OF88kULwSuKI0gTi5mbwdjmpjzc9+cEwYDcgXFWRg= 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 1615292555571473.1638356363526; Tue, 9 Mar 2021 04:22:35 -0800 (PST) Received: from localhost ([::1]:51402 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbNi-0006Tk-9t for importer@patchew.org; Tue, 09 Mar 2021 07:22:34 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43566) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap3-0000gV-TT; Tue, 09 Mar 2021 06:46:45 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:33725) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaow-0000nD-B7; Tue, 09 Mar 2021 06:46:42 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 2407B271E; Tue, 9 Mar 2021 06:45:59 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:45:59 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id E3F2C24005E; Tue, 9 Mar 2021 06:45:56 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=tC9OnheygbOgy 2iheSiwJY9pgiRiMV7Ov0a4W6vz4HY=; b=H33iRg14Ws13sjriVrftYncKnLfkN UOCP4iXXAINlJo/UpFg7Qgcvpv1OHnqC9pK9bAIqg8xCLK/EKQyKZ3YavjRKCy7X beE9v2e2kkFpPfVd3Eyu1XfOLcxaD0yFQEcB5owLkKVPaES2RbWCzQUOSLNzrWfQ eMjGR7cld8EUx1albZejai1rkFlcaCPypEWHJQi5YFZZ11410wi6XzC93bpNEGtP Yk5mcImWPIi6Vw4Q9XG0IVAPrB31jgsePt2BzNpa4b5BGZBLrNSwHD+I2LBZB4uI RiJkYMKh1MZgeNEDCsqxiV8S216XZBUFZ65mZFlk7P405vObXPQblGRYw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=tC9OnheygbOgy2iheSiwJY9pgiRiMV7Ov0a4W6vz4HY=; b=lzSA68Lb IxFqkin8xEYL6WRjVTuCGWHBqmNhLxWeW9jLxFnzbt8/yImFAXrxX+KJqJ+A76pe E6b5cqZgspqlmYxjHsHnMYcFSlEmdvGdEIRDIGbBR7+l87rXG88WkzRThEXZfcbA l4UvaeN2nnEq7v8bvG+YZtq7upo4GR47iR+Zq99KxVOOeLM8ZxaVTHtaO6xS4Ul+ yrTTujJfnb/EidmL/pCCgmnSu42FWPFbRpBulYoyWSqWmhSkIfP8JD6M8RuWSJ+P 9E6B8IRdSplcbP0mHSOoTpkH4zLSOh/eMzq0Y80HXWXvzY2AQkUsFQeyyrV6G97j A8ALJxat2pb7sw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeduke enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 27/38] hw/block/nvme: fix strerror printing Date: Tue, 9 Mar 2021 12:45:01 +0100 Message-Id: <20210309114512.536489-28-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen Fix missing sign inversion. Signed-off-by: Klaus Jensen Reviewed-by: Minwoo Im Reviewed-by: Keith Busch --- hw/block/nvme.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 88e800898526..8f27fa745074 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1164,7 +1164,7 @@ static void nvme_aio_err(NvmeRequest *req, int ret) break; } =20 - trace_pci_nvme_err_aio(nvme_cid(req), strerror(ret), status); + trace_pci_nvme_err_aio(nvme_cid(req), strerror(-ret), status); =20 error_setg_errno(&local_err, -ret, "aio failed"); error_report_err(local_err); --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615291756; cv=none; d=zohomail.com; s=zohoarc; b=k7Tpy3q+HyQ3jDIeDUt1K/48D0MAbWB/Suyikkvg2SXloiAHuMlM4AMRDyIDyxyG58MUIal0tIABrODUirg3j8+JJhskDjD4U0+Y0swekdbNNUXxG0hQ7g+q52bWr2LvWjnSy3t5pn++8PWy7bzMnL2ZBcpkfgCbImJGKmdc/oQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615291756; 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=gEV5q+SNRhYUuR5UsqdXNV69IVi1j3bZVlV05lYfnok=; b=K8D/a1epUSPiWggR+iGhVLQ1CUrhL2ijLunvV9kMmG5bNcU8fMMEl74ori3c0gEmxusq9Aqq8AqQI9Y/iuc9ksTMIh3xz72rfH31gWPuFheTR4eNjnxIn64mcTK78Wzkqu/N2Zti8RANTTZtidq8/6dtQL8kL8RBIEx2cZqH9M4= 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 1615291756440375.5750049656399; Tue, 9 Mar 2021 04:09:16 -0800 (PST) Received: from localhost ([::1]:32816 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbAp-0006kd-9p for importer@patchew.org; Tue, 09 Mar 2021 07:09:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43242) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoT-0000N9-9D; Tue, 09 Mar 2021 06:46:09 -0500 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:46393) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoM-0000fP-Mi; Tue, 09 Mar 2021 06:46:09 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 8FFAC2768; Tue, 9 Mar 2021 06:46:00 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:46:01 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id D415524005A; Tue, 9 Mar 2021 06:45:58 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=gEV5q+SNRhYUu R5UsqdXNV69IVi1j3bZVlV05lYfnok=; b=gsy7GPzv9Rrfx7qs5UAkFO62sHU+D e4rkCMTcOMyXZAzmCeEukSvJ+S3P5Uq0yII/vZGgQxDpZ2AqQjMSvGsvic2JezBE hbOS3leXN/SP8Zjp3CmwHW7un49zAGbgD4uhvfaficun4uFIwXbEDsxzyYkr5F74 bDbUOwu1aGQiWYr1Urub6ev3vLuOMowfuFq7+r+OZ9vAQcrEx7KUMTHkU8mPXcry y8De0GGcwl8ZBoJstpAr5lzdMz3x+h8/JZCRS54QXeqLZxWqUwJ64o56Fg10d8TF bkXYnaF1F5tavrvSJf474TdME554RZAbsqeQfO6vtvw1f2nNybyOoUr4Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=gEV5q+SNRhYUuR5UsqdXNV69IVi1j3bZVlV05lYfnok=; b=gyXUtOsl 7gia1+iKoMQS/iGmnpY3Mxq5KuJrY3IP93nSuPxCs4txbX0sfGbwAgCkoG799E0u Z4Lfzig7t8opvtfCkygUXS2eei9YJVnefO6pDcjTcZB/Zuc+XwzweD412E86hcF/ N3lszBVQlRs9tv+z7HuOYnDzooZeHK5XiFMVjY06G6zcUcATtSAjdLB+82bJG8JX qnLia7eLBuZdfuWNfryIYv5QX3iiTtYxNGsrKIQeAUvLo1oY142kUT3V+2+bzOdk hTbhm6cODdoAazm/zRLlra3T6YaXOS//UERjdKxhzqvMstEczYN7Rl03wfOnNeW9 md6t94g89h56tA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeduke enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 28/38] hw/block/nvme: try to deal with the iov/qsg duality Date: Tue, 9 Mar 2021 12:45:02 +0100 Message-Id: <20210309114512.536489-29-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.25; envelope-from=its@irrelevant.dk; helo=wout2-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen Introduce NvmeSg and try to deal with that pesky qsg/iov duality that haunts all the memory-related functions. Signed-off-by: Klaus Jensen Reviewed-by: Keith Busch --- hw/block/nvme.h | 17 ++++- hw/block/nvme.c | 191 ++++++++++++++++++++++++++---------------------- 2 files changed, 117 insertions(+), 91 deletions(-) diff --git a/hw/block/nvme.h b/hw/block/nvme.h index 294fac1defe3..96afefa8c9fb 100644 --- a/hw/block/nvme.h +++ b/hw/block/nvme.h @@ -29,6 +29,20 @@ typedef struct NvmeAsyncEvent { NvmeAerResult result; } NvmeAsyncEvent; =20 +enum { + NVME_SG_ALLOC =3D 1 << 0, + NVME_SG_DMA =3D 1 << 1, +}; + +typedef struct NvmeSg { + int flags; + + union { + QEMUSGList qsg; + QEMUIOVector iov; + }; +} NvmeSg; + typedef struct NvmeRequest { struct NvmeSQueue *sq; struct NvmeNamespace *ns; @@ -38,8 +52,7 @@ typedef struct NvmeRequest { NvmeCqe cqe; NvmeCmd cmd; BlockAcctCookie acct; - QEMUSGList qsg; - QEMUIOVector iov; + NvmeSg sg; QTAILQ_ENTRY(NvmeRequest)entry; } NvmeRequest; =20 diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 8f27fa745074..a1e28c6570d4 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -441,15 +441,31 @@ static void nvme_req_clear(NvmeRequest *req) req->status =3D NVME_SUCCESS; } =20 -static void nvme_req_exit(NvmeRequest *req) +static inline void nvme_sg_init(NvmeCtrl *n, NvmeSg *sg, bool dma) { - if (req->qsg.sg) { - qemu_sglist_destroy(&req->qsg); + if (dma) { + pci_dma_sglist_init(&sg->qsg, &n->parent_obj, 0); + sg->flags =3D NVME_SG_DMA; + } else { + qemu_iovec_init(&sg->iov, 0); } =20 - if (req->iov.iov) { - qemu_iovec_destroy(&req->iov); + sg->flags |=3D NVME_SG_ALLOC; +} + +static inline void nvme_sg_unmap(NvmeSg *sg) +{ + if (!(sg->flags & NVME_SG_ALLOC)) { + return; } + + if (sg->flags & NVME_SG_DMA) { + qemu_sglist_destroy(&sg->qsg); + } else { + qemu_iovec_destroy(&sg->iov); + } + + memset(sg, 0x0, sizeof(*sg)); } =20 static uint16_t nvme_map_addr_cmb(NvmeCtrl *n, QEMUIOVector *iov, hwaddr a= ddr, @@ -486,8 +502,7 @@ static uint16_t nvme_map_addr_pmr(NvmeCtrl *n, QEMUIOVe= ctor *iov, hwaddr addr, return NVME_SUCCESS; } =20 -static uint16_t nvme_map_addr(NvmeCtrl *n, QEMUSGList *qsg, QEMUIOVector *= iov, - hwaddr addr, size_t len) +static uint16_t nvme_map_addr(NvmeCtrl *n, NvmeSg *sg, hwaddr addr, size_t= len) { bool cmb =3D false, pmr =3D false; =20 @@ -504,38 +519,31 @@ static uint16_t nvme_map_addr(NvmeCtrl *n, QEMUSGList= *qsg, QEMUIOVector *iov, } =20 if (cmb || pmr) { - if (qsg && qsg->sg) { + if (sg->flags & NVME_SG_DMA) { return NVME_INVALID_USE_OF_CMB | NVME_DNR; } =20 - assert(iov); - - if (!iov->iov) { - qemu_iovec_init(iov, 1); - } - if (cmb) { - return nvme_map_addr_cmb(n, iov, addr, len); + return nvme_map_addr_cmb(n, &sg->iov, addr, len); } else { - return nvme_map_addr_pmr(n, iov, addr, len); + return nvme_map_addr_pmr(n, &sg->iov, addr, len); } } =20 - if (iov && iov->iov) { + if (!(sg->flags & NVME_SG_DMA)) { return NVME_INVALID_USE_OF_CMB | NVME_DNR; } =20 - assert(qsg); - - if (!qsg->sg) { - pci_dma_sglist_init(qsg, &n->parent_obj, 1); - } - - qemu_sglist_add(qsg, addr, len); + qemu_sglist_add(&sg->qsg, addr, len); =20 return NVME_SUCCESS; } =20 +static inline bool nvme_addr_is_dma(NvmeCtrl *n, hwaddr addr) +{ + return !(nvme_addr_is_cmb(n, addr) || nvme_addr_is_pmr(n, addr)); +} + static uint16_t nvme_map_prp(NvmeCtrl *n, uint64_t prp1, uint64_t prp2, uint32_t len, NvmeRequest *req) { @@ -545,20 +553,13 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, uint64_t pr= p1, uint64_t prp2, uint16_t status; int ret; =20 - QEMUSGList *qsg =3D &req->qsg; - QEMUIOVector *iov =3D &req->iov; - trace_pci_nvme_map_prp(trans_len, len, prp1, prp2, num_prps); =20 - if (nvme_addr_is_cmb(n, prp1) || (nvme_addr_is_pmr(n, prp1))) { - qemu_iovec_init(iov, num_prps); - } else { - pci_dma_sglist_init(qsg, &n->parent_obj, num_prps); - } + nvme_sg_init(n, &req->sg, nvme_addr_is_dma(n, prp1)); =20 - status =3D nvme_map_addr(n, qsg, iov, prp1, trans_len); + status =3D nvme_map_addr(n, &req->sg, prp1, trans_len); if (status) { - return status; + goto unmap; } =20 len -=3D trans_len; @@ -573,7 +574,8 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, uint64_t prp1= , uint64_t prp2, ret =3D nvme_addr_read(n, prp2, (void *)prp_list, prp_trans); if (ret) { trace_pci_nvme_err_addr_read(prp2); - return NVME_DATA_TRAS_ERROR; + status =3D NVME_DATA_TRAS_ERROR; + goto unmap; } while (len !=3D 0) { uint64_t prp_ent =3D le64_to_cpu(prp_list[i]); @@ -581,7 +583,8 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, uint64_t prp1= , uint64_t prp2, if (i =3D=3D n->max_prp_ents - 1 && len > n->page_size) { if (unlikely(prp_ent & (n->page_size - 1))) { trace_pci_nvme_err_invalid_prplist_ent(prp_ent); - return NVME_INVALID_PRP_OFFSET | NVME_DNR; + status =3D NVME_INVALID_PRP_OFFSET | NVME_DNR; + goto unmap; } =20 i =3D 0; @@ -591,20 +594,22 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, uint64_t pr= p1, uint64_t prp2, prp_trans); if (ret) { trace_pci_nvme_err_addr_read(prp_ent); - return NVME_DATA_TRAS_ERROR; + status =3D NVME_DATA_TRAS_ERROR; + goto unmap; } prp_ent =3D le64_to_cpu(prp_list[i]); } =20 if (unlikely(prp_ent & (n->page_size - 1))) { trace_pci_nvme_err_invalid_prplist_ent(prp_ent); - return NVME_INVALID_PRP_OFFSET | NVME_DNR; + status =3D NVME_INVALID_PRP_OFFSET | NVME_DNR; + goto unmap; } =20 trans_len =3D MIN(len, n->page_size); - status =3D nvme_map_addr(n, qsg, iov, prp_ent, trans_len); + status =3D nvme_map_addr(n, &req->sg, prp_ent, trans_len); if (status) { - return status; + goto unmap; } =20 len -=3D trans_len; @@ -613,24 +618,28 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, uint64_t pr= p1, uint64_t prp2, } else { if (unlikely(prp2 & (n->page_size - 1))) { trace_pci_nvme_err_invalid_prp2_align(prp2); - return NVME_INVALID_PRP_OFFSET | NVME_DNR; + status =3D NVME_INVALID_PRP_OFFSET | NVME_DNR; + goto unmap; } - status =3D nvme_map_addr(n, qsg, iov, prp2, len); + status =3D nvme_map_addr(n, &req->sg, prp2, len); if (status) { - return status; + goto unmap; } } } =20 return NVME_SUCCESS; + +unmap: + nvme_sg_unmap(&req->sg); + return status; } =20 /* * Map 'nsgld' data descriptors from 'segment'. The function will subtract= the * number of bytes mapped in len. */ -static uint16_t nvme_map_sgl_data(NvmeCtrl *n, QEMUSGList *qsg, - QEMUIOVector *iov, +static uint16_t nvme_map_sgl_data(NvmeCtrl *n, NvmeSg *sg, NvmeSglDescriptor *segment, uint64_t nsg= ld, size_t *len, NvmeRequest *req) { @@ -688,7 +697,7 @@ static uint16_t nvme_map_sgl_data(NvmeCtrl *n, QEMUSGLi= st *qsg, return NVME_DATA_SGL_LEN_INVALID | NVME_DNR; } =20 - status =3D nvme_map_addr(n, qsg, iov, addr, trans_len); + status =3D nvme_map_addr(n, sg, addr, trans_len); if (status) { return status; } @@ -700,9 +709,8 @@ next: return NVME_SUCCESS; } =20 -static uint16_t nvme_map_sgl(NvmeCtrl *n, QEMUSGList *qsg, QEMUIOVector *i= ov, - NvmeSglDescriptor sgl, size_t len, - NvmeRequest *req) +static uint16_t nvme_map_sgl(NvmeCtrl *n, NvmeSg *sg, NvmeSglDescriptor sg= l, + size_t len, NvmeRequest *req) { /* * Read the segment in chunks of 256 descriptors (one 4k page) to avoid @@ -725,12 +733,14 @@ static uint16_t nvme_map_sgl(NvmeCtrl *n, QEMUSGList = *qsg, QEMUIOVector *iov, =20 trace_pci_nvme_map_sgl(nvme_cid(req), NVME_SGL_TYPE(sgl.type), len); =20 + nvme_sg_init(n, sg, nvme_addr_is_dma(n, addr)); + /* * If the entire transfer can be described with a single data block it= can * be mapped directly. */ if (NVME_SGL_TYPE(sgl.type) =3D=3D NVME_SGL_DESCR_TYPE_DATA_BLOCK) { - status =3D nvme_map_sgl_data(n, qsg, iov, sgld, 1, &len, req); + status =3D nvme_map_sgl_data(n, sg, sgld, 1, &len, req); if (status) { goto unmap; } @@ -768,7 +778,7 @@ static uint16_t nvme_map_sgl(NvmeCtrl *n, QEMUSGList *q= sg, QEMUIOVector *iov, goto unmap; } =20 - status =3D nvme_map_sgl_data(n, qsg, iov, segment, SEG_CHUNK_S= IZE, + status =3D nvme_map_sgl_data(n, sg, segment, SEG_CHUNK_SIZE, &len, req); if (status) { goto unmap; @@ -795,7 +805,7 @@ static uint16_t nvme_map_sgl(NvmeCtrl *n, QEMUSGList *q= sg, QEMUIOVector *iov, switch (NVME_SGL_TYPE(last_sgld->type)) { case NVME_SGL_DESCR_TYPE_DATA_BLOCK: case NVME_SGL_DESCR_TYPE_BIT_BUCKET: - status =3D nvme_map_sgl_data(n, qsg, iov, segment, nsgld, &len= , req); + status =3D nvme_map_sgl_data(n, sg, segment, nsgld, &len, req); if (status) { goto unmap; } @@ -822,7 +832,7 @@ static uint16_t nvme_map_sgl(NvmeCtrl *n, QEMUSGList *q= sg, QEMUIOVector *iov, * Do not map the last descriptor; it will be a Segment or Last Se= gment * descriptor and is handled by the next iteration. */ - status =3D nvme_map_sgl_data(n, qsg, iov, segment, nsgld - 1, &len= , req); + status =3D nvme_map_sgl_data(n, sg, segment, nsgld - 1, &len, req); if (status) { goto unmap; } @@ -838,14 +848,7 @@ out: return NVME_SUCCESS; =20 unmap: - if (iov->iov) { - qemu_iovec_destroy(iov); - } - - if (qsg->sg) { - qemu_sglist_destroy(qsg); - } - + nvme_sg_unmap(sg); return status; } =20 @@ -866,8 +869,7 @@ static uint16_t nvme_map_dptr(NvmeCtrl *n, size_t len, = NvmeRequest *req) return NVME_INVALID_FIELD | NVME_DNR; } =20 - return nvme_map_sgl(n, &req->qsg, &req->iov, req->cmd.dptr.sgl, le= n, - req); + return nvme_map_sgl(n, &req->sg, req->cmd.dptr.sgl, len, req); default: return NVME_INVALID_FIELD; } @@ -883,16 +885,13 @@ static uint16_t nvme_dma(NvmeCtrl *n, uint8_t *ptr, u= int32_t len, return status; } =20 - /* assert that only one of qsg and iov carries data */ - assert((req->qsg.nsg > 0) !=3D (req->iov.niov > 0)); - - if (req->qsg.nsg > 0) { + if (req->sg.flags & NVME_SG_DMA) { uint64_t residual; =20 if (dir =3D=3D DMA_DIRECTION_TO_DEVICE) { - residual =3D dma_buf_write(ptr, len, &req->qsg); + residual =3D dma_buf_write(ptr, len, &req->sg.qsg); } else { - residual =3D dma_buf_read(ptr, len, &req->qsg); + residual =3D dma_buf_read(ptr, len, &req->sg.qsg); } =20 if (unlikely(residual)) { @@ -903,9 +902,9 @@ static uint16_t nvme_dma(NvmeCtrl *n, uint8_t *ptr, uin= t32_t len, size_t bytes; =20 if (dir =3D=3D DMA_DIRECTION_TO_DEVICE) { - bytes =3D qemu_iovec_to_buf(&req->iov, 0, ptr, len); + bytes =3D qemu_iovec_to_buf(&req->sg.iov, 0, ptr, len); } else { - bytes =3D qemu_iovec_from_buf(&req->iov, 0, ptr, len); + bytes =3D qemu_iovec_from_buf(&req->sg.iov, 0, ptr, len); } =20 if (unlikely(bytes !=3D len)) { @@ -917,6 +916,32 @@ static uint16_t nvme_dma(NvmeCtrl *n, uint8_t *ptr, ui= nt32_t len, return status; } =20 +static inline void nvme_blk_read(BlockBackend *blk, int64_t offset, + BlockCompletionFunc *cb, NvmeRequest *req) +{ + assert(req->sg.flags & NVME_SG_ALLOC); + + if (req->sg.flags & NVME_SG_DMA) { + req->aiocb =3D dma_blk_read(blk, &req->sg.qsg, offset, BDRV_SECTOR= _SIZE, + cb, req); + } else { + req->aiocb =3D blk_aio_preadv(blk, offset, &req->sg.iov, 0, cb, re= q); + } +} + +static inline void nvme_blk_write(BlockBackend *blk, int64_t offset, + BlockCompletionFunc *cb, NvmeRequest *re= q) +{ + assert(req->sg.flags & NVME_SG_ALLOC); + + if (req->sg.flags & NVME_SG_DMA) { + req->aiocb =3D dma_blk_write(blk, &req->sg.qsg, offset, BDRV_SECTO= R_SIZE, + cb, req); + } else { + req->aiocb =3D blk_aio_pwritev(blk, offset, &req->sg.iov, 0, cb, r= eq); + } +} + static void nvme_post_cqes(void *opaque) { NvmeCQueue *cq =3D opaque; @@ -947,7 +972,7 @@ static void nvme_post_cqes(void *opaque) } QTAILQ_REMOVE(&cq->req_list, req, entry); nvme_inc_cq_tail(cq); - nvme_req_exit(req); + nvme_sg_unmap(&req->sg); QTAILQ_INSERT_TAIL(&sq->req_list, req, entry); } if (cq->tail !=3D cq->head) { @@ -1644,14 +1669,14 @@ static void nvme_copy_in_complete(NvmeRequest *req) zone->w_ptr +=3D ctx->nlb; } =20 - qemu_iovec_init(&req->iov, 1); - qemu_iovec_add(&req->iov, ctx->bounce, nvme_l2b(ns, ctx->nlb)); + qemu_iovec_init(&req->sg.iov, 1); + qemu_iovec_add(&req->sg.iov, ctx->bounce, nvme_l2b(ns, ctx->nlb)); =20 block_acct_start(blk_get_stats(ns->blkconf.blk), &req->acct, 0, BLOCK_ACCT_WRITE); =20 req->aiocb =3D blk_aio_pwritev(ns->blkconf.blk, nvme_l2b(ns, sdlba), - &req->iov, 0, nvme_copy_cb, req); + &req->sg.iov, 0, nvme_copy_cb, req); =20 return; =20 @@ -2087,13 +2112,7 @@ static uint16_t nvme_read(NvmeCtrl *n, NvmeRequest *= req) =20 block_acct_start(blk_get_stats(blk), &req->acct, data_size, BLOCK_ACCT_READ); - if (req->qsg.sg) { - req->aiocb =3D dma_blk_read(blk, &req->qsg, data_offset, - BDRV_SECTOR_SIZE, nvme_rw_cb, req); - } else { - req->aiocb =3D blk_aio_preadv(blk, data_offset, &req->iov, 0, - nvme_rw_cb, req); - } + nvme_blk_read(blk, data_offset, nvme_rw_cb, req); return NVME_NO_COMPLETE; =20 invalid: @@ -2173,13 +2192,7 @@ static uint16_t nvme_do_write(NvmeCtrl *n, NvmeReque= st *req, bool append, =20 block_acct_start(blk_get_stats(blk), &req->acct, data_size, BLOCK_ACCT_WRITE); - if (req->qsg.sg) { - req->aiocb =3D dma_blk_write(blk, &req->qsg, data_offset, - BDRV_SECTOR_SIZE, nvme_rw_cb, req); - } else { - req->aiocb =3D blk_aio_pwritev(blk, data_offset, &req->iov, 0, - nvme_rw_cb, req); - } + nvme_blk_write(blk, data_offset, nvme_rw_cb, req); } else { req->aiocb =3D blk_aio_pwrite_zeroes(blk, data_offset, data_size, BDRV_REQ_MAY_UNMAP, nvme_rw_cb, --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615292569; cv=none; d=zohomail.com; s=zohoarc; b=Hurl08x609oYRYK6Ih4cnzR+IJo3aYPhBAldnwd3kCHeVR/v3nGkBMFtiEUwSJy+ofDhSnrENg/mc+XIZNzXLMyCFpdbdXOtbwCS3wir8F4I1vg26p0ydRmPp/L44ttrt2637Hs5Y7navygyuq82uEW36w1qkywOtecH8xbxVJM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615292569; 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=6xdWcItI5V3DE2Nyc9LS/NnV41O+rDzrC4PEbPvyRFM=; b=i7DrMWbvvSTk8F43Z45Sdr1x1aVis81ekFQSqvHU6QOzfgnCp41h3+bCQWeHTKuZXhdOeH56VTGiNVUjw/ONLudE4dkQYNWQrus1heFPL84T8+Y3SE+rZyTLTOOH16wjlFMQxq+cmsmMO0U8cYgvU2u/8KcwCMqpQPkwVzl45Kw= 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 161529256987274.47749867709774; Tue, 9 Mar 2021 04:22:49 -0800 (PST) Received: from localhost ([::1]:51880 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbNw-0006k5-LS for importer@patchew.org; Tue, 09 Mar 2021 07:22:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43250) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoU-0000OJ-1r; Tue, 09 Mar 2021 06:46:10 -0500 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:37223) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoO-0000gR-AD; Tue, 09 Mar 2021 06:46:09 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 2A5ED2773; Tue, 9 Mar 2021 06:46:02 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:46:02 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 5F82024005D; Tue, 9 Mar 2021 06:46:00 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=6xdWcItI5V3DE 2Nyc9LS/NnV41O+rDzrC4PEbPvyRFM=; b=sqwQieejD6vykLwpFgbshsPKVmO9x 1EWoiFOk/8vt/Ir3+HwahWKesJ3uujAi20js1Mk9Xw4rr2LTuSJrBoTiz087bANk 19O0XTSpy5rC7zTK4lyC9Jsbay+FnXCAI+/IWwyog7Bu+Gh3j/+SV+rDFddyurFS D32Xbux89/yNn3v2cuOYuYTq6WACKNW++ZZlwDWSnAC+MLKGX9JyZ7bwfpssL0ZK PL+rAJkRbpI/kWd1j23+OVkK1RkbG6DUe1OmaaTU5wcyvF4tzfJGBkrpZ2y3eJTD 9G7Zs4bn2XaqzHWr7++X0XCzSMgVhMr2RFOn3VjvD9TFJakI07KHpo0qg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=6xdWcItI5V3DE2Nyc9LS/NnV41O+rDzrC4PEbPvyRFM=; b=Wl7fZ6pS wr61wd72NxoisKwaCP3B3AEQ61/Vm5213i1JP7V5SM/oLaFb3mSo6Y8T+LgH/G7O Q4pfKmKyUSJooboitJNWw07M3wPnYT0oboFUj1BW37ttrNTA7G10R9bLQV2St6BQ GrTjoJYLTnGDTrHCXm/x+b17X0rcTNOt7NSG0z9UdSyrZnSad0mBjReP/11QPcCH BH++yxjezVzRXRvm9bOaycySR6nxiOWoqoyH6ZYynoa0e5tYc33AHW4yX5Uq45Gy 9yfi3NQ/oFKDpxECIj/zp77Q32koZhf0s+CgDEPTnP+ac2ZgX6ux+oleUmrNaZom ambAGvMdtVkhZg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeduke enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 29/38] hw/block/nvme: remove the req dependency in map functions Date: Tue, 9 Mar 2021 12:45:03 +0100 Message-Id: <20210309114512.536489-30-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.25; envelope-from=its@irrelevant.dk; helo=wout2-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen The PRP and SGL mapping functions does not have any particular need for the entire NvmeRequest as a parameter. Clean it up. Signed-off-by: Klaus Jensen Reviewed-by: Keith Busch --- hw/block/nvme.c | 61 ++++++++++++++++++++++--------------------- hw/block/trace-events | 4 +-- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index a1e28c6570d4..59942f88113f 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -544,8 +544,8 @@ static inline bool nvme_addr_is_dma(NvmeCtrl *n, hwaddr= addr) return !(nvme_addr_is_cmb(n, addr) || nvme_addr_is_pmr(n, addr)); } =20 -static uint16_t nvme_map_prp(NvmeCtrl *n, uint64_t prp1, uint64_t prp2, - uint32_t len, NvmeRequest *req) +static uint16_t nvme_map_prp(NvmeCtrl *n, NvmeSg *sg, uint64_t prp1, + uint64_t prp2, uint32_t len) { hwaddr trans_len =3D n->page_size - (prp1 % n->page_size); trans_len =3D MIN(len, trans_len); @@ -555,9 +555,9 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, uint64_t prp1= , uint64_t prp2, =20 trace_pci_nvme_map_prp(trans_len, len, prp1, prp2, num_prps); =20 - nvme_sg_init(n, &req->sg, nvme_addr_is_dma(n, prp1)); + nvme_sg_init(n, sg, nvme_addr_is_dma(n, prp1)); =20 - status =3D nvme_map_addr(n, &req->sg, prp1, trans_len); + status =3D nvme_map_addr(n, sg, prp1, trans_len); if (status) { goto unmap; } @@ -607,7 +607,7 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, uint64_t prp1= , uint64_t prp2, } =20 trans_len =3D MIN(len, n->page_size); - status =3D nvme_map_addr(n, &req->sg, prp_ent, trans_len); + status =3D nvme_map_addr(n, sg, prp_ent, trans_len); if (status) { goto unmap; } @@ -621,7 +621,7 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, uint64_t prp1= , uint64_t prp2, status =3D NVME_INVALID_PRP_OFFSET | NVME_DNR; goto unmap; } - status =3D nvme_map_addr(n, &req->sg, prp2, len); + status =3D nvme_map_addr(n, sg, prp2, len); if (status) { goto unmap; } @@ -631,7 +631,7 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, uint64_t prp1= , uint64_t prp2, return NVME_SUCCESS; =20 unmap: - nvme_sg_unmap(&req->sg); + nvme_sg_unmap(sg); return status; } =20 @@ -641,7 +641,7 @@ unmap: */ static uint16_t nvme_map_sgl_data(NvmeCtrl *n, NvmeSg *sg, NvmeSglDescriptor *segment, uint64_t nsg= ld, - size_t *len, NvmeRequest *req) + size_t *len, NvmeCmd *cmd) { dma_addr_t addr, trans_len; uint32_t dlen; @@ -652,7 +652,7 @@ static uint16_t nvme_map_sgl_data(NvmeCtrl *n, NvmeSg *= sg, =20 switch (type) { case NVME_SGL_DESCR_TYPE_BIT_BUCKET: - if (req->cmd.opcode =3D=3D NVME_CMD_WRITE) { + if (cmd->opcode =3D=3D NVME_CMD_WRITE) { continue; } case NVME_SGL_DESCR_TYPE_DATA_BLOCK: @@ -681,7 +681,7 @@ static uint16_t nvme_map_sgl_data(NvmeCtrl *n, NvmeSg *= sg, break; } =20 - trace_pci_nvme_err_invalid_sgl_excess_length(nvme_cid(req)); + trace_pci_nvme_err_invalid_sgl_excess_length(dlen); return NVME_DATA_SGL_LEN_INVALID | NVME_DNR; } =20 @@ -710,7 +710,7 @@ next: } =20 static uint16_t nvme_map_sgl(NvmeCtrl *n, NvmeSg *sg, NvmeSglDescriptor sg= l, - size_t len, NvmeRequest *req) + size_t len, NvmeCmd *cmd) { /* * Read the segment in chunks of 256 descriptors (one 4k page) to avoid @@ -731,7 +731,7 @@ static uint16_t nvme_map_sgl(NvmeCtrl *n, NvmeSg *sg, N= vmeSglDescriptor sgl, sgld =3D &sgl; addr =3D le64_to_cpu(sgl.addr); =20 - trace_pci_nvme_map_sgl(nvme_cid(req), NVME_SGL_TYPE(sgl.type), len); + trace_pci_nvme_map_sgl(NVME_SGL_TYPE(sgl.type), len); =20 nvme_sg_init(n, sg, nvme_addr_is_dma(n, addr)); =20 @@ -740,7 +740,7 @@ static uint16_t nvme_map_sgl(NvmeCtrl *n, NvmeSg *sg, N= vmeSglDescriptor sgl, * be mapped directly. */ if (NVME_SGL_TYPE(sgl.type) =3D=3D NVME_SGL_DESCR_TYPE_DATA_BLOCK) { - status =3D nvme_map_sgl_data(n, sg, sgld, 1, &len, req); + status =3D nvme_map_sgl_data(n, sg, sgld, 1, &len, cmd); if (status) { goto unmap; } @@ -779,7 +779,7 @@ static uint16_t nvme_map_sgl(NvmeCtrl *n, NvmeSg *sg, N= vmeSglDescriptor sgl, } =20 status =3D nvme_map_sgl_data(n, sg, segment, SEG_CHUNK_SIZE, - &len, req); + &len, cmd); if (status) { goto unmap; } @@ -805,7 +805,7 @@ static uint16_t nvme_map_sgl(NvmeCtrl *n, NvmeSg *sg, N= vmeSglDescriptor sgl, switch (NVME_SGL_TYPE(last_sgld->type)) { case NVME_SGL_DESCR_TYPE_DATA_BLOCK: case NVME_SGL_DESCR_TYPE_BIT_BUCKET: - status =3D nvme_map_sgl_data(n, sg, segment, nsgld, &len, req); + status =3D nvme_map_sgl_data(n, sg, segment, nsgld, &len, cmd); if (status) { goto unmap; } @@ -832,7 +832,7 @@ static uint16_t nvme_map_sgl(NvmeCtrl *n, NvmeSg *sg, N= vmeSglDescriptor sgl, * Do not map the last descriptor; it will be a Segment or Last Se= gment * descriptor and is handled by the next iteration. */ - status =3D nvme_map_sgl_data(n, sg, segment, nsgld - 1, &len, req); + status =3D nvme_map_sgl_data(n, sg, segment, nsgld - 1, &len, cmd); if (status) { goto unmap; } @@ -852,24 +852,20 @@ unmap: return status; } =20 -static uint16_t nvme_map_dptr(NvmeCtrl *n, size_t len, NvmeRequest *req) +static uint16_t nvme_map_dptr(NvmeCtrl *n, NvmeSg *sg, size_t len, + NvmeCmd *cmd) { uint64_t prp1, prp2; =20 - switch (NVME_CMD_FLAGS_PSDT(req->cmd.flags)) { + switch (NVME_CMD_FLAGS_PSDT(cmd->flags)) { case NVME_PSDT_PRP: - prp1 =3D le64_to_cpu(req->cmd.dptr.prp1); - prp2 =3D le64_to_cpu(req->cmd.dptr.prp2); + prp1 =3D le64_to_cpu(cmd->dptr.prp1); + prp2 =3D le64_to_cpu(cmd->dptr.prp2); =20 - return nvme_map_prp(n, prp1, prp2, len, req); + return nvme_map_prp(n, sg, prp1, prp2, len); case NVME_PSDT_SGL_MPTR_CONTIGUOUS: case NVME_PSDT_SGL_MPTR_SGL: - /* SGLs shall not be used for Admin commands in NVMe over PCIe */ - if (!req->sq->sqid) { - return NVME_INVALID_FIELD | NVME_DNR; - } - - return nvme_map_sgl(n, &req->sg, req->cmd.dptr.sgl, len, req); + return nvme_map_sgl(n, sg, cmd->dptr.sgl, len, cmd); default: return NVME_INVALID_FIELD; } @@ -880,7 +876,7 @@ static uint16_t nvme_dma(NvmeCtrl *n, uint8_t *ptr, uin= t32_t len, { uint16_t status =3D NVME_SUCCESS; =20 - status =3D nvme_map_dptr(n, len, req); + status =3D nvme_map_dptr(n, &req->sg, len, &req->cmd); if (status) { return status; } @@ -2096,7 +2092,7 @@ static uint16_t nvme_read(NvmeCtrl *n, NvmeRequest *r= eq) } } =20 - status =3D nvme_map_dptr(n, data_size, req); + status =3D nvme_map_dptr(n, &req->sg, data_size, &req->cmd); if (status) { goto invalid; } @@ -2185,7 +2181,7 @@ static uint16_t nvme_do_write(NvmeCtrl *n, NvmeReques= t *req, bool append, data_offset =3D nvme_l2b(ns, slba); =20 if (!wrz) { - status =3D nvme_map_dptr(n, data_size, req); + status =3D nvme_map_dptr(n, &req->sg, data_size, &req->cmd); if (status) { goto invalid; } @@ -3867,6 +3863,11 @@ static uint16_t nvme_admin_cmd(NvmeCtrl *n, NvmeRequ= est *req) return NVME_INVALID_OPCODE | NVME_DNR; } =20 + /* SGLs shall not be used for Admin commands in NVMe over PCIe */ + if (NVME_CMD_FLAGS_PSDT(req->cmd.flags) !=3D NVME_PSDT_PRP) { + return NVME_INVALID_FIELD | NVME_DNR; + } + switch (req->cmd.opcode) { case NVME_ADM_CMD_DELETE_SQ: return nvme_del_sq(n, req); diff --git a/hw/block/trace-events b/hw/block/trace-events index 8deeacc8c35c..60a076cea54f 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -37,7 +37,7 @@ pci_nvme_dma_read(uint64_t prp1, uint64_t prp2) "DMA read= , prp1=3D0x%"PRIx64" prp2 pci_nvme_map_addr(uint64_t addr, uint64_t len) "addr 0x%"PRIx64" len %"PRI= u64"" pci_nvme_map_addr_cmb(uint64_t addr, uint64_t len) "addr 0x%"PRIx64" len %= "PRIu64"" pci_nvme_map_prp(uint64_t trans_len, uint32_t len, uint64_t prp1, uint64_t= prp2, int num_prps) "trans_len %"PRIu64" len %"PRIu32" prp1 0x%"PRIx64" pr= p2 0x%"PRIx64" num_prps %d" -pci_nvme_map_sgl(uint16_t cid, uint8_t typ, uint64_t len) "cid %"PRIu16" t= ype 0x%"PRIx8" len %"PRIu64"" +pci_nvme_map_sgl(uint8_t typ, uint64_t len) "type 0x%"PRIx8" len %"PRIu64"" pci_nvme_io_cmd(uint16_t cid, uint32_t nsid, uint16_t sqid, uint8_t opcode= , const char *opname) "cid %"PRIu16" nsid %"PRIu32" sqid %"PRIu16" opc 0x%"= PRIx8" opname '%s'" pci_nvme_admin_cmd(uint16_t cid, uint16_t sqid, uint8_t opcode, const char= *opname) "cid %"PRIu16" sqid %"PRIu16" opc 0x%"PRIx8" opname '%s'" pci_nvme_flush(uint16_t cid, uint32_t nsid) "cid %"PRIu16" nsid %"PRIu32"" @@ -126,7 +126,7 @@ pci_nvme_err_aio(uint16_t cid, const char *errname, uin= t16_t status) "cid %"PRIu pci_nvme_err_copy_invalid_format(uint8_t format) "format 0x%"PRIx8"" pci_nvme_err_invalid_sgld(uint16_t cid, uint8_t typ) "cid %"PRIu16" type 0= x%"PRIx8"" pci_nvme_err_invalid_num_sgld(uint16_t cid, uint8_t typ) "cid %"PRIu16" ty= pe 0x%"PRIx8"" -pci_nvme_err_invalid_sgl_excess_length(uint16_t cid) "cid %"PRIu16"" +pci_nvme_err_invalid_sgl_excess_length(uint32_t residual) "residual %"PRIu= 32"" pci_nvme_err_invalid_dma(void) "PRP/SGL is too small for transfer size" pci_nvme_err_invalid_prplist_ent(uint64_t prplist) "PRP list entry is not = page aligned: 0x%"PRIx64"" pci_nvme_err_invalid_prp2_align(uint64_t prp2) "PRP2 is not page aligned: = 0x%"PRIx64"" --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615292979; cv=none; d=zohomail.com; s=zohoarc; b=R+/Oakpfn9ozA2n3MDxqGkEZEPMZy0nP0AJ8wvLkyNuvJc2cMq8wFAD2BcvpeaE5pHuQsqoflMQPeib3HmYKs3x0L5jIWaOoS7teTnYLHpBXd4n9OYwLPF92J6JNqokumkxt/H51aa344OHBbPUj3tTIZEvAGk60lywopXw7rKM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615292979; 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=YcBdy6KQUHYE2xrN0ASgv0WNNdITOo80xNPhD0N6Ptc=; b=lqYkmQ9jzQbvgRDi+VMOENAR5inGArOVYO2yj/aBhHjrQu9MBWS6MNZmh12KJ+tUpqtbFTcRB1GBqs/g89js0pQPTal424zBefe6thWjTuIVfy0JERK4gaMMl8pwLi4QhQHM8qQ+rurKNnhqUpMiG4jES0iDtf260vPd8YlELVI= 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 1615292979599483.8624891013909; Tue, 9 Mar 2021 04:29:39 -0800 (PST) Received: from localhost ([::1]:60542 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbUW-00023Q-JY for importer@patchew.org; Tue, 09 Mar 2021 07:29:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43260) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoV-0000Q5-HP; Tue, 09 Mar 2021 06:46:13 -0500 Received: from wout2-smtp.messagingengine.com ([64.147.123.25]:49907) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaoT-0000hp-2X; Tue, 09 Mar 2021 06:46:11 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id A4327278C; Tue, 9 Mar 2021 06:46:03 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:46:04 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id E2DF1240054; Tue, 9 Mar 2021 06:46:01 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=YcBdy6KQUHYE2 xrN0ASgv0WNNdITOo80xNPhD0N6Ptc=; b=q+36/o6B8+7b8jYtH+dG3wq/83Y7m s/uoSnDEomkObkCnc7lUcn13ESRxQi0tFHRGpVVnaEcMvBRiBJcFhqlVGsA988+9 zjb5USnV/iDEFfn4lyR6Jz/+7BS8kNsGBI4IWAGjy4LrlnsHIYEggRB6SGTXu4Pa nDaEfm/vuQ7f31Vqb5ljVlt5OSY5Gc2ltIS/mL7kfVXZtlSi8iL4hZ9RfmgOrhuX 9pFdytWl/ux2CVOVtV1RopEw2SP3LUcEPmxRcAB2F/bGLNR0fu5TRA+hiTGhTPxk yYfsLKNmA6f/uR0Y1K0AEbmf9gZ7SqD6hlD4z4xKAVnV/DKavswe+38/A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=YcBdy6KQUHYE2xrN0ASgv0WNNdITOo80xNPhD0N6Ptc=; b=BDh+2jM0 PB2ziNRID7oHhFNJmQoo3uBVhuJb5q4FvZ5Vw1u+0MNhyp5ntkAZbut2tRaPqqsR /+IDkYGPMwKUzM456PXU53WS4LkbxNnPF+QkfzsXkTK707EOXfMryk57cocPTSr1 Lve+cu0TUhWcfNhjipqRZzmiiFQENrpMF5ultdx205Iet+KO5N+0AqeZRPS0/rKj B+LEXxcsptNH6xHfyvZED3EB/q+eGLZ63Cx5+dVlHpCa163hm5voW8LwZb3W2i9o wDFmC5JBPwpyLKDVMiI5xF8DI/W6dfrMqw1QAe4BCoUSbuYO32iZDhf2Av8VIvUK NCse2OsMBZHj4A== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpeduke enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 30/38] hw/block/nvme: refactor nvme_dma Date: Tue, 9 Mar 2021 12:45:04 +0100 Message-Id: <20210309114512.536489-31-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.25; envelope-from=its@irrelevant.dk; helo=wout2-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Klaus Jensen The nvme_dma function doesn't just do DMA (QEMUSGList-based) memory transfe= rs; it also handles QEMUIOVector copies. Introduce the NvmeTxDirection enum and rename to nvme_tx. Remove mapping of PRPs/SGLs from nvme_tx and instead assert that they have been mapped previously. This allows more fine-grained use in subsequent patches. Add new (better named) helpers, nvme_{c2h,h2c}, that does both PRP/SGL mapping and transfer. Signed-off-by: Klaus Jensen Reviewed-by: Keith Busch --- hw/block/nvme.c | 138 ++++++++++++++++++++++++++---------------------- 1 file changed, 76 insertions(+), 62 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 59942f88113f..bfab80c45789 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -871,45 +871,71 @@ static uint16_t nvme_map_dptr(NvmeCtrl *n, NvmeSg *sg= , size_t len, } } =20 -static uint16_t nvme_dma(NvmeCtrl *n, uint8_t *ptr, uint32_t len, - DMADirection dir, NvmeRequest *req) +typedef enum NvmeTxDirection { + NVME_TX_DIRECTION_TO_DEVICE =3D 0, + NVME_TX_DIRECTION_FROM_DEVICE =3D 1, +} NvmeTxDirection; + +static uint16_t nvme_tx(NvmeCtrl *n, NvmeSg *sg, uint8_t *ptr, uint32_t le= n, + NvmeTxDirection dir) { - uint16_t status =3D NVME_SUCCESS; + assert(sg->flags & NVME_SG_ALLOC); + + if (sg->flags & NVME_SG_DMA) { + uint64_t residual; + + if (dir =3D=3D NVME_TX_DIRECTION_TO_DEVICE) { + residual =3D dma_buf_write(ptr, len, &sg->qsg); + } else { + residual =3D dma_buf_read(ptr, len, &sg->qsg); + } + + if (unlikely(residual)) { + trace_pci_nvme_err_invalid_dma(); + return NVME_INVALID_FIELD | NVME_DNR; + } + } else { + size_t bytes; + + if (dir =3D=3D NVME_TX_DIRECTION_TO_DEVICE) { + bytes =3D qemu_iovec_to_buf(&sg->iov, 0, ptr, len); + } else { + bytes =3D qemu_iovec_from_buf(&sg->iov, 0, ptr, len); + } + + if (unlikely(bytes !=3D len)) { + trace_pci_nvme_err_invalid_dma(); + return NVME_INVALID_FIELD | NVME_DNR; + } + } + + return NVME_SUCCESS; +} + +static inline uint16_t nvme_c2h(NvmeCtrl *n, uint8_t *ptr, uint32_t len, + NvmeRequest *req) +{ + uint16_t status; =20 status =3D nvme_map_dptr(n, &req->sg, len, &req->cmd); if (status) { return status; } =20 - if (req->sg.flags & NVME_SG_DMA) { - uint64_t residual; + return nvme_tx(n, &req->sg, ptr, len, NVME_TX_DIRECTION_FROM_DEVICE); +} =20 - if (dir =3D=3D DMA_DIRECTION_TO_DEVICE) { - residual =3D dma_buf_write(ptr, len, &req->sg.qsg); - } else { - residual =3D dma_buf_read(ptr, len, &req->sg.qsg); - } +static inline uint16_t nvme_h2c(NvmeCtrl *n, uint8_t *ptr, uint32_t len, + NvmeRequest *req) +{ + uint16_t status; =20 - if (unlikely(residual)) { - trace_pci_nvme_err_invalid_dma(); - status =3D NVME_INVALID_FIELD | NVME_DNR; - } - } else { - size_t bytes; - - if (dir =3D=3D DMA_DIRECTION_TO_DEVICE) { - bytes =3D qemu_iovec_to_buf(&req->sg.iov, 0, ptr, len); - } else { - bytes =3D qemu_iovec_from_buf(&req->sg.iov, 0, ptr, len); - } - - if (unlikely(bytes !=3D len)) { - trace_pci_nvme_err_invalid_dma(); - status =3D NVME_INVALID_FIELD | NVME_DNR; - } + status =3D nvme_map_dptr(n, &req->sg, len, &req->cmd); + if (status) { + return status; } =20 - return status; + return nvme_tx(n, &req->sg, ptr, len, NVME_TX_DIRECTION_TO_DEVICE); } =20 static inline void nvme_blk_read(BlockBackend *blk, int64_t offset, @@ -1746,8 +1772,7 @@ static void nvme_compare_cb(void *opaque, int ret) =20 buf =3D g_malloc(ctx->iov.size); =20 - status =3D nvme_dma(nvme_ctrl(req), buf, ctx->iov.size, - DMA_DIRECTION_TO_DEVICE, req); + status =3D nvme_h2c(nvme_ctrl(req), buf, ctx->iov.size, req); if (status) { req->status =3D status; goto out; @@ -1783,8 +1808,7 @@ static uint16_t nvme_dsm(NvmeCtrl *n, NvmeRequest *re= q) NvmeDsmRange range[nr]; uintptr_t *discards =3D (uintptr_t *)&req->opaque; =20 - status =3D nvme_dma(n, (uint8_t *)range, sizeof(range), - DMA_DIRECTION_TO_DEVICE, req); + status =3D nvme_h2c(n, (uint8_t *)range, sizeof(range), req); if (status) { return status; } @@ -1870,8 +1894,8 @@ static uint16_t nvme_copy(NvmeCtrl *n, NvmeRequest *r= eq) =20 range =3D g_new(NvmeCopySourceRange, nr); =20 - status =3D nvme_dma(n, (uint8_t *)range, nr * sizeof(NvmeCopySourceRan= ge), - DMA_DIRECTION_TO_DEVICE, req); + status =3D nvme_h2c(n, (uint8_t *)range, nr * sizeof(NvmeCopySourceRan= ge), + req); if (status) { return status; } @@ -2522,8 +2546,7 @@ static uint16_t nvme_zone_mgmt_send(NvmeCtrl *n, Nvme= Request *req) return NVME_INVALID_FIELD | NVME_DNR; } zd_ext =3D nvme_get_zd_extension(ns, zone_idx); - status =3D nvme_dma(n, zd_ext, ns->params.zd_extension_size, - DMA_DIRECTION_TO_DEVICE, req); + status =3D nvme_h2c(n, zd_ext, ns->params.zd_extension_size, req); if (status) { trace_pci_nvme_err_zd_extension_map_error(zone_idx); return status; @@ -2677,8 +2700,7 @@ static uint16_t nvme_zone_mgmt_recv(NvmeCtrl *n, Nvme= Request *req) } } =20 - status =3D nvme_dma(n, (uint8_t *)buf, data_size, - DMA_DIRECTION_FROM_DEVICE, req); + status =3D nvme_c2h(n, (uint8_t *)buf, data_size, req); =20 g_free(buf); =20 @@ -2944,8 +2966,7 @@ static uint16_t nvme_smart_info(NvmeCtrl *n, uint8_t = rae, uint32_t buf_len, nvme_clear_events(n, NVME_AER_TYPE_SMART); } =20 - return nvme_dma(n, (uint8_t *) &smart + off, trans_len, - DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, (uint8_t *) &smart + off, trans_len, req); } =20 static uint16_t nvme_fw_log_info(NvmeCtrl *n, uint32_t buf_len, uint64_t o= ff, @@ -2963,8 +2984,7 @@ static uint16_t nvme_fw_log_info(NvmeCtrl *n, uint32_= t buf_len, uint64_t off, strpadcpy((char *)&fw_log.frs1, sizeof(fw_log.frs1), "1.0", ' '); trans_len =3D MIN(sizeof(fw_log) - off, buf_len); =20 - return nvme_dma(n, (uint8_t *) &fw_log + off, trans_len, - DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, (uint8_t *) &fw_log + off, trans_len, req); } =20 static uint16_t nvme_error_info(NvmeCtrl *n, uint8_t rae, uint32_t buf_len, @@ -2984,8 +3004,7 @@ static uint16_t nvme_error_info(NvmeCtrl *n, uint8_t = rae, uint32_t buf_len, memset(&errlog, 0x0, sizeof(errlog)); trans_len =3D MIN(sizeof(errlog) - off, buf_len); =20 - return nvme_dma(n, (uint8_t *)&errlog, trans_len, - DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, (uint8_t *)&errlog, trans_len, req); } =20 static uint16_t nvme_cmd_effects(NvmeCtrl *n, uint8_t csi, uint32_t buf_le= n, @@ -3025,8 +3044,7 @@ static uint16_t nvme_cmd_effects(NvmeCtrl *n, uint8_t= csi, uint32_t buf_len, =20 trans_len =3D MIN(sizeof(log) - off, buf_len); =20 - return nvme_dma(n, ((uint8_t *)&log) + off, trans_len, - DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, ((uint8_t *)&log) + off, trans_len, req); } =20 static uint16_t nvme_get_log(NvmeCtrl *n, NvmeRequest *req) @@ -3194,7 +3212,7 @@ static uint16_t nvme_rpt_empty_id_struct(NvmeCtrl *n,= NvmeRequest *req) { uint8_t id[NVME_IDENTIFY_DATA_SIZE] =3D {}; =20 - return nvme_dma(n, id, sizeof(id), DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, id, sizeof(id), req); } =20 static inline bool nvme_csi_has_nvm_support(NvmeNamespace *ns) @@ -3211,8 +3229,7 @@ static uint16_t nvme_identify_ctrl(NvmeCtrl *n, NvmeR= equest *req) { trace_pci_nvme_identify_ctrl(); =20 - return nvme_dma(n, (uint8_t *)&n->id_ctrl, sizeof(n->id_ctrl), - DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, (uint8_t *)&n->id_ctrl, sizeof(n->id_ctrl), req); } =20 static uint16_t nvme_identify_ctrl_csi(NvmeCtrl *n, NvmeRequest *req) @@ -3235,7 +3252,7 @@ static uint16_t nvme_identify_ctrl_csi(NvmeCtrl *n, N= vmeRequest *req) return NVME_INVALID_FIELD | NVME_DNR; } =20 - return nvme_dma(n, id, sizeof(id), DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, id, sizeof(id), req); } =20 static uint16_t nvme_identify_ns(NvmeCtrl *n, NvmeRequest *req) @@ -3256,8 +3273,7 @@ static uint16_t nvme_identify_ns(NvmeCtrl *n, NvmeReq= uest *req) } =20 if (c->csi =3D=3D NVME_CSI_NVM && nvme_csi_has_nvm_support(ns)) { - return nvme_dma(n, (uint8_t *)&ns->id_ns, sizeof(NvmeIdNs), - DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, (uint8_t *)&ns->id_ns, sizeof(NvmeIdNs), req); } =20 return NVME_INVALID_CMD_SET | NVME_DNR; @@ -3283,8 +3299,8 @@ static uint16_t nvme_identify_ns_csi(NvmeCtrl *n, Nvm= eRequest *req) if (c->csi =3D=3D NVME_CSI_NVM && nvme_csi_has_nvm_support(ns)) { return nvme_rpt_empty_id_struct(n, req); } else if (c->csi =3D=3D NVME_CSI_ZONED && ns->csi =3D=3D NVME_CSI_ZON= ED) { - return nvme_dma(n, (uint8_t *)ns->id_ns_zoned, sizeof(NvmeIdNsZone= d), - DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, (uint8_t *)ns->id_ns_zoned, sizeof(NvmeIdNsZone= d), + req); } =20 return NVME_INVALID_FIELD | NVME_DNR; @@ -3326,7 +3342,7 @@ static uint16_t nvme_identify_nslist(NvmeCtrl *n, Nvm= eRequest *req) } } =20 - return nvme_dma(n, list, data_len, DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, list, data_len, req); } =20 static uint16_t nvme_identify_nslist_csi(NvmeCtrl *n, NvmeRequest *req) @@ -3366,7 +3382,7 @@ static uint16_t nvme_identify_nslist_csi(NvmeCtrl *n,= NvmeRequest *req) } } =20 - return nvme_dma(n, list, data_len, DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, list, data_len, req); } =20 static uint16_t nvme_identify_ns_descr_list(NvmeCtrl *n, NvmeRequest *req) @@ -3413,7 +3429,7 @@ static uint16_t nvme_identify_ns_descr_list(NvmeCtrl = *n, NvmeRequest *req) ns_descrs->csi.hdr.nidl =3D NVME_NIDL_CSI; ns_descrs->csi.v =3D ns->csi; =20 - return nvme_dma(n, list, sizeof(list), DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, list, sizeof(list), req); } =20 static uint16_t nvme_identify_cmd_set(NvmeCtrl *n, NvmeRequest *req) @@ -3426,7 +3442,7 @@ static uint16_t nvme_identify_cmd_set(NvmeCtrl *n, Nv= meRequest *req) NVME_SET_CSI(*list, NVME_CSI_NVM); NVME_SET_CSI(*list, NVME_CSI_ZONED); =20 - return nvme_dma(n, list, data_len, DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, list, data_len, req); } =20 static uint16_t nvme_identify(NvmeCtrl *n, NvmeRequest *req) @@ -3518,8 +3534,7 @@ static uint16_t nvme_get_feature_timestamp(NvmeCtrl *= n, NvmeRequest *req) { uint64_t timestamp =3D nvme_get_timestamp(n); =20 - return nvme_dma(n, (uint8_t *)×tamp, sizeof(timestamp), - DMA_DIRECTION_FROM_DEVICE, req); + return nvme_c2h(n, (uint8_t *)×tamp, sizeof(timestamp), req); } =20 static uint16_t nvme_get_feature(NvmeCtrl *n, NvmeRequest *req) @@ -3680,8 +3695,7 @@ static uint16_t nvme_set_feature_timestamp(NvmeCtrl *= n, NvmeRequest *req) uint16_t ret; uint64_t timestamp; =20 - ret =3D nvme_dma(n, (uint8_t *)×tamp, sizeof(timestamp), - DMA_DIRECTION_TO_DEVICE, req); + ret =3D nvme_h2c(n, (uint8_t *)×tamp, sizeof(timestamp), req); if (ret) { return ret; } --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615293405; cv=none; d=zohomail.com; s=zohoarc; b=FFu5Lhilj0Cvi4O/Qja9jcuY8KADZVoRnhQfHch2UQGroPJGBVXvF+WyQy4w4EwJxBkGDhHhdYJWnHJC9U9NSIko562SI6IqqRp24IaSLN8yTtX8fm7WWzsZN81XDQ3hBN3aECe7IGxN9kpW/OfwI/ywMLIP2QtBNHJfKwiOc9M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615293405; 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=dRgKH07aE4wyMuJtz6k9DuMLBzKEnzW2uip9qqNh/9g=; b=L6t97RlxA4XmVogn4XPBAAjV27sqwfYxZw0Z+EDeqz9aTbOTzSd3Q5tLUaqpMeqarE1LXsNHopSw7nXxn3l078B5DOOSbcilql48SiBFqOayn51ReMJfFwFk2x7LrKWBq2idsIHI4dHPL8HLTyFZs3vwx7fkGf2bmitiVfEsDKI= 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 1615293405583522.3220410139207; Tue, 9 Mar 2021 04:36:45 -0800 (PST) Received: from localhost ([::1]:42312 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbbQ-0006JS-AL for importer@patchew.org; Tue, 09 Mar 2021 07:36:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43570) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap4-0000gn-3e; Tue, 09 Mar 2021 06:46:46 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:33905) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJaow-0000nE-2X; Tue, 09 Mar 2021 06:46:45 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 3850C12FC; Tue, 9 Mar 2021 06:46:05 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:46:05 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 5EF3524005C; Tue, 9 Mar 2021 06:46:03 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=dRgKH07aE4wyM uJtz6k9DuMLBzKEnzW2uip9qqNh/9g=; b=0oFSJ3y9IEGimyj/3c+WOLXboFSIT hd7oPapBnCZ/la3kHdvID5W3rIj+k9iLr4gdlqz/oa/Sqn67gQNqUhUbddWKTd9H SOJz+2Jxd7devY7xH7pI9juPSPUQP2lA7VIgdRUhR2DXjYU6WePptgDD1g5vci35 Nv/PZSBmchZHZD8+pxVyoXsPgn2wq4T5XM+55233wk3be/os++rH5sNtLVg+lJyW rD+8mQiXSWc5Ox3BbsaDiatvNArBoByt/LOGWjrpwWlxbngCS99P7+3dzRjS93LS soFMGynJ3lC3kD9YE9WRZjzRg/ZjlTHxiRMDca0AcKTHdHDxlOWiaRF1w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=dRgKH07aE4wyMuJtz6k9DuMLBzKEnzW2uip9qqNh/9g=; b=FSf7aWId ynm6SQEsJH6ZJCG2hc/vsV4Elmh2t5F0opV63a/NElJk1Yp1zbmO4eBS6SwXP7mQ dB6lYF2Hxi1eVGtWe7/8RMMas5nUy3mcSXQZm8cm8r7cUbv8T2l4Z4O1NEpqehHq RzeThE3amKLDdgId6/8ALtjocTbuFfzfl5KSoXk4lUVMewo1GoRJrCsG0btGvgCz 2Q3U7FAG4cLD/Wd2C9YsvTQUXgkNHi+7SA4ZAEJgNDnG4YoZ8naplE/0TRTw3xiy H9PDBzW9/IasGcQUwhuplEacZvtbI+WZsKiPOOtBVp1GUeWxsqPIy/Gh/80Eo2dB xgyzi8GBd2FiKA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedvvd enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 31/38] hw/block/nvme: support namespace detach Date: Tue, 9 Mar 2021 12:45:05 +0100 Message-Id: <20210309114512.536489-32-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im Given that now we have nvme-subsys device supported, we can manage namespace allocated, but not attached: detached. This patch introduced a parameter for nvme-ns device named 'detached'. This parameter indicates whether the given namespace device is detached from a entire NVMe subsystem('subsys' given case, shared namespace) or a controller('bus' given case, private namespace). - Allocated namespace 1) Shared ns in the subsystem 'subsys0': -device nvme-ns,id=3Dns1,drive=3Dblknvme0,nsid=3D1,subsys=3Dsubsys0,de= tached=3Dtrue 2) Private ns for the controller 'nvme0' of the subsystem 'subsys0': -device nvme-subsys,id=3Dsubsys0 -device nvme,serial=3Dfoo,id=3Dnvme0,subsys=3Dsubsys0 -device nvme-ns,id=3Dns1,drive=3Dblknvme0,nsid=3D1,bus=3Dnvme0,detache= d=3Dtrue 3) (Invalid case) Controller 'nvme0' has no subsystem to manage ns: -device nvme,serial=3Dfoo,id=3Dnvme0 -device nvme-ns,id=3Dns1,drive=3Dblknvme0,nsid=3D1,bus=3Dnvme0,detache= d=3Dtrue Signed-off-by: Minwoo Im Reviewed-by: Keith Busch Signed-off-by: Klaus Jensen --- hw/block/nvme-ns.h | 1 + hw/block/nvme-subsys.h | 1 + hw/block/nvme.h | 22 ++++++++++++++++++++++ hw/block/nvme-ns.c | 1 + hw/block/nvme.c | 41 +++++++++++++++++++++++++++++++++++++++-- 5 files changed, 64 insertions(+), 2 deletions(-) diff --git a/hw/block/nvme-ns.h b/hw/block/nvme-ns.h index 7af6884862b5..b0c00e115d81 100644 --- a/hw/block/nvme-ns.h +++ b/hw/block/nvme-ns.h @@ -26,6 +26,7 @@ typedef struct NvmeZone { } NvmeZone; =20 typedef struct NvmeNamespaceParams { + bool detached; uint32_t nsid; QemuUUID uuid; =20 diff --git a/hw/block/nvme-subsys.h b/hw/block/nvme-subsys.h index 7a54a8512079..507efcd23f9b 100644 --- a/hw/block/nvme-subsys.h +++ b/hw/block/nvme-subsys.h @@ -23,6 +23,7 @@ typedef struct NvmeSubsystem { uint8_t subnqn[256]; =20 NvmeCtrl *ctrls[NVME_SUBSYS_MAX_CTRLS]; + /* Allocated namespaces for this subsystem */ NvmeNamespace *namespaces[NVME_SUBSYS_MAX_NAMESPACES]; =20 struct { diff --git a/hw/block/nvme.h b/hw/block/nvme.h index 96afefa8c9fb..cd8d40634411 100644 --- a/hw/block/nvme.h +++ b/hw/block/nvme.h @@ -189,6 +189,10 @@ typedef struct NvmeCtrl { NvmeSubsystem *subsys; =20 NvmeNamespace namespace; + /* + * Attached namespaces to this controller. If subsys is not given, all + * namespaces in this list will always be attached. + */ NvmeNamespace *namespaces[NVME_MAX_NAMESPACES]; NvmeSQueue **sq; NvmeCQueue **cq; @@ -207,6 +211,24 @@ static inline NvmeNamespace *nvme_ns(NvmeCtrl *n, uint= 32_t nsid) return n->namespaces[nsid - 1]; } =20 +static inline bool nvme_ns_is_attached(NvmeCtrl *n, NvmeNamespace *ns) +{ + int nsid; + + for (nsid =3D 1; nsid <=3D n->num_namespaces; nsid++) { + if (nvme_ns(n, nsid) =3D=3D ns) { + return true; + } + } + + return false; +} + +static inline void nvme_ns_attach(NvmeCtrl *n, NvmeNamespace *ns) +{ + n->namespaces[nvme_nsid(ns) - 1] =3D ns; +} + static inline NvmeCQueue *nvme_cq(NvmeRequest *req) { NvmeSQueue *sq =3D req->sq; diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c index 0e8760020483..eda6a0c003a4 100644 --- a/hw/block/nvme-ns.c +++ b/hw/block/nvme-ns.c @@ -399,6 +399,7 @@ static Property nvme_ns_props[] =3D { DEFINE_BLOCK_PROPERTIES(NvmeNamespace, blkconf), DEFINE_PROP_LINK("subsys", NvmeNamespace, subsys, TYPE_NVME_SUBSYS, NvmeSubsystem *), + DEFINE_PROP_BOOL("detached", NvmeNamespace, params.detached, false), DEFINE_PROP_UINT32("nsid", NvmeNamespace, params.nsid, 0), DEFINE_PROP_UUID("uuid", NvmeNamespace, params.uuid), DEFINE_PROP_UINT16("mssrl", NvmeNamespace, params.mssrl, 128), diff --git a/hw/block/nvme.c b/hw/block/nvme.c index bfab80c45789..1790a66cb8f7 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -27,7 +27,7 @@ * subsys=3D * -device nvme-ns,drive=3D,bus=3D,nsid=3D,\ * zoned=3D, \ - * subsys=3D + * subsys=3D,detached=3D * * Note cmb_size_mb denotes size of CMB in MB. CMB is assumed to be at * offset 0 in BAR2 and supports only WDS, RDS and SQS for now. By default= , the @@ -91,6 +91,13 @@ * subsystem. Otherwise, `bus` must be given to attach this namespace to= a * specific controller as a non-shared namespace. * + * - `detached` + * This parameter is only valid together with the `subsys` parameter. If= left + * at the default value (`false/off`), the namespace will be attached to= all + * controllers in the NVMe subsystem at boot-up. If set to `true/on`, the + * namespace will be be available in the subsystem not not attached to a= ny + * controllers. + * * Setting `zoned` to true selects Zoned Command Set at the namespace. * In this case, the following namespace properties are available to confi= gure * zoned operation: @@ -4655,6 +4662,20 @@ static void nvme_init_state(NvmeCtrl *n) n->aer_reqs =3D g_new0(NvmeRequest *, n->params.aerl + 1); } =20 +static int nvme_attach_namespace(NvmeCtrl *n, NvmeNamespace *ns, Error **e= rrp) +{ + if (nvme_ns_is_attached(n, ns)) { + error_setg(errp, + "namespace %d is already attached to controller %d", + nvme_nsid(ns), n->cntlid); + return -1; + } + + nvme_ns_attach(n, ns); + + return 0; +} + int nvme_register_namespace(NvmeCtrl *n, NvmeNamespace *ns, Error **errp) { uint32_t nsid =3D nvme_nsid(ns); @@ -4686,7 +4707,23 @@ int nvme_register_namespace(NvmeCtrl *n, NvmeNamespa= ce *ns, Error **errp) =20 trace_pci_nvme_register_namespace(nsid); =20 - n->namespaces[nsid - 1] =3D ns; + /* + * If subsys is not given, namespae is always attached to the controll= er + * because there's no subsystem to manage namespace allocation. + */ + if (!n->subsys) { + if (ns->params.detached) { + error_setg(errp, + "detached needs nvme-subsys specified nvme or nvme-= ns"); + return -1; + } + + return nvme_attach_namespace(n, ns, errp); + } else { + if (!ns->params.detached) { + return nvme_attach_namespace(n, ns, errp); + } + } =20 n->dmrsl =3D MIN_NON_ZERO(n->dmrsl, BDRV_REQUEST_MAX_BYTES / nvme_l2b(ns, 1)); --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615293874; cv=none; d=zohomail.com; s=zohoarc; b=K9d/JSRIenXqT9fpA72dJgrg4t9QEeyeIxduv7wL4vr3zn3GmtHmUA9optWFrxqr9PUWWqhTvJz0M7op+urlEVcixwJOsWJOz9AteDnLm13pQ1p0x08DJxaTVzHzmbYpCAFH1hpIw3MYgdTAfcntXEso7xNwfyv/9Cmx4leuDbk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615293874; 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=4MBfUUX+81EY10usv2jO8kYmSruutrkK92npChlYE8Q=; b=j+Z3TK51m+pa+bz+F1HfORUKW37yxyj6eZqGuz+YW8Vdfuz+MmpRIJMCzfdI6hZ6E29BfDAqCUOrUnN7OYfoY5yiKWyE99XyF7urNl4XD/YS2knqFoNKLpgGHtQ7qQTLRtRywL/WuGjblKs6JXXDb80hjCi2M71/T7kP+EBU6qY= 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 1615293874466128.58531838201884; Tue, 9 Mar 2021 04:44:34 -0800 (PST) Received: from localhost ([::1]:53776 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbiz-0002p6-CS for importer@patchew.org; Tue, 09 Mar 2021 07:44:33 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43614) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap5-0000iD-E5; Tue, 09 Mar 2021 06:46:47 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:59375) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap0-0000oN-Dd; Tue, 09 Mar 2021 06:46:47 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id C3D501320; Tue, 9 Mar 2021 06:46:06 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:46:07 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id E769324005E; Tue, 9 Mar 2021 06:46:04 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=4MBfUUX+81EY1 0usv2jO8kYmSruutrkK92npChlYE8Q=; b=EY+TPu0msmr/PBSJNY/mBP23xd3Fc mAwdNi5R1LwyaqerLckoZflyqd2ZH34wPrR27Ym+TelJBi01ec+3rQrBxPkJgp/6 RfSx0jtsE8AKitTR8RqJ+1evuZivH7Sqlmyeg9fGfv7TdkdBpBK19CkZeWIsgakF bWRxt+p4bWqvmru1T7Z7eto2mf/mSzvDpP8+4LQKEr3gS3oRY1JgAXE/WaJu3kAE 976BA59E2gE6xuuoe+Z+e23ONh/3vrGmg7IrOzRzkBP4AQjUSITl9efZWR79MbrJ DZnjjvT6vyevD+fBNmXfvDdck+genWzgbw+W+yFdUc0UYlUcyZ4iUfatw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=4MBfUUX+81EY10usv2jO8kYmSruutrkK92npChlYE8Q=; b=O3ETUDpU v7IB6x35PBihYVXrg5YtVuzKnTZYyIsx3YJbIbAZYkj6OVSLwR5ZUv2r4cUxf1xz Z3rn4FCD54eN53WtSEG5ccE9GoRJnikwWIytETYoqZEO9WxIHiwKbmc/TSa7jJCF 7uOoGDbXkcl99MEsNhtD8Q8ZS1yS18aHkRpVQbiwuyR3/c0jIQw4j/o9saHMFY1o 4KRCH6FlUw8RCcLPTyY6d0nISAoPSfSe3WzOEgmFBdKMFDZQfDtG88trLgrg236A BkqR1TtbVOqm+zYPMDvKlSRzAQl7gBtHWyJDz/bqW4vwHtmkxzq5Mu+Vxv2tYr41 H1q/8N03F3lUjQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedvvd enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 32/38] hw/block/nvme: fix namespaces array to 1-based Date: Tue, 9 Mar 2021 12:45:06 +0100 Message-Id: <20210309114512.536489-33-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im subsys->namespaces array used to be sized to NVME_SUBSYS_MAX_NAMESPACES. But subsys->namespaces are being accessed with 1-based namespace id which means the very first array entry will always be empty(NULL). Signed-off-by: Minwoo Im Reviewed-by: Keith Busch Reviewed-by: Klaus Jensen Tested-by: Klaus Jensen Signed-off-by: Klaus Jensen --- hw/block/nvme-subsys.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/block/nvme-subsys.h b/hw/block/nvme-subsys.h index 507efcd23f9b..20d34004c677 100644 --- a/hw/block/nvme-subsys.h +++ b/hw/block/nvme-subsys.h @@ -24,7 +24,7 @@ typedef struct NvmeSubsystem { =20 NvmeCtrl *ctrls[NVME_SUBSYS_MAX_CTRLS]; /* Allocated namespaces for this subsystem */ - NvmeNamespace *namespaces[NVME_SUBSYS_MAX_NAMESPACES]; + NvmeNamespace *namespaces[NVME_SUBSYS_MAX_NAMESPACES + 1]; =20 struct { char *nqn; --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615293389; cv=none; d=zohomail.com; s=zohoarc; b=YGbeC5fbP4oLz9SoFpa7kwphx2szpZ+pCTpa+OrcYD0MpqDY7L7lLoe0U++uAtUBF02uW6o22NqycNSA8byA97SMvDLNpDTW7cDFr4SfAXEac5hoQwUX515kbtBJAmW2Ya81y/zhvS7F1aK4t23R9f0wTn43T6D4J55zAAvdo6w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615293389; 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=Q3iFoLigSf9g5OGZglzxMkSArBgsjbBQ5O8hEKtgtUA=; b=Ul7ZI1b361rZ6pd4n2SEQ55kPs4ati+iibTNC0yp1vdt50x/nW8NvsOaOnw0HxvIBFgAHl+f6zDy4jBLtKfPPKsDRVyuV6e/qP9kwZ4/fQu7Ne0Un8OpU0/FtsURYCx2NP0ZM2qAqbckMgr2mIKqwoD7kV2hblaNjedVoXgXsjI= 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 1615293389001144.21567092866314; Tue, 9 Mar 2021 04:36:29 -0800 (PST) Received: from localhost ([::1]:41614 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbb8-00060l-EL for importer@patchew.org; Tue, 09 Mar 2021 07:36:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43686) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJapA-0000o9-NB; Tue, 09 Mar 2021 06:46:52 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:51689) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap0-0000oO-CU; Tue, 09 Mar 2021 06:46:52 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 52C67275A; Tue, 9 Mar 2021 06:46:08 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:46:09 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 7AFDB240054; Tue, 9 Mar 2021 06:46:06 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=Q3iFoLigSf9g5 OGZglzxMkSArBgsjbBQ5O8hEKtgtUA=; b=w9JJEWLSWEqxDiyVCSOjVrcOWMNDq n0RtGPEYVN/CSc3QtG4Jw4snsikmZuerxgNPXlF9KDBqLKG5sgi2b1Z8RaI4LatG EM0LBjOrQnnj2aLj3rfaDlqhm2MIR64eCnuCAhqwhLxWiOi8KhgfdL7Jrzqh69rd E4przod8I2+R8gNsvAhrzOmsRBAwxtrGJG5znk08Vh9fROF2YwSv5ONywBb6TV1W sH7VPEGyGKNFosQ3adE0ul2jm0/ctj3Y3+R3TZWwfoaj98uMZxUpV6is3RMt/bT4 sRK5miVCIQFmt1bgEVHcheul9TMGn2xk6G2Vqxs1gI68yFz49YlR4QIlA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=Q3iFoLigSf9g5OGZglzxMkSArBgsjbBQ5O8hEKtgtUA=; b=szK5yVFs ISJy9JRfBDDVVikZfKPG2lpi9O52yfQseYWyzYTTW+JMRnmgLyz26fXNioRegkHp TTVAD1TpGoiuHJ/XQ4VpZz6/2r/MfR2Bq9PAnOxQq5Px5fXvrZ1QbXVYabqYwCAo DBX8fPlLba0FuHf2b6WHds1ht3lDlOcdLGjSmkVAyL0LjXHzE0jWlv5ZTJFP6pIX 24hCZUQ3fteZMCyIYLGUQ3/sNh4C7hz2FNMxj+Hc4d86fJncyzQ7DVctp3T3dkOe dsADOS2KW9hhnbmkfoYkjZh2UGGhXIEk8bLCNvYEblzsXODRSEzgysIsWB8jVugJ oQnQXllQZXG0ZA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedvvd enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 33/38] hw/block/nvme: fix allocated namespace list to 256 Date: Tue, 9 Mar 2021 12:45:07 +0100 Message-Id: <20210309114512.536489-34-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im Expand allocated namespace list (subsys->namespaces) to have 256 entries which is a value lager than at least NVME_MAX_NAMESPACES which is for attached namespace list in a controller. Allocated namespace list should at least larger than attached namespace list. n->num_namespaces =3D NVME_MAX_NAMESPACES; The above line will set the NN field by id->nn so that the subsystem should also prepare at least this number of namespace list entries. Signed-off-by: Minwoo Im Reviewed-by: Keith Busch Reviewed-by: Klaus Jensen Tested-by: Klaus Jensen Signed-off-by: Klaus Jensen --- hw/block/nvme-subsys.h | 2 +- hw/block/nvme.h | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/block/nvme-subsys.h b/hw/block/nvme-subsys.h index 20d34004c677..65a8bcda030d 100644 --- a/hw/block/nvme-subsys.h +++ b/hw/block/nvme-subsys.h @@ -14,7 +14,7 @@ OBJECT_CHECK(NvmeSubsystem, (obj), TYPE_NVME_SUBSYS) =20 #define NVME_SUBSYS_MAX_CTRLS 32 -#define NVME_SUBSYS_MAX_NAMESPACES 32 +#define NVME_SUBSYS_MAX_NAMESPACES 256 =20 typedef struct NvmeCtrl NvmeCtrl; typedef struct NvmeNamespace NvmeNamespace; diff --git a/hw/block/nvme.h b/hw/block/nvme.h index cd8d40634411..85a7b5a14f4e 100644 --- a/hw/block/nvme.h +++ b/hw/block/nvme.h @@ -10,6 +10,12 @@ #define NVME_DEFAULT_ZONE_SIZE (128 * MiB) #define NVME_DEFAULT_MAX_ZA_SIZE (128 * KiB) =20 +/* + * Subsystem namespace list for allocated namespaces should be larger than + * attached namespace list in a controller. + */ +QEMU_BUILD_BUG_ON(NVME_MAX_NAMESPACES > NVME_SUBSYS_MAX_NAMESPACES); + typedef struct NvmeParams { char *serial; uint32_t num_queues; /* deprecated since 5.1 */ --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615294241; cv=none; d=zohomail.com; s=zohoarc; b=FeKDJ8KQqghGU/DjlGsxvzDXkXry/Y/sU3fcLKZkLZuGqMFf7Ne+YQmADebJOGV49boG39dafXrfYg7hrHBAsSzuScaM1h8cDkVwv2j/RNQoSB9PJuJ32YvBGv+/Qmb3aZ8tIuXpf2HUqwSSCJXBr0lTC0KuIYzaY9txnFRaNaI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615294241; 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=Sl/CpQHhFqujk703EFpjgErX5Eb/+dG+EgZ6JirRlng=; b=ANmPy9dIR+8RdJwLsmZGUWws4h69ksFOj3O0V3yZVc0lbjrXQjRSI7/erVL6xb7A4VtfSZ8KfVS0X+45XSpRo4b3Zi8DQhGKoptmL/fjKxJGs8jBCuMyO7D+4b5hSmLUX7eeDm4CGDIeJPwl0YSUuhTTO3nXPp1YKeH/GnCKUX8= 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 1615294241190445.3621310331798; Tue, 9 Mar 2021 04:50:41 -0800 (PST) Received: from localhost ([::1]:39342 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJboq-0000cm-Af for importer@patchew.org; Tue, 09 Mar 2021 07:50:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43658) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap7-0000kf-B4; Tue, 09 Mar 2021 06:46:49 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:60987) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap4-0000qp-OV; Tue, 09 Mar 2021 06:46:49 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id D467C493; Tue, 9 Mar 2021 06:46:09 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:46:10 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 0BA8924005C; Tue, 9 Mar 2021 06:46:07 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=Sl/CpQHhFqujk 703EFpjgErX5Eb/+dG+EgZ6JirRlng=; b=LSkdRc6goHkqMHiqBMl5hkJ/zKsHI GJE2+Je4zYe5Z9bQmMan+wJO31irJjmPEBWMcADOI8S+Ileq9VoTV3WVfPEDy/N3 NqZqSt4D/saqUFwfEzEsmTMEC/8Tzj7WPlvZ/FwjArLZwwPK1EmKEV3p7733dB9k x1IwXTwADg/lX1PjStX1J9hs2ITdNWkkxdwRSOgQR+pFj3YskDf+CaSrA2LO35E1 GYnXnMxjYl6suUN0tmlWDhI5ARY4SRTSoPd5e18irtdBUhxHUTljLrBJ0qzBBqQK M3uDls/GR67tgdWL4L5rlYIHfTSSnG8ByQ+mQmSK/p5Jrmet2A5AdAyZw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=Sl/CpQHhFqujk703EFpjgErX5Eb/+dG+EgZ6JirRlng=; b=OUOOd1eL YUlLT0EXc7/Z9DrGXm3dmGelp3GkSnvMl32bG/NiQW6YFY+fIv5kEKk1YVo300io z1OD52CUDcZNfLS02L/dIBadMMImB9lT1Nmz0BR2zO9DSJeEk9yEPfE7a7QtCc3j q+qohPYGmqLHKRF0I2IedrVzRoI6k0TXbGoEwZd6zl5VfipUZQpSORE7yv5hQXM1 Bq3BduNwWf2cIxwaaham4CDg9VywDpDo4wecYez2DhVVKVdA//oQQGviJZy1hBDT 1wrQ12cZ220KwLokYXGGb8FD0QB0+1FUfEhJZAsZIFaiEHueBITEXFrIMQnREqUr zN9RZct282O9qg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedvvd enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 34/38] hw/block/nvme: support allocated namespace type Date: Tue, 9 Mar 2021 12:45:08 +0100 Message-Id: <20210309114512.536489-35-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im From NVMe spec 1.4b "6.1.5. NSID and Namespace Relationships" defines valid namespace types: - Unallocated: Not exists in the NVMe subsystem - Allocated: Exists in the NVMe subsystem - Inactive: Not attached to the controller - Active: Attached to the controller This patch added support for allocated, but not attached namespace type: !nvme_ns(n, nsid) && nvme_subsys_ns(n->subsys, nsid) nvme_ns() returns attached namespace instance of the given controller and nvme_subsys_ns() returns allocated namespace instance in the subsystem. Signed-off-by: Minwoo Im Reviewed-by: Keith Busch Reviewed-by: Klaus Jensen Tested-by: Klaus Jensen Signed-off-by: Klaus Jensen --- hw/block/nvme-subsys.h | 13 +++++++++ hw/block/nvme.c | 63 +++++++++++++++++++++++++++++++----------- 2 files changed, 60 insertions(+), 16 deletions(-) diff --git a/hw/block/nvme-subsys.h b/hw/block/nvme-subsys.h index 65a8bcda030d..83a6427b6e9d 100644 --- a/hw/block/nvme-subsys.h +++ b/hw/block/nvme-subsys.h @@ -34,4 +34,17 @@ typedef struct NvmeSubsystem { int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp); int nvme_subsys_register_ns(NvmeNamespace *ns, Error **errp); =20 +/* + * Return allocated namespace of the specified nsid in the subsystem. + */ +static inline NvmeNamespace *nvme_subsys_ns(NvmeSubsystem *subsys, + uint32_t nsid) +{ + if (!subsys) { + return NULL; + } + + return subsys->namespaces[nsid]; +} + #endif /* NVME_SUBSYS_H */ diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 1790a66cb8f7..414473c19c56 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -3262,7 +3262,7 @@ static uint16_t nvme_identify_ctrl_csi(NvmeCtrl *n, N= vmeRequest *req) return nvme_c2h(n, id, sizeof(id), req); } =20 -static uint16_t nvme_identify_ns(NvmeCtrl *n, NvmeRequest *req) +static uint16_t nvme_identify_ns(NvmeCtrl *n, NvmeRequest *req, bool activ= e) { NvmeNamespace *ns; NvmeIdentify *c =3D (NvmeIdentify *)&req->cmd; @@ -3276,7 +3276,14 @@ static uint16_t nvme_identify_ns(NvmeCtrl *n, NvmeRe= quest *req) =20 ns =3D nvme_ns(n, nsid); if (unlikely(!ns)) { - return nvme_rpt_empty_id_struct(n, req); + if (!active) { + ns =3D nvme_subsys_ns(n->subsys, nsid); + if (!ns) { + return nvme_rpt_empty_id_struct(n, req); + } + } else { + return nvme_rpt_empty_id_struct(n, req); + } } =20 if (c->csi =3D=3D NVME_CSI_NVM && nvme_csi_has_nvm_support(ns)) { @@ -3286,7 +3293,8 @@ static uint16_t nvme_identify_ns(NvmeCtrl *n, NvmeReq= uest *req) return NVME_INVALID_CMD_SET | NVME_DNR; } =20 -static uint16_t nvme_identify_ns_csi(NvmeCtrl *n, NvmeRequest *req) +static uint16_t nvme_identify_ns_csi(NvmeCtrl *n, NvmeRequest *req, + bool active) { NvmeNamespace *ns; NvmeIdentify *c =3D (NvmeIdentify *)&req->cmd; @@ -3300,7 +3308,14 @@ static uint16_t nvme_identify_ns_csi(NvmeCtrl *n, Nv= meRequest *req) =20 ns =3D nvme_ns(n, nsid); if (unlikely(!ns)) { - return nvme_rpt_empty_id_struct(n, req); + if (!active) { + ns =3D nvme_subsys_ns(n->subsys, nsid); + if (!ns) { + return nvme_rpt_empty_id_struct(n, req); + } + } else { + return nvme_rpt_empty_id_struct(n, req); + } } =20 if (c->csi =3D=3D NVME_CSI_NVM && nvme_csi_has_nvm_support(ns)) { @@ -3313,7 +3328,8 @@ static uint16_t nvme_identify_ns_csi(NvmeCtrl *n, Nvm= eRequest *req) return NVME_INVALID_FIELD | NVME_DNR; } =20 -static uint16_t nvme_identify_nslist(NvmeCtrl *n, NvmeRequest *req) +static uint16_t nvme_identify_nslist(NvmeCtrl *n, NvmeRequest *req, + bool active) { NvmeNamespace *ns; NvmeIdentify *c =3D (NvmeIdentify *)&req->cmd; @@ -3338,7 +3354,14 @@ static uint16_t nvme_identify_nslist(NvmeCtrl *n, Nv= meRequest *req) for (i =3D 1; i <=3D n->num_namespaces; i++) { ns =3D nvme_ns(n, i); if (!ns) { - continue; + if (!active) { + ns =3D nvme_subsys_ns(n->subsys, i); + if (!ns) { + continue; + } + } else { + continue; + } } if (ns->params.nsid <=3D min_nsid) { continue; @@ -3352,7 +3375,8 @@ static uint16_t nvme_identify_nslist(NvmeCtrl *n, Nvm= eRequest *req) return nvme_c2h(n, list, data_len, req); } =20 -static uint16_t nvme_identify_nslist_csi(NvmeCtrl *n, NvmeRequest *req) +static uint16_t nvme_identify_nslist_csi(NvmeCtrl *n, NvmeRequest *req, + bool active) { NvmeNamespace *ns; NvmeIdentify *c =3D (NvmeIdentify *)&req->cmd; @@ -3378,7 +3402,14 @@ static uint16_t nvme_identify_nslist_csi(NvmeCtrl *n= , NvmeRequest *req) for (i =3D 1; i <=3D n->num_namespaces; i++) { ns =3D nvme_ns(n, i); if (!ns) { - continue; + if (!active) { + ns =3D nvme_subsys_ns(n->subsys, i); + if (!ns) { + continue; + } + } else { + continue; + } } if (ns->params.nsid <=3D min_nsid || c->csi !=3D ns->csi) { continue; @@ -3461,25 +3492,25 @@ static uint16_t nvme_identify(NvmeCtrl *n, NvmeRequ= est *req) =20 switch (c->cns) { case NVME_ID_CNS_NS: - /* fall through */ + return nvme_identify_ns(n, req, true); case NVME_ID_CNS_NS_PRESENT: - return nvme_identify_ns(n, req); + return nvme_identify_ns(n, req, false); case NVME_ID_CNS_CS_NS: - /* fall through */ + return nvme_identify_ns_csi(n, req, true); case NVME_ID_CNS_CS_NS_PRESENT: - return nvme_identify_ns_csi(n, req); + return nvme_identify_ns_csi(n, req, false); case NVME_ID_CNS_CTRL: return nvme_identify_ctrl(n, req); case NVME_ID_CNS_CS_CTRL: return nvme_identify_ctrl_csi(n, req); case NVME_ID_CNS_NS_ACTIVE_LIST: - /* fall through */ + return nvme_identify_nslist(n, req, true); case NVME_ID_CNS_NS_PRESENT_LIST: - return nvme_identify_nslist(n, req); + return nvme_identify_nslist(n, req, false); case NVME_ID_CNS_CS_NS_ACTIVE_LIST: - /* fall through */ + return nvme_identify_nslist_csi(n, req, true); case NVME_ID_CNS_CS_NS_PRESENT_LIST: - return nvme_identify_nslist_csi(n, req); + return nvme_identify_nslist_csi(n, req, false); case NVME_ID_CNS_NS_DESCR_LIST: return nvme_identify_ns_descr_list(n, req); case NVME_ID_CNS_IO_COMMAND_SET: --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615294319; cv=none; d=zohomail.com; s=zohoarc; b=FsNKSwJTQdw/GhonPlhjTnhesmUkORMWQ1I1Vm+AGRCgHOwXuMMI25HdfoOyeU/TAlZVyYl0l70E1woPBJVlb0EDTVf/n8+zifoFCSXcR/j8M3A3G9YcWg50fh3yNZjnYDu5AWKzUm8QVnBfN+8u2/GmT6LJUcZz2iqM9ytk8js= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615294319; 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=k9S7Bk4wiORPflGxOETDHajI+f0Nr+lpJMqWYCe4RMk=; b=kFlRuXDVIWC0zv3w7oMOtvzisYdJJJad71XUYQ5yQ6gQ1YXdDIbosTAh8tcaHEaxBZZDfxW4N42Q2ByR/BeRe6AWpTJJIfrJWM3QC9rRHznYOlweCZZBsgSiwWY8J0AQRLlOfT5OrqEkUfFess/SEBCV6fTYtUWtkAYi5xCaINY= 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 1615294319803951.107223349569; Tue, 9 Mar 2021 04:51:59 -0800 (PST) Received: from localhost ([::1]:41862 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbqA-0001mj-LP for importer@patchew.org; Tue, 09 Mar 2021 07:51:58 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43656) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap6-0000jy-UA; Tue, 09 Mar 2021 06:46:48 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:56585) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap4-0000qq-NJ; Tue, 09 Mar 2021 06:46:48 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 699BB2733; Tue, 9 Mar 2021 06:46:11 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:46:12 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 926A124005A; Tue, 9 Mar 2021 06:46:09 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=k9S7Bk4wiORPf lGxOETDHajI+f0Nr+lpJMqWYCe4RMk=; b=uFZlY8rxL0eCQuH5neMyGGLGR0drf HnzC5wq2Qk47AVsFRDF/tFVuGgWvJdPEpbGQ+8rJy7bWecdPc+ntOkB4yPXDpeUr 25W1dUCD12VgYT2lr+JXxO9nxP/NmXBS95Xu6fC7kUTLklyVt31QHQCJndqJ1TlC cUUG8MHwRNCWsYsFKQavm37dwnpB+ijUceZ4WKZdk2qstTJ9nvyKdAf/FqpCahzG 56ZUFfUY6k8rF74Qk2IBC9fZRWMoffR8BpOfHXzaO0fSQejf59VBy406R30YDut6 5KFz81DPL5xEmwka/BWpAqP62PpQRjUR7D0gGyNBiA0ytBA71vZjGil6A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=k9S7Bk4wiORPflGxOETDHajI+f0Nr+lpJMqWYCe4RMk=; b=b/f0k8Zt xzJjxfoHMiWbajeF30eP31OeUKvNuTZkXJsFVn+iegC9/w1DrqkiEE6Yzdo3yhUQ r+8j0NQixVvUppXeKKQ6VofUNNl6WKE5qfKu5lkCMTPzmG1673SRsn+4EVSzAcPK IIl+I1iG8Hv7JxBypGnok52OL8za2dr5wPco4FITCZIUU63EYEaQVDYrJx2Yna3P PncEnZAVV6+p7/vIXxuw1yD3zcsS/KFUCZOSoc1QSjs1Y66fL1PIYNkCx2pZlSKZ FM7ayRD61DldztJuKxVWDhKedtlI6CEGw668c6Mz2JXJDnj6ATE+c/TsRA/b06xk cAgAoJ0A2qvYGQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedvie enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 35/38] hw/block/nvme: refactor nvme_select_ns_iocs Date: Tue, 9 Mar 2021 12:45:09 +0100 Message-Id: <20210309114512.536489-36-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im This patch has no functional changes. This patch just refactored nvme_select_ns_iocs() to iterate the attached namespaces of the controlller and make it invoke __nvme_select_ns_iocs(). Signed-off-by: Minwoo Im Reviewed-by: Keith Busch Reviewed-by: Klaus Jensen Tested-by: Klaus Jensen Signed-off-by: Klaus Jensen --- hw/block/nvme.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 414473c19c56..b4843d3bcf5e 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -4042,6 +4042,25 @@ static void nvme_ctrl_shutdown(NvmeCtrl *n) } } =20 +static void __nvme_select_ns_iocs(NvmeCtrl *n, NvmeNamespace *ns) +{ + ns->iocs =3D nvme_cse_iocs_none; + switch (ns->csi) { + case NVME_CSI_NVM: + if (NVME_CC_CSS(n->bar.cc) !=3D NVME_CC_CSS_ADMIN_ONLY) { + ns->iocs =3D nvme_cse_iocs_nvm; + } + break; + case NVME_CSI_ZONED: + if (NVME_CC_CSS(n->bar.cc) =3D=3D NVME_CC_CSS_CSI) { + ns->iocs =3D nvme_cse_iocs_zoned; + } else if (NVME_CC_CSS(n->bar.cc) =3D=3D NVME_CC_CSS_NVM) { + ns->iocs =3D nvme_cse_iocs_nvm; + } + break; + } +} + static void nvme_select_ns_iocs(NvmeCtrl *n) { NvmeNamespace *ns; @@ -4052,21 +4071,8 @@ static void nvme_select_ns_iocs(NvmeCtrl *n) if (!ns) { continue; } - ns->iocs =3D nvme_cse_iocs_none; - switch (ns->csi) { - case NVME_CSI_NVM: - if (NVME_CC_CSS(n->bar.cc) !=3D NVME_CC_CSS_ADMIN_ONLY) { - ns->iocs =3D nvme_cse_iocs_nvm; - } - break; - case NVME_CSI_ZONED: - if (NVME_CC_CSS(n->bar.cc) =3D=3D NVME_CC_CSS_CSI) { - ns->iocs =3D nvme_cse_iocs_zoned; - } else if (NVME_CC_CSS(n->bar.cc) =3D=3D NVME_CC_CSS_NVM) { - ns->iocs =3D nvme_cse_iocs_nvm; - } - break; - } + + __nvme_select_ns_iocs(n, ns); } } =20 --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615294664; cv=none; d=zohomail.com; s=zohoarc; b=dmhWJGGfqx5ekrjFcrMMTGI+R9ocsLq/cQG3AzJhISrKIqdmBQct9n7wzrEYRLi6nMKXn/M3+AqmEunmTfdqF+5lkwT1U7iMjRRiFzAqD7R+zt8ZXCaqFiowH6hIhrrvgQzsxiDLrEuJwUozOswlXmncQHBYhRzcp1ZVZc40Lec= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615294664; 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=sbF0Tg1u2rF/xEW+NIzss/sWvRyCo+ouWxI/FQAGpLI=; b=Rn7pFfiL+9tInFOPNKD1QGE4Nd2n9UWkDpK2f3DZcwWfB+Mo87vMM7aj5w2w2fZ/38df45FqzYkIrX+7RK+DpfJOwTZLdRawDuLmGTDrB4kmGUvVbJiXH/8NGSaFs4ro7gGE8sG1X3zO/QUhvhQkc080uNXkreFIu87cN3Z+83M= 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 1615294664752245.02935627675708; Tue, 9 Mar 2021 04:57:44 -0800 (PST) Received: from localhost ([::1]:53278 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbvj-0006by-Fg for importer@patchew.org; Tue, 09 Mar 2021 07:57:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43662) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap7-0000l3-JM; Tue, 09 Mar 2021 06:46:49 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:37117) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap4-0000qz-NA; Tue, 09 Mar 2021 06:46:49 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id F23942768; Tue, 9 Mar 2021 06:46:12 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:46:13 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 247F0240054; Tue, 9 Mar 2021 06:46:11 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=sbF0Tg1u2rF/x EW+NIzss/sWvRyCo+ouWxI/FQAGpLI=; b=piqdEuaR60udhveJHE1IKVigw6dPS gZkXfIYLtyEuPNCPqnKjVQElC7T3vrz4VNixuchF++c08TsnFsuUONMHgX4A6rpu pObXbWBGcJGGIQ1Ycle3K4Ro3H58ZXJ3NL1a/LPPO3C9PKz45B+SYs+44yr9WZql ACy0nZlLNev0L80xrzskwDz5mMkXaORETeFxjCJIrKeyMFZTMi1UzrXqhpoO+wme zYGd/fw2/sdhg1k55XwL7DKrur9njO6sto2Ryx0X9dPIy92xn9GIQ/E4w3s+Ngn8 apmYXCdtzitiE/3z/SQDwg231p8Aylihr1T8sUlHxb793tJ5nez+6Adxg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=sbF0Tg1u2rF/xEW+NIzss/sWvRyCo+ouWxI/FQAGpLI=; b=i8bNH0O/ pHlqEhbgVVuuuPD3dd3UalxkXGg5byj5NmKftrArKpfEzn4sWd7zX77yUxvgXZaG x/XtonOw4JoOJJ5T/fr3HVZIpC5g2LPbiynnLzvvZiuo3cn5b5Vh8gb5egZc90E+ UEmI+JJuz34f5E9T1oRTMmzxGu+2R3aGMgUyz7pW11MVA+gKXT0Sj2ZlOZBaDS9b wgDN6WRSc3e+WWy6l/FrlyPVfVYRxa2+mOY9fu+6wFrY5byllmhXpZlUNvFCDX55 N63GsN+nNcJAVy14ThW/ufITe8LXfx2L22Ay1FEjJqOZybJ5C2T0Jui9P57LMVQ9 OX9Kk5AAUNu8sQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedvie enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 36/38] hw/block/nvme: support namespace attachment command Date: Tue, 9 Mar 2021 12:45:10 +0100 Message-Id: <20210309114512.536489-37-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im This patch supports Namespace Attachment command for the pre-defined nvme-ns device nodes. Of course, attach/detach namespace should only be supported in case 'subsys' is given. This is because if we detach a namespace from a controller, somebody needs to manage the detached, but allocated namespace in the NVMe subsystem. As command effect for the namespace attachment command is registered, the host will be notified that namespace inventory is changed so that host will rescan the namespace inventory after this command. For example, kernel driver manages this command effect via passthru IOCTL. Signed-off-by: Minwoo Im Reviewed-by: Keith Busch Reviewed-by: Klaus Jensen Tested-by: Klaus Jensen [k.jensen: rebased for dma refactor] Signed-off-by: Klaus Jensen --- hw/block/nvme-subsys.h | 10 +++++++ hw/block/nvme.h | 5 ++++ include/block/nvme.h | 6 +++++ hw/block/nvme.c | 60 +++++++++++++++++++++++++++++++++++++++++- hw/block/trace-events | 2 ++ 5 files changed, 82 insertions(+), 1 deletion(-) diff --git a/hw/block/nvme-subsys.h b/hw/block/nvme-subsys.h index 83a6427b6e9d..fb66ae752ad5 100644 --- a/hw/block/nvme-subsys.h +++ b/hw/block/nvme-subsys.h @@ -34,6 +34,16 @@ typedef struct NvmeSubsystem { int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp); int nvme_subsys_register_ns(NvmeNamespace *ns, Error **errp); =20 +static inline NvmeCtrl *nvme_subsys_ctrl(NvmeSubsystem *subsys, + uint32_t cntlid) +{ + if (!subsys) { + return NULL; + } + + return subsys->ctrls[cntlid]; +} + /* * Return allocated namespace of the specified nsid in the subsystem. */ diff --git a/hw/block/nvme.h b/hw/block/nvme.h index 85a7b5a14f4e..1287bc2cd17a 100644 --- a/hw/block/nvme.h +++ b/hw/block/nvme.h @@ -235,6 +235,11 @@ static inline void nvme_ns_attach(NvmeCtrl *n, NvmeNam= espace *ns) n->namespaces[nvme_nsid(ns) - 1] =3D ns; } =20 +static inline void nvme_ns_detach(NvmeCtrl *n, NvmeNamespace *ns) +{ + n->namespaces[nvme_nsid(ns) - 1] =3D NULL; +} + static inline NvmeCQueue *nvme_cq(NvmeRequest *req) { NvmeSQueue *sq =3D req->sq; diff --git a/include/block/nvme.h b/include/block/nvme.h index 16d8c4c90f7e..03471a4d5abd 100644 --- a/include/block/nvme.h +++ b/include/block/nvme.h @@ -566,6 +566,7 @@ enum NvmeAdminCommands { NVME_ADM_CMD_ASYNC_EV_REQ =3D 0x0c, NVME_ADM_CMD_ACTIVATE_FW =3D 0x10, NVME_ADM_CMD_DOWNLOAD_FW =3D 0x11, + NVME_ADM_CMD_NS_ATTACHMENT =3D 0x15, NVME_ADM_CMD_FORMAT_NVM =3D 0x80, NVME_ADM_CMD_SECURITY_SEND =3D 0x81, NVME_ADM_CMD_SECURITY_RECV =3D 0x82, @@ -836,6 +837,9 @@ enum NvmeStatusCodes { NVME_FEAT_NOT_CHANGEABLE =3D 0x010e, NVME_FEAT_NOT_NS_SPEC =3D 0x010f, NVME_FW_REQ_SUSYSTEM_RESET =3D 0x0110, + NVME_NS_ALREADY_ATTACHED =3D 0x0118, + NVME_NS_NOT_ATTACHED =3D 0x011A, + NVME_NS_CTRL_LIST_INVALID =3D 0x011C, NVME_CONFLICTING_ATTRS =3D 0x0180, NVME_INVALID_PROT_INFO =3D 0x0181, NVME_WRITE_TO_RO =3D 0x0182, @@ -951,6 +955,7 @@ typedef struct QEMU_PACKED NvmePSD { uint8_t resv[16]; } NvmePSD; =20 +#define NVME_CONTROLLER_LIST_SIZE 2048 #define NVME_IDENTIFY_DATA_SIZE 4096 =20 enum NvmeIdCns { @@ -1055,6 +1060,7 @@ enum NvmeIdCtrlOacs { NVME_OACS_SECURITY =3D 1 << 0, NVME_OACS_FORMAT =3D 1 << 1, NVME_OACS_FW =3D 1 << 2, + NVME_OACS_NS_MGMT =3D 1 << 3, }; =20 enum NvmeIdCtrlOncs { diff --git a/hw/block/nvme.c b/hw/block/nvme.c index b4843d3bcf5e..86fbab1fc43c 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -196,6 +196,7 @@ static const uint32_t nvme_cse_acs[256] =3D { [NVME_ADM_CMD_SET_FEATURES] =3D NVME_CMD_EFF_CSUPP, [NVME_ADM_CMD_GET_FEATURES] =3D NVME_CMD_EFF_CSUPP, [NVME_ADM_CMD_ASYNC_EV_REQ] =3D NVME_CMD_EFF_CSUPP, + [NVME_ADM_CMD_NS_ATTACHMENT] =3D NVME_CMD_EFF_CSUPP | NVME_CMD_EFF_= NIC, }; =20 static const uint32_t nvme_cse_iocs_none[256]; @@ -3905,6 +3906,61 @@ static uint16_t nvme_aer(NvmeCtrl *n, NvmeRequest *r= eq) return NVME_NO_COMPLETE; } =20 +static void __nvme_select_ns_iocs(NvmeCtrl *n, NvmeNamespace *ns); +static uint16_t nvme_ns_attachment(NvmeCtrl *n, NvmeRequest *req) +{ + NvmeNamespace *ns; + NvmeCtrl *ctrl; + uint16_t list[NVME_CONTROLLER_LIST_SIZE] =3D {}; + uint32_t nsid =3D le32_to_cpu(req->cmd.nsid); + uint32_t dw10 =3D le32_to_cpu(req->cmd.cdw10); + bool attach =3D !(dw10 & 0xf); + uint16_t *nr_ids =3D &list[0]; + uint16_t *ids =3D &list[1]; + uint16_t ret; + int i; + + trace_pci_nvme_ns_attachment(nvme_cid(req), dw10 & 0xf); + + ns =3D nvme_subsys_ns(n->subsys, nsid); + if (!ns) { + return NVME_INVALID_FIELD | NVME_DNR; + } + + ret =3D nvme_h2c(n, (uint8_t *)list, 4096, req); + if (ret) { + return ret; + } + + if (!*nr_ids) { + return NVME_NS_CTRL_LIST_INVALID | NVME_DNR; + } + + for (i =3D 0; i < *nr_ids; i++) { + ctrl =3D nvme_subsys_ctrl(n->subsys, ids[i]); + if (!ctrl) { + return NVME_NS_CTRL_LIST_INVALID | NVME_DNR; + } + + if (attach) { + if (nvme_ns_is_attached(ctrl, ns)) { + return NVME_NS_ALREADY_ATTACHED | NVME_DNR; + } + + nvme_ns_attach(ctrl, ns); + __nvme_select_ns_iocs(ctrl, ns); + } else { + if (!nvme_ns_is_attached(ctrl, ns)) { + return NVME_NS_NOT_ATTACHED | NVME_DNR; + } + + nvme_ns_detach(ctrl, ns); + } + } + + return NVME_SUCCESS; +} + static uint16_t nvme_admin_cmd(NvmeCtrl *n, NvmeRequest *req) { trace_pci_nvme_admin_cmd(nvme_cid(req), nvme_sqid(req), req->cmd.opcod= e, @@ -3941,6 +3997,8 @@ static uint16_t nvme_admin_cmd(NvmeCtrl *n, NvmeReque= st *req) return nvme_get_feature(n, req); case NVME_ADM_CMD_ASYNC_EV_REQ: return nvme_aer(n, req); + case NVME_ADM_CMD_NS_ATTACHMENT: + return nvme_ns_attachment(n, req); default: assert(false); } @@ -4910,7 +4968,7 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pc= i_dev) =20 id->mdts =3D n->params.mdts; id->ver =3D cpu_to_le32(NVME_SPEC_VER); - id->oacs =3D cpu_to_le16(0); + id->oacs =3D cpu_to_le16(NVME_OACS_NS_MGMT); id->cntrltype =3D 0x1; =20 /* diff --git a/hw/block/trace-events b/hw/block/trace-events index 60a076cea54f..c5dba935a0c1 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -84,6 +84,8 @@ pci_nvme_aer(uint16_t cid) "cid %"PRIu16"" pci_nvme_aer_aerl_exceeded(void) "aerl exceeded" pci_nvme_aer_masked(uint8_t type, uint8_t mask) "type 0x%"PRIx8" mask 0x%"= PRIx8"" pci_nvme_aer_post_cqe(uint8_t typ, uint8_t info, uint8_t log_page) "type 0= x%"PRIx8" info 0x%"PRIx8" lid 0x%"PRIx8"" +pci_nvme_ns_attachment(uint16_t cid, uint8_t sel) "cid %"PRIu16", sel=3D0x= %"PRIx8"" +pci_nvme_ns_attachment_attach(uint16_t cntlid, uint32_t nsid) "cntlid=3D0x= %"PRIx16", nsid=3D0x%"PRIx32"" pci_nvme_enqueue_event(uint8_t typ, uint8_t info, uint8_t log_page) "type = 0x%"PRIx8" info 0x%"PRIx8" lid 0x%"PRIx8"" pci_nvme_enqueue_event_noqueue(int queued) "queued %d" pci_nvme_enqueue_event_masked(uint8_t typ) "type 0x%"PRIx8"" --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615294330; cv=none; d=zohomail.com; s=zohoarc; b=jgswsb5aSaR+CypJ3I9ONJrUxZhuhbgwN7d1UPV535YMi4/tWnsymfSScV/Aj+b9NVpyb5HXEyJqAeYP62xegzZvX2a+AtPPcpdkJx/joJzrLxebV2pmXQO0T2pGgnc2TYJnzfQH+WvQ0Jm43QOwWHD706d5+w6hyCWzIg401Z4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615294330; 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=IQBwW3W5s2ahL1ydUgE8szTO73LmasHTgBmZ2lmD9so=; b=YI8e09Bawn/QEVFaueHvuaqI6wRolkKbGkiTMAq2VvnIIaZl6zKr5C58EP3+VZwyHy/8Pi/2totlef8h7z+1OFQdhOd2whnbHm6NHq1Tc4Sw8ccIHPqeeix/3bcZZUSDBL1DJUnTv1EUPa11eJfd5bi4SrxIApOW07nQas+XYMQ= 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 1615294330234669.8287007402417; Tue, 9 Mar 2021 04:52:10 -0800 (PST) Received: from localhost ([::1]:41934 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbqK-0001oo-Pd for importer@patchew.org; Tue, 09 Mar 2021 07:52:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43678) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap8-0000mF-7i; Tue, 09 Mar 2021 06:46:50 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:53615) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap4-0000r0-Qh; Tue, 09 Mar 2021 06:46:49 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 82901F7B; Tue, 9 Mar 2021 06:46:14 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:46:15 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id AA4E124005A; Tue, 9 Mar 2021 06:46:12 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=IQBwW3W5s2ahL 1ydUgE8szTO73LmasHTgBmZ2lmD9so=; b=e5L0zR+qKCqq/SqRpaMg+b/eOSBGD 51gUpcyzshIhGKlKmqjNWskci9Aj98oYwb78Annyb9fUJ/JMnFGadqy953aYeTp9 BEjVTQ3THAa5dSuaPsaFAEU/8RVxoObRFilu/8MC4x/6zg0etBu3ABcBcNfvZITj GQ3PQhutGI1N6c01kuK4oWaQl8B6dl4QgTKIE3fDiQcs3U4ZlPuWbnzcFFD36p4x SYOFPCPOWCnxn/pWZ6/NJd0CiK1m9lUxK94Wpv2YLsXVRbwTB1V4gFsZU7Nm0geO 5Wt8QT5hBXGRrslfuoAosk5IWv7pEVaht7RZxsnx7r96X2X+JG92MhjtA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=IQBwW3W5s2ahL1ydUgE8szTO73LmasHTgBmZ2lmD9so=; b=DNHSQPru nO2aEr06XBMkWIh3xzX76eIkA7XqHWObmiS9Va39/rIxDXI/miyNSuzk1Af5Xhe2 4kORCAmIpLijUwXkFRcuzRujsc8/eKk6DfDXd9T/iCd3oO7lnQGVwzYHhYVzIe60 1684jcuvkvO5V9UqcuSmHtFLT3Ak5NzklAjuHdY5QuQ4bKcUA1iphCwduJB8pzNa Cu1pMInzhiXtII4PVaJErt9dHD2u9cnDIg0TuLChzHYIQav6Jp07yBaRfycpNzcJ 6jOE7NLoi+OCYA+FvBtwET7MyQRjIKO55e1Xy81cuQi+hvnlBfqLi+n1Cf6RyKMl wMTv8I5+ptRyNw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedvie enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 37/38] hw/block/nvme: support changed namespace asynchronous event Date: Tue, 9 Mar 2021 12:45:11 +0100 Message-Id: <20210309114512.536489-38-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im If namespace inventory is changed due to some reasons (e.g., namespace attachment/detachment), controller can send out event notifier to the host to manage namespaces. This patch sends out the AEN to the host after either attach or detach namespaces from controllers. To support clear of the event from the controller, this patch also implemented Get Log Page command for Changed Namespace List log type. To return namespace id list through the command, when namespace inventory is updated, id is added to the per-controller list (changed_ns_list). To indicate the support of this async event, this patch set OAES(Optional Asynchronous Events Supported) in Identify Controller data structure. Signed-off-by: Minwoo Im Reviewed-by: Keith Busch Reviewed-by: Klaus Jensen Tested-by: Klaus Jensen Signed-off-by: Klaus Jensen --- hw/block/nvme-ns.h | 1 + hw/block/nvme.h | 4 ++++ include/block/nvme.h | 7 ++++++ hw/block/nvme.c | 56 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+) diff --git a/hw/block/nvme-ns.h b/hw/block/nvme-ns.h index b0c00e115d81..318d3aebe1a8 100644 --- a/hw/block/nvme-ns.h +++ b/hw/block/nvme-ns.h @@ -53,6 +53,7 @@ typedef struct NvmeNamespace { uint8_t csi; =20 NvmeSubsystem *subsys; + QTAILQ_ENTRY(NvmeNamespace) entry; =20 NvmeIdNsZoned *id_ns_zoned; NvmeZone *zone_array; diff --git a/hw/block/nvme.h b/hw/block/nvme.h index 1287bc2cd17a..4955d649c7d4 100644 --- a/hw/block/nvme.h +++ b/hw/block/nvme.h @@ -192,6 +192,10 @@ typedef struct NvmeCtrl { =20 uint32_t dmrsl; =20 + /* Namespace ID is started with 1 so bitmap should be 1-based */ +#define NVME_CHANGED_NSID_SIZE (NVME_MAX_NAMESPACES + 1) + DECLARE_BITMAP(changed_nsids, NVME_CHANGED_NSID_SIZE); + NvmeSubsystem *subsys; =20 NvmeNamespace namespace; diff --git a/include/block/nvme.h b/include/block/nvme.h index 03471a4d5abd..7ee887022aef 100644 --- a/include/block/nvme.h +++ b/include/block/nvme.h @@ -760,6 +760,7 @@ typedef struct QEMU_PACKED NvmeCopySourceRange { enum NvmeAsyncEventRequest { NVME_AER_TYPE_ERROR =3D 0, NVME_AER_TYPE_SMART =3D 1, + NVME_AER_TYPE_NOTICE =3D 2, NVME_AER_TYPE_IO_SPECIFIC =3D 6, NVME_AER_TYPE_VENDOR_SPECIFIC =3D 7, NVME_AER_INFO_ERR_INVALID_DB_REGISTER =3D 0, @@ -771,6 +772,7 @@ enum NvmeAsyncEventRequest { NVME_AER_INFO_SMART_RELIABILITY =3D 0, NVME_AER_INFO_SMART_TEMP_THRESH =3D 1, NVME_AER_INFO_SMART_SPARE_THRESH =3D 2, + NVME_AER_INFO_NOTICE_NS_ATTR_CHANGED =3D 0, }; =20 typedef struct QEMU_PACKED NvmeAerResult { @@ -940,6 +942,7 @@ enum NvmeLogIdentifier { NVME_LOG_ERROR_INFO =3D 0x01, NVME_LOG_SMART_INFO =3D 0x02, NVME_LOG_FW_SLOT_INFO =3D 0x03, + NVME_LOG_CHANGED_NSLIST =3D 0x04, NVME_LOG_CMD_EFFECTS =3D 0x05, }; =20 @@ -1056,6 +1059,10 @@ typedef struct NvmeIdCtrlNvm { uint8_t rsvd16[4080]; } NvmeIdCtrlNvm; =20 +enum NvmeIdCtrlOaes { + NVME_OAES_NS_ATTR =3D 1 << 8, +}; + enum NvmeIdCtrlOacs { NVME_OACS_SECURITY =3D 1 << 0, NVME_OACS_FORMAT =3D 1 << 1, diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 86fbab1fc43c..cf0bb508aa80 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -3015,6 +3015,48 @@ static uint16_t nvme_error_info(NvmeCtrl *n, uint8_t= rae, uint32_t buf_len, return nvme_c2h(n, (uint8_t *)&errlog, trans_len, req); } =20 +static uint16_t nvme_changed_nslist(NvmeCtrl *n, uint8_t rae, uint32_t buf= _len, + uint64_t off, NvmeRequest *req) +{ + uint32_t nslist[1024]; + uint32_t trans_len; + int i =3D 0; + uint32_t nsid; + + memset(nslist, 0x0, sizeof(nslist)); + trans_len =3D MIN(sizeof(nslist) - off, buf_len); + + while ((nsid =3D find_first_bit(n->changed_nsids, NVME_CHANGED_NSID_SI= ZE)) !=3D + NVME_CHANGED_NSID_SIZE) { + /* + * If more than 1024 namespaces, the first entry in the log page s= hould + * be set to 0xffffffff and the others to 0 as spec. + */ + if (i =3D=3D ARRAY_SIZE(nslist)) { + memset(nslist, 0x0, sizeof(nslist)); + nslist[0] =3D 0xffffffff; + break; + } + + nslist[i++] =3D nsid; + clear_bit(nsid, n->changed_nsids); + } + + /* + * Remove all the remaining list entries in case returns directly due = to + * more than 1024 namespaces. + */ + if (nslist[0] =3D=3D 0xffffffff) { + bitmap_zero(n->changed_nsids, NVME_CHANGED_NSID_SIZE); + } + + if (!rae) { + nvme_clear_events(n, NVME_AER_TYPE_NOTICE); + } + + return nvme_c2h(n, ((uint8_t *)nslist) + off, trans_len, req); +} + static uint16_t nvme_cmd_effects(NvmeCtrl *n, uint8_t csi, uint32_t buf_le= n, uint64_t off, NvmeRequest *req) { @@ -3098,6 +3140,8 @@ static uint16_t nvme_get_log(NvmeCtrl *n, NvmeRequest= *req) return nvme_smart_info(n, rae, len, off, req); case NVME_LOG_FW_SLOT_INFO: return nvme_fw_log_info(n, len, off, req); + case NVME_LOG_CHANGED_NSLIST: + return nvme_changed_nslist(n, rae, len, off, req); case NVME_LOG_CMD_EFFECTS: return nvme_cmd_effects(n, csi, len, off, req); default: @@ -3956,6 +4000,16 @@ static uint16_t nvme_ns_attachment(NvmeCtrl *n, Nvme= Request *req) =20 nvme_ns_detach(ctrl, ns); } + + /* + * Add namespace id to the changed namespace id list for event cle= aring + * via Get Log Page command. + */ + if (!test_and_set_bit(nsid, ctrl->changed_nsids)) { + nvme_enqueue_event(ctrl, NVME_AER_TYPE_NOTICE, + NVME_AER_INFO_NOTICE_NS_ATTR_CHANGED, + NVME_LOG_CHANGED_NSLIST); + } } =20 return NVME_SUCCESS; @@ -4954,6 +5008,8 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pc= i_dev) =20 id->cntlid =3D cpu_to_le16(n->cntlid); =20 + id->oaes =3D cpu_to_le32(NVME_OAES_NS_ATTR); + id->rab =3D 6; =20 if (n->params.use_intel_id) { --=20 2.30.1 From nobody Fri May 17 20:31:29 2024 Delivered-To: importer@patchew.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=1615293005; cv=none; d=zohomail.com; s=zohoarc; b=FzDeFq1DQ4O6+UASi2Bq4LgoU5B2vQ7jlDpTUnHlk49dgh25ml14XBhzzGM4pKgbU6u9HhICvrDjTKtE4mKVS1neBGrTcSFlOOzGUXM0z3U3MFqq/hcz2XOtDakrxIody5sC+0wQGHNagXBjSwXCZpOsMqtgW/WOjZgcZ+yjU2o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615293005; 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=as7n27gXEjrTFYzAdPMUcfCbdShElZaD7+zwuiXYAhE=; b=LA8pHAhfJpPI8TUilVrv5qtjNXKaM/LtxDSUoQIABdtu5aX5lj6NzAnWZQu7tnc4scxcYS8vMEavD+x6Nrr2FnDJAEWAGfI2zCbcKHShk6nf8pqHOzYjzBLQ3CE28cTb4aWHXiLihOAP9rtE8CNSUhNqJ+DROMKOLSX56fM9Rms= 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 1615293005849142.6947188300195; Tue, 9 Mar 2021 04:30:05 -0800 (PST) Received: from localhost ([::1]:60734 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lJbUv-00027w-6g for importer@patchew.org; Tue, 09 Mar 2021 07:30:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43680) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap8-0000n1-SR; Tue, 09 Mar 2021 06:46:50 -0500 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]:46163) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lJap6-0000rS-J2; Tue, 09 Mar 2021 06:46:50 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.west.internal (Postfix) with ESMTP id 1138FF20; Tue, 9 Mar 2021 06:46:16 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 09 Mar 2021 06:46:16 -0500 Received: from apples.local (80-167-98-190-cable.dk.customer.tdc.net [80.167.98.190]) by mail.messagingengine.com (Postfix) with ESMTPA id 3B6E824005D; Tue, 9 Mar 2021 06:46:14 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=as7n27gXEjrTF YzAdPMUcfCbdShElZaD7+zwuiXYAhE=; b=p4u/7gtKZ8QUazZhKqGvkSmctyAkq TsQJy0gXmsVqx17bsk+hEyM0L+xzYPOeGlBs3XSPzOFpIvhrv19y0dEHSKJ21K4l lKoA7s1tiY87/x3TM5cc6aUKuVeMcOzzl0R9PFOnC5yXl7uAaz9hf6Mk0aL2d5Vx vJI2Ippnzr5wIeY/8AGVU7+7oXLb/MB04LKd8X5FvlYLuN2sHr/4g32Uc5Y0+USr tpbB3hsNL4QY1J6xIQrxqB9NN13ZcSHi8idZmtdX6WWYQczkkpI4vlpDIM+5ibz+ tLcKZrvmdP1pIvxypmxb338NovL2eeIFMg0x1GfsZyc2c+1fhBi/2D8qQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=as7n27gXEjrTFYzAdPMUcfCbdShElZaD7+zwuiXYAhE=; b=GWo51YYf +C14oAoT/yJX20PHhxi0b6/hXJKP0ju3bp3ytfk2J03hBU9wTrGIoAenL5cb0jMO Cjjrv8rGBmLxg2BcV7ws29363FnkIXBZQJ/6LfzgZ5qAjXuu1xMs8jOQhrF3NNl5 U9Uiit6M6/ValCtdGBAakrEzVUNC4MIdkgiiqkOU13FUWXpTAMKtIsACZk7yKfPP vfxi9na++TGrU8NNGSj50ROVQ59/FwkXs9uHDPqRK8fRc7mPJz9UcELi1d+ePGJv U7bhMSWhpb3cFw3KsHJYekjQ1KuWN/KMOm2up7uEpeNz4t35gFEIGyYhsgnzPUYY NHRZ7qjSAvtQnQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudduiedgfeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedvie enucfrrghrrghmpehmrghilhhfrhhomhepihhtshesihhrrhgvlhgvvhgrnhhtrdgukh X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 38/38] hw/block/nvme: support Identify NS Attached Controller List Date: Tue, 9 Mar 2021 12:45:12 +0100 Message-Id: <20210309114512.536489-39-its@irrelevant.dk> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210309114512.536489-1-its@irrelevant.dk> References: <20210309114512.536489-1-its@irrelevant.dk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=64.147.123.26; envelope-from=its@irrelevant.dk; helo=wnew1-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Klaus Jensen , Max Reitz , Keith Busch , Minwoo Im , Stefan Hajnoczi , Klaus Jensen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Minwoo Im Support Identify command for Namespace attached controller list. This command handler will traverse the controller instances in the given subsystem to figure out whether the specified nsid is attached to the controllers or not. The 4096bytes Identify data will return with the first entry (16bits) indicating the number of the controller id entries. So, the data can hold up to 2047 entries for the controller ids. Signed-off-by: Minwoo Im Reviewed-by: Keith Busch Reviewed-by: Klaus Jensen Tested-by: Klaus Jensen [k.jensen: rebased for dma refactor] Signed-off-by: Klaus Jensen --- include/block/nvme.h | 1 + hw/block/nvme.c | 41 +++++++++++++++++++++++++++++++++++++++++ hw/block/trace-events | 1 + 3 files changed, 43 insertions(+) diff --git a/include/block/nvme.h b/include/block/nvme.h index 7ee887022aef..372d0f2799fb 100644 --- a/include/block/nvme.h +++ b/include/block/nvme.h @@ -971,6 +971,7 @@ enum NvmeIdCns { NVME_ID_CNS_CS_NS_ACTIVE_LIST =3D 0x07, NVME_ID_CNS_NS_PRESENT_LIST =3D 0x10, NVME_ID_CNS_NS_PRESENT =3D 0x11, + NVME_ID_CNS_NS_ATTACHED_CTRL_LIST =3D 0x12, NVME_ID_CNS_CS_NS_PRESENT_LIST =3D 0x1a, NVME_ID_CNS_CS_NS_PRESENT =3D 0x1b, NVME_ID_CNS_IO_COMMAND_SET =3D 0x1c, diff --git a/hw/block/nvme.c b/hw/block/nvme.c index cf0bb508aa80..d439e44db839 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -3338,6 +3338,45 @@ static uint16_t nvme_identify_ns(NvmeCtrl *n, NvmeRe= quest *req, bool active) return NVME_INVALID_CMD_SET | NVME_DNR; } =20 +static uint16_t nvme_identify_ns_attached_list(NvmeCtrl *n, NvmeRequest *r= eq) +{ + NvmeIdentify *c =3D (NvmeIdentify *)&req->cmd; + uint16_t min_id =3D le16_to_cpu(c->ctrlid); + uint16_t list[NVME_CONTROLLER_LIST_SIZE] =3D {}; + uint16_t *ids =3D &list[1]; + NvmeNamespace *ns; + NvmeCtrl *ctrl; + int cntlid, nr_ids =3D 0; + + trace_pci_nvme_identify_ns_attached_list(min_id); + + if (c->nsid =3D=3D NVME_NSID_BROADCAST) { + return NVME_INVALID_FIELD | NVME_DNR; + } + + ns =3D nvme_subsys_ns(n->subsys, c->nsid); + if (!ns) { + return NVME_INVALID_FIELD | NVME_DNR; + } + + for (cntlid =3D min_id; cntlid < ARRAY_SIZE(n->subsys->ctrls); cntlid+= +) { + ctrl =3D nvme_subsys_ctrl(n->subsys, cntlid); + if (!ctrl) { + continue; + } + + if (!nvme_ns_is_attached(ctrl, ns)) { + continue; + } + + ids[nr_ids++] =3D cntlid; + } + + list[0] =3D nr_ids; + + return nvme_c2h(n, (uint8_t *)list, sizeof(list), req); +} + static uint16_t nvme_identify_ns_csi(NvmeCtrl *n, NvmeRequest *req, bool active) { @@ -3540,6 +3579,8 @@ static uint16_t nvme_identify(NvmeCtrl *n, NvmeReques= t *req) return nvme_identify_ns(n, req, true); case NVME_ID_CNS_NS_PRESENT: return nvme_identify_ns(n, req, false); + case NVME_ID_CNS_NS_ATTACHED_CTRL_LIST: + return nvme_identify_ns_attached_list(n, req); case NVME_ID_CNS_CS_NS: return nvme_identify_ns_csi(n, req, true); case NVME_ID_CNS_CS_NS_PRESENT: diff --git a/hw/block/trace-events b/hw/block/trace-events index c5dba935a0c1..ef06d2ea7470 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -66,6 +66,7 @@ pci_nvme_identify(uint16_t cid, uint8_t cns, uint16_t ctr= lid, uint8_t csi) "cid pci_nvme_identify_ctrl(void) "identify controller" pci_nvme_identify_ctrl_csi(uint8_t csi) "identify controller, csi=3D0x%"PR= Ix8"" pci_nvme_identify_ns(uint32_t ns) "nsid %"PRIu32"" +pci_nvme_identify_ns_attached_list(uint16_t cntid) "cntid=3D%"PRIu16"" pci_nvme_identify_ns_csi(uint32_t ns, uint8_t csi) "nsid=3D%"PRIu32", csi= =3D0x%"PRIx8"" pci_nvme_identify_nslist(uint32_t ns) "nsid %"PRIu32"" pci_nvme_identify_nslist_csi(uint16_t ns, uint8_t csi) "nsid=3D%"PRIu16", = csi=3D0x%"PRIx8"" --=20 2.30.1