From nobody Sun Nov 16 18:51:51 2025 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=1606434588; cv=none; d=zohomail.com; s=zohoarc; b=QIsX7QQVL7/ySDipITgIMstpf3qkDy+D40oG3Xa9kTgrVDRRzZJ4Cql3HF2wvakkuX5jlSVdQe7cPPJg7e2J0OnVJdQlCzgPwy11VsFqRwBPmXoefzkH0DqTObgvX6DxMZ1fN4lFZNpTnPuAaIGHEfbj5AqZNHQN3LWAD5Yjb6E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606434588; 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=sBPATm+u2MfPvqufWKbPI4pSHthzu9uObTwJH52y8Q0=; b=gkJf0R24wN4uEDEQyH/dbdgPeLg3aDdBhl8rsxTK5OcotGYJbN8tFyZUdx8NyM6vlSa18fl+nHVi0LXiPaAIhjIYgjxdgcqTaw1KTzzRJhHHVECglt6G0Fqe9mtu7kruU4JLc2Kf95M4Qfrg4FRlZQmXxO10ZB00C+Fj3dbkpa0= 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 1606434588160791.5733870807898; Thu, 26 Nov 2020 15:49:48 -0800 (PST) Received: from localhost ([::1]:47994 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kiR1F-0000kX-HV for importer@patchew.org; Thu, 26 Nov 2020 18:49:45 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55826) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kiQxt-0007P8-Ks; Thu, 26 Nov 2020 18:46:17 -0500 Received: from new2-smtp.messagingengine.com ([66.111.4.224]:41727) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kiQxk-0003sL-Su; Thu, 26 Nov 2020 18:46:17 -0500 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.nyi.internal (Postfix) with ESMTP id D311A580E83; Thu, 26 Nov 2020 18:46:07 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Thu, 26 Nov 2020 18: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 43D733064AAA; Thu, 26 Nov 2020 18: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=fm1; bh=sBPATm+u2MfPv qufWKbPI4pSHthzu9uObTwJH52y8Q0=; b=1ZpSg2B8YF1z9unSMZEEpBjOS2JBW Bj+XPbdIGw01Bu8IA1gQTyC/jUkMJSlypVQ++IgB+X14ADZVODxMkDkbXrqIgNEA VdRFgcvo8w6updEe8TBKtbTqq/Z+sNl47uhOSdpP0miguWnhO5lHA+3eHXYsygGZ +FjYcpnBKGE8uLS+TINqd8WxDDxWEfLM4UoK9STQtmXQilh1bONKUVulmm9dJZ9R P5sg/diJ/ZPQvP8NyjpMvrbed7lEjx/zsnTW21emDn8byMKqvZOHp34nGyE59TNF TwITE4YSyhnII+eUrCeCjNG4y+31+U9kvAiBwBE7yas0sFA6di6dUAWBw== 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= fm1; bh=sBPATm+u2MfPvqufWKbPI4pSHthzu9uObTwJH52y8Q0=; b=cej9pILW mVEYUMmY9H3rj9rJuyTsPQGcDbbkkyadzvEVNzDS1CIAwU1eCkbWACmpcQnH27Bl 5+ljRlLZDaaiEOl8C6cXarqWxY4MhVRLLqmHa5VNQaUIbVChQ2DrSSpYnU7zIR5N /CaLVjZLpxa5kvp8FayABpRVlzq6XJyNpal36HciRAPozJiLGe3Bv7KWmMJCOI5j V0Lkc+xNkV0HVcUatmJl8ReRDuVnvaPZIWl+ZQycEJMciY+yBvAmMmlexuEUnvCL I5L3Y6SKLqWNoMEjwJzKBTNX0enp7rc12cCQSQjNrB0IVdjErPOzZ/fsh4oFcLco H0xzyjukd67gIQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrudehfedguddvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefmlhgruhhs ucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnthdrughkqeenucggtffrrghtth gvrhhnpeeuleetgeeiuefhgfekfefgveejiefgteekiedtgfdtieefhfdthfefueffvefg keenucfkphepkedtrdduieejrdelkedrudeltdenucevlhhushhtvghrufhiiigvpedtne curfgrrhgrmhepmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughk X-ME-Proxy: From: Klaus Jensen To: qemu-devel@nongnu.org Subject: [PATCH v5 02/12] hw/block/nvme: Merge nvme_write_zeroes() with nvme_write() Date: Fri, 27 Nov 2020 00:45:51 +0100 Message-Id: <20201126234601.689714-3-its@irrelevant.dk> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201126234601.689714-1-its@irrelevant.dk> References: <20201126234601.689714-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=66.111.4.224; envelope-from=its@irrelevant.dk; helo=new2-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: Kevin Wolf , Fam Zheng , qemu-block@nongnu.org, Niklas Cassel , 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 nvme_write() now handles WRITE, WRITE ZEROES and ZONE_APPEND. Signed-off-by: Dmitry Fomichev Reviewed-by: Niklas Cassel [kj: rebased] Signed-off-by: Klaus Jensen --- hw/block/nvme.c | 69 +++++++++++++++++-------------------------- hw/block/trace-events | 1 - 2 files changed, 27 insertions(+), 43 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 657d0b8b2922..0050ef87cb92 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1449,31 +1449,6 @@ invalid: return status; } =20 -static uint16_t nvme_write_zeroes(NvmeCtrl *n, NvmeRequest *req) -{ - NvmeRwCmd *rw =3D (NvmeRwCmd *)&req->cmd; - NvmeNamespace *ns =3D req->ns; - uint64_t slba =3D le64_to_cpu(rw->slba); - uint32_t nlb =3D (uint32_t)le16_to_cpu(rw->nlb) + 1; - uint64_t offset =3D nvme_l2b(ns, slba); - uint32_t count =3D nvme_l2b(ns, nlb); - uint16_t status; - - trace_pci_nvme_write_zeroes(nvme_cid(req), nvme_nsid(ns), slba, nlb); - - status =3D nvme_check_bounds(ns, slba, nlb); - if (status) { - trace_pci_nvme_err_invalid_lba_range(slba, nlb, ns->id_ns.nsze); - return status; - } - - block_acct_start(blk_get_stats(req->ns->blkconf.blk), &req->acct, 0, - BLOCK_ACCT_WRITE); - req->aiocb =3D blk_aio_pwrite_zeroes(req->ns->blkconf.blk, offset, cou= nt, - BDRV_REQ_MAY_UNMAP, nvme_rw_cb, req= ); - return NVME_NO_COMPLETE; -} - static uint16_t nvme_write(NvmeCtrl *n, NvmeRequest *req) { NvmeRwCmd *rw =3D (NvmeRwCmd *)&req->cmd; @@ -1483,15 +1458,18 @@ static uint16_t nvme_write(NvmeCtrl *n, NvmeRequest= *req) uint64_t data_size =3D nvme_l2b(ns, nlb); uint64_t data_offset; BlockBackend *blk =3D ns->blkconf.blk; + bool wrz =3D rw->opcode =3D=3D NVME_CMD_WRITE_ZEROES; uint16_t status; =20 trace_pci_nvme_write(nvme_cid(req), nvme_io_opc_str(rw->opcode), nvme_nsid(ns), nlb, data_size, slba); =20 - status =3D nvme_check_mdts(n, data_size); - if (status) { - trace_pci_nvme_err_mdts(nvme_cid(req), data_size); - goto invalid; + if (!wrz) { + status =3D nvme_check_mdts(n, data_size); + if (status) { + trace_pci_nvme_err_mdts(nvme_cid(req), data_size); + goto invalid; + } } =20 status =3D nvme_check_bounds(ns, slba, nlb); @@ -1500,22 +1478,30 @@ static uint16_t nvme_write(NvmeCtrl *n, NvmeRequest= *req) goto invalid; } =20 - status =3D nvme_map_dptr(n, data_size, req); - if (status) { - goto invalid; - } - data_offset =3D nvme_l2b(ns, slba); =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); + if (!wrz) { + status =3D nvme_map_dptr(n, data_size, req); + if (status) { + goto invalid; + } + + 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); + } } else { - req->aiocb =3D blk_aio_pwritev(blk, data_offset, &req->iov, 0, - nvme_rw_cb, req); + 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); } + return NVME_NO_COMPLETE; =20 invalid: @@ -1547,7 +1533,6 @@ static uint16_t nvme_io_cmd(NvmeCtrl *n, NvmeRequest = *req) case NVME_CMD_FLUSH: return nvme_flush(n, req); case NVME_CMD_WRITE_ZEROES: - return nvme_write_zeroes(n, req); case NVME_CMD_WRITE: return nvme_write(n, req); case NVME_CMD_READ: diff --git a/hw/block/trace-events b/hw/block/trace-events index cc269b51a1e0..35ea40c49169 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -47,7 +47,6 @@ pci_nvme_copy(uint16_t cid, uint32_t nsid, uint16_t nr, u= int8_t format) "cid %"P 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_write_zeroes(uint16_t cid, uint32_t nsid, uint64_t slba, uint32_t= nlb) "cid %"PRIu16" nsid %"PRIu32" slba %"PRIu64" nlb %"PRIu32"" 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"" --=20 2.29.2