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 11752C3271E for ; Thu, 4 Jul 2024 15:23:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 89E836B0098; Thu, 4 Jul 2024 11:23:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 84D666B0099; Thu, 4 Jul 2024 11:23:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 715756B009A; Thu, 4 Jul 2024 11:23:57 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 504376B0098 for ; Thu, 4 Jul 2024 11:23:57 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id E26B3120F2A for ; Thu, 4 Jul 2024 15:23:56 +0000 (UTC) X-FDA: 82302440472.15.FB3BAC3 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf01.hostedemail.com (Postfix) with ESMTP id E985C4000E for ; Thu, 4 Jul 2024 15:23:54 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf01.hostedemail.com: domain of robin.murphy@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=robin.murphy@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1720106611; 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:in-reply-to:references:references; bh=u+aHfEX8o0rhywophaRE/rYg5Icyqncq4KrEqzyoFgE=; b=UIgFnoeQsNtSzJM2cQc+KjwQO5NUV+p+YYZG4vfd0Xlcw+FS6QiQ97SVLezJkhl4Q5gl9A sG3EmChwC5INqVJAHSYxhoa4pkS1Mu4taC6MSILLN4hjz3tnnULuMQbOw2LdkJP5sEuR0s E5loJStkXsb1jxs2oWoU1V//r2IDF+w= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1720106611; a=rsa-sha256; cv=none; b=d8KZu7rAM6KrPT9VJWVpq8+AmVDg/rgk0HGiMKSlhXKMV+ypZ6RZtVL47iJgxmTl05c8lE dkogaohrqvPqucuuu7pKkU805/0/R2ZoHeLzCGCl9yXKwP3L9ecqj7FaOaFa6xP8RqrTCq dsokS67AhZyqkIU8yauGrpdhV6i8x08= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf01.hostedemail.com: domain of robin.murphy@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=robin.murphy@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id EA206367; Thu, 4 Jul 2024 08:24:18 -0700 (PDT) Received: from [10.1.196.40] (e121345-lin.cambridge.arm.com [10.1.196.40]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2E2F73F766; Thu, 4 Jul 2024 08:23:50 -0700 (PDT) Message-ID: <249ec228-4ffd-4121-bd51-f4a19275fee1@arm.com> Date: Thu, 4 Jul 2024 16:23:47 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH v1 18/18] nvme-pci: use new dma API To: Leon Romanovsky , Jens Axboe , Jason Gunthorpe , Joerg Roedel , Will Deacon , Keith Busch , Christoph Hellwig , "Zeng, Oak" , Chaitanya Kulkarni Cc: Sagi Grimberg , Bjorn Helgaas , Logan Gunthorpe , Yishai Hadas , Shameer Kolothum , Kevin Tian , Alex Williamson , Marek Szyprowski , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , Andrew Morton , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, iommu@lists.linux.dev, linux-nvme@lists.infradead.org, linux-pci@vger.kernel.org, kvm@vger.kernel.org, linux-mm@kvack.org References: <47eb0510b0a6aa52d9f5665d75fa7093dd6af53f.1719909395.git.leon@kernel.org> From: Robin Murphy Content-Language: en-GB In-Reply-To: <47eb0510b0a6aa52d9f5665d75fa7093dd6af53f.1719909395.git.leon@kernel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: E985C4000E X-Stat-Signature: hja5unwoofofepxo1t9nd1hmyfzi89m8 X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1720106634-791367 X-HE-Meta: U2FsdGVkX18zEsDpLWae9ADqIyd1J/Wg0S1KeP99KP8YEXVLoULpAbd8Nh0qMvEPQECpBPwde3hS0fdYYuR48CAirefSh/X56nUz4y+dQ7GXmeqexd+3zc2lYAB9jth2DSpKMgz/1m34Mv0T8GNiKtTLvnhJqF2CkLCQQud9BTFsDJFe0vKoZEmI0udnQweZpDa+URU0klDs99ZsmJ4t3FfKWiloojfGMzWa5gv3HJaQXxJVI7Y1j0oXxBfSh44eTu4DDcnCa6U7CowP8trUH9dfbMFNZcu/WD3pRdokssWTAzGgEXBhDD5ozPNB7g6iIEpB72wlUQq1wiAgLDgg6ijjEaarvsBAHJ9OfwSBXHujF+7LgH1FNynRwve+x6G9zAHs4vp1WhlXXE3DZbGDeAtoiMZdu9Qs+ccoQaDlqsLUvO309CtiuWSkGDoyewsG6g1EGOy+d2yT+wBaijfXV1yGdo0KOrv+aatcBAJhr8GSD8dH8KcTJy43xvV/KnyQy6NhYPBLpUmG3u8cpVAhwoKy12EqYfXi5hC/ejqNAugxw+V9gv1O65a0HBGsLnNnYPQ8UDaCCRjEz/ZxHviBlzRxbq+AKrZ9QbMzQ5alBZ6fZ7hxRqj3gkRECsnLpL1CdYTLQWBHxCp8gTDLrlZOIiqROh9Do8+EaA7+2ahRWaa5KCa5246004fTC6X81ncq0AxaVAHDvE7RbyBHAap+nBvdY/7BaOWJNr5xeBbdcVAhn8aVX0jK2WzmoEfpFnY3RE08zKrJdOpGTOreqkomwIPZNy8fFIc08qwI000YE3vHNpDQLniNnWSwZDKo7nDk3Nc4lOBETp8bLTChOLlPVqynJ3FcERUCr9smpu5JXvKAJYl3szAeaum/gcDhCh5GrvvMYSkmM2aXg16aMoy2dpl1a4H0TeviTNGSuca9W8m+pU77QDBUx00+h9iF6nG9UVVBE6M1IYmCymXSltH urDFuBQu dsgOYXNRUVM4M/8XarHQ0xCmapOfdJZBibawchCYwsYK5RxUXlaxqD8tJdfnYujrKrsSXCpFPgGv38iNYQ8DutM/5Sidf0tb7FH1hR9LrJszyhCJwhaBj7795Dvk6f46jz7Ytayy3Nip1Q8ChZnkAxo2b5w== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On 02/07/2024 10:09 am, Leon Romanovsky wrote: [...] > +static inline dma_addr_t nvme_dma_link_page(struct page *page, > + unsigned int poffset, > + unsigned int len, > + struct nvme_iod *iod) > { > - int i; > - struct scatterlist *sg; > + struct dma_iova_attrs *iova = &iod->dma_map->iova; > + struct dma_iova_state *state = &iod->dma_map->state; > + dma_addr_t dma_addr; > + int ret; > + > + if (iod->dma_map->use_iova) { > + phys_addr_t phys = page_to_phys(page) + poffset; Yeah, there's no way this can possibly work. You can't do the dev_use_swiotlb() check up-front based on some overall DMA operation size, but then build that operation out of arbitrarily small fragments of different physical pages that *could* individually need bouncing to not break coherency. Thanks, Robin. > + > + dma_addr = state->iova->addr + state->range_size; > + ret = dma_link_range(&iod->dma_map->state, phys, len); > + if (ret) > + return DMA_MAPPING_ERROR; > + } else { > + dma_addr = dma_map_page_attrs(iova->dev, page, poffset, len, > + iova->dir, iova->attrs); > + } > + return dma_addr; > +}