From patchwork Mon Feb 5 12:02:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gowans, James" X-Patchwork-Id: 13545363 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 7274AC48298 for ; Mon, 5 Feb 2024 12:06:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 033876B0099; Mon, 5 Feb 2024 07:06:09 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EFD6C8D0001; Mon, 5 Feb 2024 07:06:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D76D96B00A8; Mon, 5 Feb 2024 07:06:08 -0500 (EST) 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 C7F4A6B0099 for ; Mon, 5 Feb 2024 07:06:08 -0500 (EST) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 82FBF1602BB for ; Mon, 5 Feb 2024 12:06:08 +0000 (UTC) X-FDA: 81757622016.07.ABC0B2A Received: from smtp-fw-52003.amazon.com (smtp-fw-52003.amazon.com [52.119.213.152]) by imf04.hostedemail.com (Postfix) with ESMTP id 906164000A for ; Mon, 5 Feb 2024 12:06:06 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=amazon.com header.s=amazon201209 header.b=EfUur+1L; dmarc=pass (policy=quarantine) header.from=amazon.com; spf=pass (imf04.hostedemail.com: domain of "prvs=75897cb1d=jgowans@amazon.com" designates 52.119.213.152 as permitted sender) smtp.mailfrom="prvs=75897cb1d=jgowans@amazon.com" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1707134766; 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:dkim-signature; bh=nHBURAsv2kVj18uGoBS/ynF5eAKuZbHIuIE7fti0DT8=; b=y6mhB2mvK9mc+z0JkKLVj4sCCeavFrM3bduhhPJq46Pdo20FtJvz4ytf63H0MAr2M7YHMa K5xSbabf9FX4+OLR4ZdUyfe0GjkUaNoMQUjoL+GwhLZSKeGn75P60pagPLEDsPJApbtRmt CVF96mDm1TEZKEIuOJg9+4e/2jqxfBM= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=amazon.com header.s=amazon201209 header.b=EfUur+1L; dmarc=pass (policy=quarantine) header.from=amazon.com; spf=pass (imf04.hostedemail.com: domain of "prvs=75897cb1d=jgowans@amazon.com" designates 52.119.213.152 as permitted sender) smtp.mailfrom="prvs=75897cb1d=jgowans@amazon.com" ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1707134766; a=rsa-sha256; cv=none; b=MUaYzFyf4KEaEVBWeNdMVzaWXg46IG16HrR4w44McMRMWRTXLazsZ6dwwWF/GiJtlBB23p MNSyYSUTVpK9sYF/VAS8MMLWobVGmn/rcR1blGjMQqdq8apet4VJalVbEeursDvy4xZiBz 6Ca+1PDDcSTd8ix1W8htBKWb9u1/D0A= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1707134767; x=1738670767; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nHBURAsv2kVj18uGoBS/ynF5eAKuZbHIuIE7fti0DT8=; b=EfUur+1LCuHheRnPXNvIOZNyPin/p/li8S7jW+JZY+sTktzI1YNslElN +4HM6kxBDsI6IIqWpDqJsnQX4n1DnSExGX9V9eMYpoWWL6euAv69Sj7D8 np16/KTe3oIEOlZUuck2xFV8FRGRB97HARnSHVydp0W+E9zCnvKLrfLhm I=; X-IronPort-AV: E=Sophos;i="6.05,245,1701129600"; d="scan'208";a="635764854" Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO smtpout.prod.us-west-2.prod.farcaster.email.amazon.dev) ([10.43.8.6]) by smtp-border-fw-52003.iad7.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Feb 2024 12:06:02 +0000 Received: from EX19MTAEUA002.ant.amazon.com [10.0.43.254:50504] by smtpin.naws.eu-west-1.prod.farcaster.email.amazon.dev [10.0.28.192:2525] with esmtp (Farcaster) id a892883c-e384-427e-8387-b1c5e5820895; Mon, 5 Feb 2024 12:05:50 +0000 (UTC) X-Farcaster-Flow-ID: a892883c-e384-427e-8387-b1c5e5820895 Received: from EX19D014EUC004.ant.amazon.com (10.252.51.182) by EX19MTAEUA002.ant.amazon.com (10.252.50.124) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 5 Feb 2024 12:05:49 +0000 Received: from dev-dsk-jgowans-1a-a3faec1f.eu-west-1.amazon.com (172.19.112.191) by EX19D014EUC004.ant.amazon.com (10.252.51.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 5 Feb 2024 12:05:43 +0000 From: James Gowans To: CC: Eric Biederman , , "Joerg Roedel" , Will Deacon , , Alexander Viro , "Christian Brauner" , , Paolo Bonzini , Sean Christopherson , , Andrew Morton , , Alexander Graf , David Woodhouse , "Jan H . Schoenherr" , Usama Arif , Anthony Yznaga , Stanislav Kinsburskii , , , Subject: [RFC 15/18] pkernfs: register device memory for IOMMU domain pgtables Date: Mon, 5 Feb 2024 12:02:00 +0000 Message-ID: <20240205120203.60312-16-jgowans@amazon.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240205120203.60312-1-jgowans@amazon.com> References: <20240205120203.60312-1-jgowans@amazon.com> MIME-Version: 1.0 X-Originating-IP: [172.19.112.191] X-ClientProxiedBy: EX19D042UWB002.ant.amazon.com (10.13.139.175) To EX19D014EUC004.ant.amazon.com (10.252.51.182) X-Rspam-User: X-Stat-Signature: c4c5wumfb18x34wbmikqoixhfmox9363 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 906164000A X-HE-Tag: 1707134766-91815 X-HE-Meta: U2FsdGVkX1+R2NtFP+9crpRBQRQzAwCblpgkpQcPVA2QDbLn/SOsubEel7Nn9DdYnySvmhiOcbK8ur/ikad/NVAv7zZGA1VQuImDTYAynFT+XT34adV+9abn9unnWzFATWF6fTClEJa/lpVXeS3Lgdt4UWnAmFCWyQpuY2d7Q+xm8aRQNdqjZeWuNd6s2zvG82F5sDo0rq484cH5rNAsu7g536ZvaYxCpLOwILiWjdeR5oOTwis8pSLqlcSxtVxlQ1HqdVYeFGWWlYpbwBL2vPb3ha/Hp1xZOZuOjYx1u0xIhfVn/m2xlOjrM6Gy6JaeflkqwT34tpN9zve4jA0KQAHGR14vBFOgg3o0tcMe/5IZ3ziSz2eHUSa13CnRtpMrhHLePKtczEmm9l+TvP3hRfVKhh9+m0aLir1pfXDTIDZlM4K90nNJ02YdxPKnT24bxE63R/1OSFXONgyGVF0JzLrTAvJqco8Jsl8YR3p1V+tCRLkB+NfHkcMQWyWvDFbuBqLS+idCuGczvJqg8WklT4XOwl7mIX5upEjytMoXfCLy8Rktl1xwifhXTIrX43bpba/tYw1D/YQ2AU3DxzmC3rJRG8ZOCFH3EqSFVZy4jPnBvJa0j+vjcwKeW9XY4NWwZCoiRZp5Ovmd2IfSkrBj4feKCrS69cw06TlBfQfOydqlJ3eB7xRkAy8B8sD/xJn/uCizUfd5FnzSYf4afafXRJnQiB1uvrN4CAiZMkJYeKX1oRBERDfarZUH2KzAP1PhkL5Tk8TljLQcAH7mqFt74vfLJAMS6YGNXA3/FLrii8kpBlwb1+uWXL1Zp3vwWFI8pi/BiTHIOzrSFfAqpTDTkkjCZjYfTEvsLSmqDm6dbh6qk3yOLrJkRbTXeKBGeexOIWME4GLulq9JUy+mnM9n3v4x2tyZSHS0MBYtWgxeOCzInskC7jcs9lV8NSQ1dvy2/XXQxVV1z+FZ5YyvtMN 6dWS80vN tufMcV9X3zeRTA3TNDaF9H8GVshlTa8X6JjdR8DzlVs7YpQJZaKi+FeTAUiOFlyGxgGl93a2QGjMAY6yaTS5HJMYeYzgVKTDXja5qhF7zllArljdB0tkSlIQw32Q4VkclinBKDGJtna2Hi3vRndOEQ7fWNgY5fieBGYuZRXa4IDpPX5HFvrGrE3mGiqNF3BOTl3AsMOGeu4v5ma0fWn8btN7c3A5aw+jfK9xiEFfMKVn6tScCLfxcCHLjyuw9vdg4zgAZxuxWQldTrvA/8Jkl7npvyhVHwgQAOVETxTB0dh9ikyWaiuC1lEQT28WtXbxz0+J5j62N6+KuOVvB0ByooUGXDURTwGU1ETre1YN23XzHk0RN7JWfpdSdUDD9zka0hcJ6+7t+QAMnf0jM6JCau/+CamX4W8wRNtpdY0qqcX8c/rFpGfAZpFJwHeNXTKRI4jSSlVJRqZ978WZWeyz32Ck4XCcXBrX1DGY9Q9dO6W2OYzbItM8yi5HAvrCuQtERJQk8qoud9Bxp4XxFYPa5TKxnmdRd1ybhbAxbIE0litblNw8= 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: Similarly to the root/context pgtables, the IOMMU driver also does phys_to_virt when walking the domain pgtables. To make this work properly the physical memory needs to be mapped in at the correct place in the direct map. Register a memory device to support this. The alternative would be to wrap all of the phys_to_virt functions in something which is pkernfs aware. --- fs/pkernfs/iommu.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/fs/pkernfs/iommu.c b/fs/pkernfs/iommu.c index 5d0b256e7dd8..073b9dd48237 100644 --- a/fs/pkernfs/iommu.c +++ b/fs/pkernfs/iommu.c @@ -9,6 +9,7 @@ void pkernfs_get_region_for_ppts(struct file *ppts, struct pkernfs_region *pkern struct pkernfs_inode *pkernfs_inode; unsigned long *mappings_block_vaddr; unsigned long inode_idx; + int rc; /* * For a pkernfs region block, the "mappings_block" field is still @@ -22,7 +23,20 @@ void pkernfs_get_region_for_ppts(struct file *ppts, struct pkernfs_region *pkern mappings_block_vaddr = (unsigned long *)pkernfs_addr_for_block(NULL, pkernfs_inode->mappings_block); set_bit(0, mappings_block_vaddr); - pkernfs_region->vaddr = mappings_block_vaddr; + + dev_set_name(&pkernfs_region->dev, "vfio-ppt-%s", pkernfs_inode->filename); + rc = device_register(&pkernfs_region->dev); + if (rc) + pr_err("device_register failed: %i\n", rc); + + pkernfs_region->pgmap.range.start = pkernfs_base + + (pkernfs_inode->mappings_block * PMD_SIZE); + pkernfs_region->pgmap.range.end = + pkernfs_region->pgmap.range.start + PMD_SIZE - 1; + pkernfs_region->pgmap.nr_range = 1; + pkernfs_region->pgmap.type = MEMORY_DEVICE_GENERIC; + pkernfs_region->vaddr = + devm_memremap_pages(&pkernfs_region->dev, &pkernfs_region->pgmap); pkernfs_region->paddr = pkernfs_base + (pkernfs_inode->mappings_block * (2 << 20)); } void pkernfs_alloc_iommu_root_pgtables(struct pkernfs_region *pkernfs_region)