From nobody Mon Feb 9 16:03:51 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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; dmarc=fail(p=none dis=none) header.from=samsung.com ARC-Seal: i=1; a=rsa-sha256; t=1617904024; cv=none; d=zohomail.com; s=zohoarc; b=Na+ubBRSEJ7zhtQFUfFM39i0R78PEoX2M9blH2cb4xdj6n60QwZzyVMBtr6ptTkW9uEkhFnGbA5PmC7aP12FjSJK17eoDeA7NvLv/QPkL10+lY68tr5g/TUveRD6p1t+m/w90cbU4IWFxoXVcv4ynsWMo1BAckkJiea+6kAKXQs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1617904024; h=Content-Type:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=gV4GqoRH/lZ8IPgrFXe/JAiDv3IM8XFl9r7QoQ4RYW4=; b=CrcvbXn4+yU7v5ur9Idoe583P00lmCGb1NxPws/1DCtNefiRYPlDQaAdx1Dl/S7KXZKI7yfZTdeo8P1TDOOCV+DEfa9+Giehf8AZM9NBXJJS6VhOVMF980fEhuqPfMfj9klwUPY0zwjYPCxc387oN3FYVIJbBI+EAVZGd+bKAJU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1617904024711123.70047049980963; Thu, 8 Apr 2021 10:47:04 -0700 (PDT) Received: from localhost ([::1]:58162 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lUYkA-0002tQ-VJ for importer@patchew.org; Thu, 08 Apr 2021 13:47:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48848) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUXbm-0002KJ-TA for qemu-devel@nongnu.org; Thu, 08 Apr 2021 12:34:21 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:48214) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUXbY-0002Uf-4q for qemu-devel@nongnu.org; Thu, 08 Apr 2021 12:34:16 -0400 Received: from epcas5p4.samsung.com (unknown [182.195.41.42]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20210408163351epoutp024c972e0fc69f998479d8f131a28923af~z7yR4s9Gb0755307553epoutp02i for ; Thu, 8 Apr 2021 16:33:51 +0000 (GMT) Received: from epsmges5p1new.samsung.com (unknown [182.195.42.73]) by epcas5p3.samsung.com (KnoxPortal) with ESMTP id 20210408163350epcas5p3dff27306c936a581ce605b8f27a5ba46~z7yQ7mFdA3190431904epcas5p3-; Thu, 8 Apr 2021 16:33:50 +0000 (GMT) Received: from epcas5p1.samsung.com ( [182.195.41.39]) by epsmges5p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 36.32.15682.D603F606; Fri, 9 Apr 2021 01:33:49 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p1.samsung.com (KnoxPortal) with ESMTPA id 20210408162750epcas5p1f093ab42779ab250fbcb672a41455a30~z7tCGD-pI1869018690epcas5p1C; Thu, 8 Apr 2021 16:27:50 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20210408162750epsmtrp1918e328fc34005e877c42e1fb98a225e~z7tCFPYSh3214032140epsmtrp16; Thu, 8 Apr 2021 16:27:50 +0000 (GMT) Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id CD.63.33967.60F2F606; Fri, 9 Apr 2021 01:27:50 +0900 (KST) Received: from 2030045822.sa.corp.samsungelectronics.net (unknown [107.108.221.178]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20210408162749epsmtip19f1a3bf77df5e21044a104537a8abea8~z7tAy44sp1404214042epsmtip10; Thu, 8 Apr 2021 16:27:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20210408163351epoutp024c972e0fc69f998479d8f131a28923af~z7yR4s9Gb0755307553epoutp02i DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1617899631; bh=gV4GqoRH/lZ8IPgrFXe/JAiDv3IM8XFl9r7QoQ4RYW4=; h=From:To:Cc:Subject:Date:References:From; b=b+vOU1FCyWtTS/Kn4Bo7oepjFT93jrzV4vK6Trm8WicolLs/uGJjIFHQKQUYNrkAp h2rtwWPNUudgakKUverCGeH1N1pj8/r4SIhGpqm7yTYeKqdUSono7rM3TlBoQF2Dcm rCXzSD0OR6CxSXR4I0+z0ASSOGdM0tntDZbX5bRs= X-AuditID: b6c32a49-8d5ff70000013d42-b2-606f306d9393 From: Padmakar Kalghatgi To: qemu-devel@nongnu.org Subject: [PATCH] hw/block/nvme: map prp fix if prp2 contains non-zero offset Date: Thu, 8 Apr 2021 21:53:13 +0530 Message-Id: <20210408162313.22749-1-p.kalghatgi@samsung.com> X-Mailer: git-send-email 2.17.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrGIsWRmVeSWpSXmKPExsWy7bCmum6uQX6Cwfll5hZX9p9ntNh/8Bur xaRD1xgtllxMtZh3S9ni+s9H7Baz3rWzWRzv3cFi8XrSf1YHTo8f59rZPM7tOM/usWlVJ5vH k2ubmTze77vK5tG3ZRVjAFsUl01Kak5mWWqRvl0CV8anbWeZCtYIVZx5/465gbGbp4uRk0NC wERi1fNZjCC2kMBuRollpxUh7E+MEvMWxXUxcgHZ3xgljv8+yQrTcPjjW6iGvYwSm1vyIYo6 mSS+bHnG1sXIwcEmYCTxvdUWpEZEQFLid9dpZpAaZoGNjBJLd7UxgSSEBXwkdh45xQZiswio SmyZ2MQMYvMK2Ei8/NjHDLFMXmL1hgNgzRICx9glLmxbBpVwkTh/YjsbhC0s8er4FnYIW0ri ZX8bO0RDM6PEvi9XWCCcCYwSU+a/Y4Kospe4uOcvE8ipzAKaEut36UOEZSWmnloHVsIswCfR +/sJVDmvxI55MLaqxOMLB6EWS0vMXvkJKu4hMXHTF2ZIsMRKzP6yj3ECo+wshA0LGBlXMUqm FhTnpqcWmxYY5qWW6xUn5haX5qXrJefnbmIEJwUtzx2Mdx980DvEyMTBeIhRgoNZSYR3R292 ghBvSmJlVWpRfnxRaU5q8SFGaQ4WJXHeHQYP4oUE0hNLUrNTUwtSi2CyTBycUg1M8WtWZ6zT ndETrNw1W3tJ+NcY1qmOdv++ud3acerZ53kydV/lJM4/nntx297cRgODFwH/N+ZdOv0tqPOR 6W7fyJnzW0ytSx7yOfQ1HBMLVthonFjx+HTeCv7TDBGZrIedF/9s2S3ycxLfsoVCMWfvyF1/ rfn8xXvDmq0L4+Q8npl2Nu0/8j9YJWpr399GHv6g/ktWnP2mFTO9RNI9JjU9lJ6bzXGSY9fN h4K6N049Fu3jT92YxaT49qC+brFwydsMm68/P7OwuwalCGrw270vns131SQmbLdr1gzHzWni hxRE9d2vhORI8XyU06yY9k/hT8+dWVZ8tv4Xtwnxm8SckH8uxW/+9pEK68qNUoVKLMUZiYZa zEXFiQD9LI8DeQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFuphluLIzCtJLcpLzFFi42LZdlhJTpdNPz/B4ME7aYsr+88zWuw/+I3V YtKha4wWSy6mWsy7pWxx/ecjdotZ79rZLI737mCxeD3pP6sDp8ePc+1sHud2nGf32LSqk83j ybXNTB7v911l8+jbsooxgC2KyyYlNSezLLVI3y6BK+PTtrNMBWuEKs68f8fcwNjN08XIySEh YCJx+ONbxi5GLg4hgd2MEud3TmeHSEhL7Ht4nQXCFpZY+e85WFxIoJ1JYs3Z8C5GDg42ASOJ 7622IGERAUmJ312nmUHmMIPMedLwGqxXWMBHYueRU2wgNouAqsSWiU3MIDavgI3Ey499zBDz 5SVWbzjAPIGRZwEjwypGydSC4tz03GLDAsO81HK94sTc4tK8dL3k/NxNjOAA09Lcwbh91Qe9 Q4xMHIyHGCU4mJVEeHf0ZicI8aYkVlalFuXHF5XmpBYfYpTmYFES573QdTJeSCA9sSQ1OzW1 ILUIJsvEwSnVwNQZMFE6PUd7XrfI6aN+lnyhIa4nLkm2OQkukP2Wrj1njnOc8D7Hj8ZBSzzu tW+xqFndwLhnatp5v0+zGG6t2KSWxmJTNnOrY+r7+88ehrbGSl0xFbvVuKEpRZ8p6k/jn815 1yrDWTc5X3lk+i0tUeXer8qlBu9vzpyZYZZ0difXsoci5xOfOk65M5uZTajx8RnjxYcC187b 0bZ7malzim3FAdVNvoF2nMcuTW+cYrtb099BMFdU6FipaXcrf0lo44/3BpL/JpuxMl5onrZy uvysiKw7rvf+ZObemHH6VtKn3VdXf5e+Jez4MDGyvcmoI9Bb6Wxpzt7F0Q7Mt/ZqevWtv9Fr Hnpw3YKn5y2v6CixFGckGmoxFxUnAgCXPXlLnwIAAA== X-CMS-MailID: 20210408162750epcas5p1f093ab42779ab250fbcb672a41455a30 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P X-CMS-RootMailID: 20210408162750epcas5p1f093ab42779ab250fbcb672a41455a30 References: 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=203.254.224.25; envelope-from=p.kalghatgi@samsung.com; helo=mailout2.samsung.com X-Spam_score_int: -70 X-Spam_score: -7.1 X-Spam_bar: ------- X-Spam_report: (-7.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Apr 2021 13:45:46 -0400 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@euphon.net, kwolf@redhat.com, padmakar , qemu-block@nongnu.org, mreitz@redhat.com, its@irrelevant.dk, stefanha@redhat.com, kbusch@kernel.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 From: padmakar nvme_map_prp needs to calculate the number of list entries based on the offset value. For the subsequent PRP2 list, need to ensure the number of entries is within the MAX number of PRP entries for a page. Signed-off-by: Padmakar Kalghatgi Reviewed-by: Klaus Jensen --- hw/block/nvme.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index d439e44..efb7368 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -577,7 +577,12 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, NvmeSg *sg, = uint64_t prp1, uint32_t nents, prp_trans; int i =3D 0; =20 - nents =3D (len + n->page_size - 1) >> n->page_bits; + /* + * The first PRP list entry, pointed by PRP2 can contain + * offsets. Hence, we need calculate the no of entries in + * prp2 based on the offset it has. + */ + nents =3D (n->page_size - (prp2 % n->page_size)) >> 3; prp_trans =3D MIN(n->max_prp_ents, nents) * sizeof(uint64_t); ret =3D nvme_addr_read(n, prp2, (void *)prp_list, prp_trans); if (ret) { @@ -588,7 +593,7 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, NvmeSg *sg, u= int64_t prp1, while (len !=3D 0) { uint64_t prp_ent =3D le64_to_cpu(prp_list[i]); =20 - if (i =3D=3D n->max_prp_ents - 1 && len > n->page_size) { + if (i =3D=3D nents - 1 && len > n->page_size) { if (unlikely(prp_ent & (n->page_size - 1))) { trace_pci_nvme_err_invalid_prplist_ent(prp_ent); status =3D NVME_INVALID_PRP_OFFSET | NVME_DNR; @@ -597,7 +602,8 @@ static uint16_t nvme_map_prp(NvmeCtrl *n, NvmeSg *sg, u= int64_t prp1, =20 i =3D 0; nents =3D (len + n->page_size - 1) >> n->page_bits; - prp_trans =3D MIN(n->max_prp_ents, nents) * sizeof(uin= t64_t); + nents =3D MIN(nents, n->max_prp_ents); + prp_trans =3D nents * sizeof(uint64_t); ret =3D nvme_addr_read(n, prp_ent, (void *)prp_list, prp_trans); if (ret) { --=20 2.7.0.windows.1