From nobody Mon Apr 29 05:37:40 2024 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=1617953856; cv=none; d=zohomail.com; s=zohoarc; b=dYLavUq6hzoBpWApEYjqPOFZL+CImfvopY2QDsnS15k/zXQ/r7rryvGYhr+oTFBr4nM8X+2YFLUy4J4nQ4HtwAHQWOCI34Xq9EeWGTS5M11299sdwSsJTdAVp3vx0+eaUIb8wZaTp3LecRYwwGQDckSPUN/X3TGHTEMOHTJYOck= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1617953856; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=t6wNXFxE3qVcmM65xDarJfgSt/PKdMCO3O3lZU0y5Os=; b=ZZluk5g/b+TXC7KgE+pzWBqkn+0GeNNgeVWrQ+JFSv6FcaZCsWLAiVrkds4z9HZlY98+fzoyOc7BDsfVp1y/OPzJBL5+8ghEz28555Buy7uialUMUVvZSkJVjGMn4lytRexPgl4gEgJYEbKjZlyk/guFrRL9fZxu4DD6A/fL8uc= 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 1617953856259937.581176474249; Fri, 9 Apr 2021 00:37:36 -0700 (PDT) Received: from localhost ([::1]:52454 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lUlhu-0007oJ-Gb for importer@patchew.org; Fri, 09 Apr 2021 03:37:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34996) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUlh2-0007EP-8w for qemu-devel@nongnu.org; Fri, 09 Apr 2021 03:36:40 -0400 Received: from mailout4.samsung.com ([203.254.224.34]:38684) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUlgy-0003np-T6 for qemu-devel@nongnu.org; Fri, 09 Apr 2021 03:36:40 -0400 Received: from epcas5p4.samsung.com (unknown [182.195.41.42]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20210409073627epoutp04b24e203c7876c18c6016e65e49d90843~0IGXAcBK80492904929epoutp04V for ; Fri, 9 Apr 2021 07:36:27 +0000 (GMT) Received: from epsmges5p2new.samsung.com (unknown [182.195.42.74]) by epcas5p2.samsung.com (KnoxPortal) with ESMTP id 20210409073626epcas5p2f1cbcbfee0fc59936b38f5c5a33e01d1~0IGWJk25Z1884718847epcas5p2l; Fri, 9 Apr 2021 07:36:26 +0000 (GMT) Received: from epcas5p1.samsung.com ( [182.195.41.39]) by epsmges5p2new.samsung.com (Symantec Messaging Gateway) with SMTP id BC.A3.39068.AF300706; Fri, 9 Apr 2021 16:36:26 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p4.samsung.com (KnoxPortal) with ESMTPA id 20210409072736epcas5p4e40bbaec44791395e48537e37d7e379e~0H_oxcowl1327713277epcas5p4i; Fri, 9 Apr 2021 07:27:36 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20210409072736epsmtrp18af132493d913bee3fc6549f8869d569~0H_owifiA2504025040epsmtrp1j; Fri, 9 Apr 2021 07:27:36 +0000 (GMT) Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 42.F3.33967.8E100706; Fri, 9 Apr 2021 16:27:36 +0900 (KST) Received: from test-zns.sa.corp.samsungelectronics.net (unknown [107.110.206.5]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20210409072735epsmtip174a9bd243f8eb8be4553f0faf665ae30~0H_ncNjgV1812618126epsmtip1H; Fri, 9 Apr 2021 07:27:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20210409073627epoutp04b24e203c7876c18c6016e65e49d90843~0IGXAcBK80492904929epoutp04V DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1617953787; bh=t6wNXFxE3qVcmM65xDarJfgSt/PKdMCO3O3lZU0y5Os=; h=From:To:Cc:Subject:Date:References:From; b=eHm6PmrmOUXAtbUpjWrxj1qXAEksskb18bMXz9tb9tmBpTwW5NpaV9wzg5t834aeX YqZDY6IpR/xG6gil1eQOck/j1bM9fEG+Cq7AxL20Kcg8wMP/0ln8sY9A+B6ATSggwn 0bXVw6CrL3VwR4Oo3RWjzqFmtAhV9EphfQZhPOgI= X-AuditID: b6c32a4a-60fff7000000989c-6c-607003fabaf4 From: Padmakar Kalghatgi To: qemu-devel@nongnu.org Subject: [PATCH v2] hw/block/nvme: map prp fix if prp2 contains non-zero offset Date: Fri, 9 Apr 2021 12:55:48 +0530 Message-Id: <20210409072548.31518-1-p.kalghatgi@samsung.com> X-Mailer: git-send-email 2.30.0-rc0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprGKsWRmVeSWpSXmKPExsWy7bCmuu4v5oIEgyn9khZX9p9ntNh/8Bur xaRD1xgtllxMtZh3S9ni+s9H7Baz3rWzWRzv3cFi8XrSf1YHTo8f59rZPM7tOM/usWlVJ5vH k2ubmTze77vK5tG3ZRVjAFsUl01Kak5mWWqRvl0CV8bDSy+YCtYLV3zZuZSlgfEzTxcjJ4eE gInEol/t7F2MXBxCArsZJV7f7oNyPjFKLD2ylhnC+cYoMXfbMpYuRg6wlrs3FSDiexkl7v19 yQwySkiglUni0U5ZkBo2ASOJ7622IGERAUmJ312nweYwC2wEGrqrjQmkRlggUGLzWUuQGhYB VYmf7/awgNi8AjYSrbvaGCGuU5ZY+PAgK0RcUOLkzCdgNcwC8hLNW2eDzZQQeMQuMbfrIDtE g4vE4ZOroGxhiVfHt0DZUhIv+9vYIRqaGSX2fbnCAuFMYJSYMv8dE0SVvcTFPX/BrmMW0JRY v0sfIiwrMfXUOiaIzXwSvb+fQJXzSuyYB2OrSjy+cJANwpaWmL3yE1TcQ+LWwbOMkACKleic uZZ1AqP8LCQPzULy0CyEzQsYmVcxSqYWFOempxabFhjlpZbrFSfmFpfmpesl5+duYgQnHS2v HYwPH3zQO8TIxMF4iFGCg1lJhLe5OT9BiDclsbIqtSg/vqg0J7X4EKM0B4uSOO8OgwfxQgLp iSWp2ampBalFMFkmDk6pBiaP5dELjlTNXS+RdObXeSn2rd0LXyROO8T46WGJmfr+5xeVnzId aHjybZO248TYsy7rJH4XfP4fwRbKLhGhZDAtZOHnNKEbH2uPHHHmfuuk0eC3IddQj3fBmbjo zevzWE/V3rGoPe890ztaZdbRfEmmxFiNpRsvyz3yqn93VONdhy5H1+cdbGsCPwskfHl5fUn1 c8e/bAs+FzwyT//+aeL3wDJ1gYtejvYRu0wFbiUm2RbYfjcPPRG2jWWzsOXh48+016wI+VSa PfMu2+vtjaqH1Q7VeX/1iqxjNmMO0Iru08+9GefQ5PByIy/Tggdn9nFeE/qo0NBvvJCVa/e0 rFmXHkQ4nDxsMTOzeUOXGrMSS3FGoqEWc1FxIgB2n4WUqQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrDLMWRmVeSWpSXmKPExsWy7bCSnO4LxoIEg5VH9Cyu7D/PaLH/4DdW i0mHrjFaLLmYajHvlrLF9Z+P2C1mvWtnszjeu4PF4vWk/6wOnB4/zrWzeZzbcZ7dY9OqTjaP J9c2M3m833eVzaNvyyrGALYoLpuU1JzMstQifbsEroyHl14wFawXrviycylLA+Nnni5GDg4J AROJuzcVuhi5OIQEdjNKdPbcZ+5i5ASKS0vse3idBcIWllj57zk7RFEzk8T79k4mkGY2ASOJ 7622IDUiApISv7tOM4PUMIMMetLwGqxZWMBf4tDL64wgNouAqsTPd3vA4rwCNhKtu9oYIRYo Syx8eJAVIi4ocXLmE7AaZgF5ieats5knMPLNQpKahSS1gJFpFaNkakFxbnpusWGBYV5quV5x Ym5xaV66XnJ+7iZGcABrae5g3L7qg94hRiYOxkOMEhzMSiK8zc35CUK8KYmVValF+fFFpTmp xYcYpTlYlMR5L3SdjBcSSE8sSc1OTS1ILYLJMnFwSjUwBVXXc5Vd0riSpP1gdXbDw2VR5gFa JQ5M3Kdner/N6+de+VjztOHOoPQIybfpi6u5z3ey9EXlRAhKvpa5+83a1edg1WkDIY2lW7sq 08t3He5XeDeBcTPHgmsphfkfTPgcusSWWVnvy40yua6ZMsmGn2tV6qqftd6SSSq7i3oWyUiU WHewC9+aEyUrvuU4w5RTB+c7XUnWmxX/2dBW7HWWdtuxvXNOVHpN+eyqxyLb84N197TzV2db BO0SXK6ft7flxq+E5F+N+WkNb0VfOzRO2nTwieBzzqjHVVu+/Z1776vVhV1rDO4bsf48vT9P t3yGssWqnNwDL+4r1/Ybl0c3+vimrxDU9ZvT7qsgKK3EUpyRaKjFXFScCABadHhEzwIAAA== X-CMS-MailID: 20210409072736epcas5p4e40bbaec44791395e48537e37d7e379e X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P X-CMS-RootMailID: 20210409072736epcas5p4e40bbaec44791395e48537e37d7e379e 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.34; envelope-from=p.kalghatgi@samsung.com; helo=mailout4.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_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@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) 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 --- -v2: removed extraneous spacing in the comments(Keith)=20 used bitwise operator instead of the modulo operator(Keith) =20 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..a4c4f9d 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 - 1))) >> 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