From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C42F3C46467 for ; Wed, 11 Jan 2023 10:11:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E0A8C8E0002; Wed, 11 Jan 2023 05:11:34 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DBA0A8E0001; Wed, 11 Jan 2023 05:11:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C5B728E0002; Wed, 11 Jan 2023 05:11:34 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id B80BF8E0001 for ; Wed, 11 Jan 2023 05:11:34 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 8A8C540786 for ; Wed, 11 Jan 2023 10:11:34 +0000 (UTC) X-FDA: 80342101308.11.A22D131 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2047.outbound.protection.outlook.com [40.107.93.47]) by imf02.hostedemail.com (Postfix) with ESMTP id C5C708000C for ; Wed, 11 Jan 2023 10:11:31 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=uDXV4wns; spf=pass (imf02.hostedemail.com: domain of yishaih@nvidia.com designates 40.107.93.47 as permitted sender) smtp.mailfrom=yishaih@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1673431892; a=rsa-sha256; cv=pass; b=s1b75vBBzlPgCr8zte6LF6TEtVWLLfomJwiUxik7JL+pWPzrHFANCmQ7oytmmgUxMm6oPq 6fn7Y+0Tm7gBEArnjSssI09nxEchukaVtc7WJ4o3nUWRyNLqx2cWGz9vcDqk9qkQ/EIZp+ Y8w6Li6UZ2iP3A5+HnKKb9EpbIBJ8l4= ARC-Authentication-Results: i=2; imf02.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=uDXV4wns; spf=pass (imf02.hostedemail.com: domain of yishaih@nvidia.com designates 40.107.93.47 as permitted sender) smtp.mailfrom=yishaih@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1673431892; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=2zjgT4vdkGo4gQu7/4ZRdw/Ox8zBut/9qO68TuHMAIQ=; b=QRkbf2jULhCNvjXvXRpOHrha2MuoT58AswKmFQQxX0EhM9MrdiOqNBk1QTloxLIoASLcAR m96VoTdbfF5Vf7mJ1NCCHq1ORgWsXHcTBHz93I8CqL5Kb17m9/racwHixPEt359euOdS6q Tasg0dsQK84qR/58lsKy6rtnE0FoECA= ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YMhQLXonhqAetESOcnrb/aq/qA5BV8XE78TchX+be25Fj2ROzmRccHkFFkopq3/LyzwBDi3QV1tzKjQ4+wHK64WqW9iT7ZKF44mIFBs8+ptV12iLf2fUeMAz6tEmkCEqAd5NSw20zr0Sn5g9CkS/Wrnq4bYkZbPNFBKpCKNszON7CCqH0QI/xShfiQhrOA8HYAlGsW/SYyL6K+eSHX1mPOfkg+ZSiJ2eW4UMzRnFNdB+D1x7JQV+TwoASMJWX+m5Vvl88rxBYJdh3WqBVM/Pj5YNN6p/fSMC+Hd3bmWBWnYd7NGih8DXKDgWYOtaUtrfRg+jcuKSoZSQUvTRTzwB4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2zjgT4vdkGo4gQu7/4ZRdw/Ox8zBut/9qO68TuHMAIQ=; b=Is3yvyATvcqPfoWht9baSSSxHWenGAY/KtZQLAOFc/PuHFAzxJf0rLM3C9lSUtppfkezQnhrHUxcJmj0AfGbRT0C6txGhh6THq3IdzFslF4i7CIdWvbVAOqGPKS9EgdzYMOl0vSBOe+1WUFOGoNFbO/6ZkGWPPJPjH1uMeMWu1DRIBVn60A/qVymWsDE4I2qQ0baxSEApnwaC0INJUqbnl6syR7f3Y8ZiTuHTK/PEPWbXikNNkyteI3DlUkvuNFpb8MI0IAxKrAh8kY0YqcIleYLyQO5nyaGxuWBwvdF7796v0Kef72Bz+osTyHxrNTsQv99dQ/fDTYmfhMBcrKEtQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2zjgT4vdkGo4gQu7/4ZRdw/Ox8zBut/9qO68TuHMAIQ=; b=uDXV4wnsAKCGHskAHdFmyFD6i+ukiW56MyZJEhhaNfIOsn9sXcFABepqCI5qAh07HwpUFyk1973fMrcmTQZF06HonW0fXtBAbhHYnz6kzbqeIEoTA7He8pOpF8eqtE/Qig/TEG/XXJSagukQ1zEjvnAZOVpPws/vw9l7orAVmlPSz2oO0bvBrpDeFhc2NEAiv3fdKdr6m9Ve07P5fWnofHC4lTvNN5qCVB6gGbU8Y0tYPdm7j3gOd7PJnrfWMEaZxHr7p4Dxt+sY3eDeImklZtwG/oPiCxET8HQzf31V+qCSRV7x8ujv5Cziik3lr5mlQYFwslGflQPQIrTeYwqbIw== Received: from BN8PR16CA0018.namprd16.prod.outlook.com (2603:10b6:408:4c::31) by SA1PR12MB8119.namprd12.prod.outlook.com (2603:10b6:806:337::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.18; Wed, 11 Jan 2023 10:11:29 +0000 Received: from BN8NAM11FT087.eop-nam11.prod.protection.outlook.com (2603:10b6:408:4c:cafe::63) by BN8PR16CA0018.outlook.office365.com (2603:10b6:408:4c::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.18 via Frontend Transport; Wed, 11 Jan 2023 10:11:29 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by BN8NAM11FT087.mail.protection.outlook.com (10.13.177.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.13 via Frontend Transport; Wed, 11 Jan 2023 10:11:28 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Wed, 11 Jan 2023 02:11:24 -0800 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Wed, 11 Jan 2023 02:11:23 -0800 Received: from vdi.nvidia.com (10.127.8.10) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server id 15.2.986.36 via Frontend Transport; Wed, 11 Jan 2023 02:11:20 -0800 From: Yishai Hadas To: , , , , , , , CC: , , , , Subject: [PATCH V1] lib/scatterlist: Fix to calculate the last_pg properly Date: Wed, 11 Jan 2023 12:10:54 +0200 Message-ID: <20230111101054.188136-1-yishaih@nvidia.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN8NAM11FT087:EE_|SA1PR12MB8119:EE_ X-MS-Office365-Filtering-Correlation-Id: 2f57fa33-e1ed-46ae-5b62-08daf3bc34c6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vRzdh97HJ4zjUlpKApHWm/Fx2fM+VHO12hAGIz6qJbXXXhZw9YAKYVp1C+meCr1w5xfgevbumOwA79enYObyjICkpkjqK0lOS4yBUvVvr1438OjgZ1ciKSStYO5zthjRoxJ3UUw6CQKibgV4rpCKJyZ1GcrzHddSoZU7sCLCS+6rqSuyF68ws3qYScDoyHxKYwSRyo7sy1oARD+lwzNxiTrfV3BPjAFREDSOioNsejC58aGM1lyTBWMNAOQ9M/UKgNEzGQm1VQjXAEplGRJXBTEZGjpa1MBgjkuxxKh5C/4G3JR3vXUUxm9j8Ki3VR4EF8+ZUX8jkq8seZButrDV7bcBQ9nUhEd4P3pQbseNoJr0AP2Ea9h/bLonXE7E/k0VBH2C3WM34v8ioF2Fv7Tzr3LaQX56w90PXxDKJB964X3kVjrApS+eK5hEICT7TVXMcH2Q5cCULhNv4OnigrkXzCPkvn5J00DqyOcz6qw4xJUXzEC0wxHDXSd6mulQ/gSgfPXE4ts0ZrG7J1Y1qqbnPNFff2qDFUlYMEEX3G/+9Ri4GsZxuWe5mjqCd7hc/GIBW7BUdbFH53QVU7cZxo4IPGqoTGsKDh94FY5NxN/acqxpIa2Q3wBZtxp3XcVVsuxGP/UGvdRnZ2RusG7HvEouWa61VK72dJYA0DMGE2s422dLgh7n71PZfs1IJlk3S5RKTUntHlBi+ljHYpZmnKud+4mcmqFDk5G5xl8uff76dvxC2Y26LREkIK6PMw69yBMngUE1vz74G7HX7+i5gtE97F9xNRh0zb6ThrVRz3LPaZ7O6+9KEUK8oC8Tzo1HjZnu X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230022)(4636009)(376002)(396003)(346002)(136003)(39860400002)(451199015)(40470700004)(36840700001)(46966006)(7696005)(186003)(5660300002)(26005)(4326008)(40460700003)(966005)(110136005)(54906003)(336012)(8676002)(316002)(70206006)(40480700001)(1076003)(70586007)(2616005)(82310400005)(36756003)(83380400001)(8936002)(86362001)(47076005)(426003)(82740400003)(478600001)(41300700001)(107886003)(6666004)(36860700001)(7636003)(2906002)(356005)(2101003);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jan 2023 10:11:28.9287 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2f57fa33-e1ed-46ae-5b62-08daf3bc34c6 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT087.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8119 X-Rspam-User: X-Rspamd-Queue-Id: C5C708000C X-Rspamd-Server: rspam01 X-Stat-Signature: yzanopj4ushexkjfgkt7zd5w8qrarkrb X-HE-Tag: 1673431891-339663 X-HE-Meta: U2FsdGVkX19b1puEmKwOmDYRerg0Kt5+L96dXShfSOc1g8OJjBcqC7aU2ICjCAKm3eS9Lgm+rgo5zZKO49Pc8w0ip9dssQ1eEfV5/o/KQH1T2/DGPXVwktlNp46el8+ByQ+64sASnr8tBHKM+dwMJRDzOPDNi0CnelMj0Ze+Vel7zb34vDmoVhi1D8f1mtnVrqGxmd3QWC1HOIO7m9F0LRiyZZwhTT2KGu02B6CCgBXa78bdaR1ALmn1olfYdrkhBYf/Bv+imx8PbLBUbLb+Qz6SOAHhhasbWCKy2UW+ldoVMMDI2Qx6De/GZ94HGoEnRke9AsSiQDWYbkYeDyYPJX6DZWbUIzXJNOcL2QiGrGQcQw7UtNuJkSJcJfxpZ2EEFIZBkOcw8imL9x2WeuMm4IAh2pegDpzAcpXeILBTD4D27P5xnKZXV8fldzre3a6tiG4foOf2f5NYO1O2gkleq72cZ+tIyIeYSkNlGwI9IJsbO7vLZiT9laXO1cLtsWx3xc8kEj5nZ3OS/D3VhT8ZwzP+WKPXgnCJ41voI4Cld+ER8FEgtraZWKHmjgyHm8IH9K9CHmDGyTGfL2wTWFnpqh/VblJb+PpC1643X2uNKBsXyZrLxyM0D3yQT3Pne45t3YPU3P7Cm/UlUmjUEusBtFO+lY5uPiMFHsi2b2cHkXniwvPyBrrvpun4E+6h05nBP1krt+PvN73i4XeRi1zH3UA6DiZNnRTopj7QVdc62OH5ExoCrGHBqwuEVkINGrZdsVGbK0uzXN/I3HcHu4XRm9dX0v3b50tbxAmeSCn7l5wEfJouyyYrP7ThnIdR+bu5aoe2rv62UQra/Zv031lrVEAvVQLen+67MqzQru3DYQY8sGyt0Dr0v2JhUd9UVT3c1W+silfzQOV2llu8eCCYv7iiCVhTlQtZidQjhBAYa3aE6eOEwa/VDVDHJFnO+fkOoGxHT5b+LbbqUg/MXg6 1yRcwCQp 2ihDIm5aGGY5AxRM366m7VtbL4pO94yYLlf+3 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000002, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: The last_pg is wrong, it is actually the first page of the last scatterlist element. To get the last page of the last scatterlist element we have to add prv->length. So it is checking mergability against the wrong page, Further, a SG element is not guaranteed to end on a page boundary, so we have to check the sub page location also for merge eligibility. Fix the above by checking physical contiguity based on PFNs, compute the actual last page and then call pages_are_mergable(). Fixes: 1567b49d1a40 ("lib/scatterlist: add check when merging zone device pages") Reported-by: Jason Gunthorpe Signed-off-by: Yishai Hadas --- Changelog: v1: * Rename 'paddr' to 'next_pfn' as it's actually. * Move to use page_to_phys() to clarify the code. * Fix to use (next_pfn - 1) instead of (paddr - PAGE_SIZE). v0: https://lore.kernel.org/lkml/Y7zyyTxdoJulq7OD@casper.infradead.org/T/ lib/scatterlist.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/lib/scatterlist.c b/lib/scatterlist.c index f72aa50c6654..8d7519a8f308 100644 --- a/lib/scatterlist.c +++ b/lib/scatterlist.c @@ -470,22 +470,27 @@ int sg_alloc_append_table_from_pages(struct sg_append_table *sgt_append, return -EOPNOTSUPP; if (sgt_append->prv) { + unsigned long next_pfn = (page_to_phys(sg_page(sgt_append->prv)) + + sgt_append->prv->offset + sgt_append->prv->length) / PAGE_SIZE; + if (WARN_ON(offset)) return -EINVAL; /* Merge contiguous pages into the last SG */ prv_len = sgt_append->prv->length; - last_pg = sg_page(sgt_append->prv); - while (n_pages && pages_are_mergeable(pages[0], last_pg)) { - if (sgt_append->prv->length + PAGE_SIZE > max_segment) - break; - sgt_append->prv->length += PAGE_SIZE; - last_pg = pages[0]; - pages++; - n_pages--; + if (page_to_pfn(pages[0]) == next_pfn) { + last_pg = pfn_to_page(next_pfn - 1); + while (n_pages && pages_are_mergeable(pages[0], last_pg)) { + if (sgt_append->prv->length + PAGE_SIZE > max_segment) + break; + sgt_append->prv->length += PAGE_SIZE; + last_pg = pages[0]; + pages++; + n_pages--; + } + if (!n_pages) + goto out; } - if (!n_pages) - goto out; } /* compute number of contiguous chunks */ -- 2.18.1