From patchwork Thu Nov 14 19:55:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 13875588 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BDD0BD6A22C for ; Thu, 14 Nov 2024 19:58:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-ID:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=QQ6dLZTM2tm9BhyH0kaEKG/QfWSqlO/dOMydDacaC2g=; b=LFyo1SpDXsMTZHuREwBFFLIKL4 YZizofbWKbP09SmhraCx300Yx+crUQHPbbCiagJUPkgCph5yTYOirtY9clShemtcIkc/dExFMllhI UhENdrZGGv2v+pjrY9q/aDket+KdaSA/0YlWw307TIrvqh7edOcd8cBAWUKzVGh7b8WpjaAf/zpV4 siWvsyecdR/OTa7+JN3Qajh9+iQ6pMfhYdeqOhqaDGpY2f4mhe531MvuyWtZo3tBBebzMstNqL5TI vuyIvo83E3El6d6reRyTnMncsbJFEnn9V5WXF/nQBEB5N6i5dctB6OHHTH1Fk+vyTQACVCaovblit hHwHidQg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tBfz4-00000000fkg-0JCw; Thu, 14 Nov 2024 19:58:30 +0000 Received: from mail-bn1nam02on2061f.outbound.protection.outlook.com ([2a01:111:f403:2407::61f] helo=NAM02-BN1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tBfwP-00000000f77-0MTb for linux-arm-kernel@lists.infradead.org; Thu, 14 Nov 2024 19:55:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=y/xYYOIo5m6f1tTq/eWASOBxbI0ZiDLh8rhKYIUAfN6MKDG026qrT2EwRr39WF5LBrb8La4D5f7/2V0sUq4Wud0Dg+dffgNmbDL+xUqcNxs9b0PQolLI4hjfEmoYj59G83DIozaS4RMu1duh57du4PDLTnlUJMJ0SS29qh7mxg3YGFaH1tbHsG1QNgbj59VVMSyTtHgiMtCw1VYUuVn6fKvl/lCa/v6jwCdm1zOejJ2tqsFhWYpXsX3mPsqJ/KgklDETePjuG9CEbPDIH8eNbj/LTTDsDDY5xUOoid+tmlnVTwIMJPUx6Vvbn2FYnznFY0XmQZPQorhYQgEF3gYBDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=QQ6dLZTM2tm9BhyH0kaEKG/QfWSqlO/dOMydDacaC2g=; b=gRGW/meF96qKMo3TWXzieQtPnrOiyfmpGxXXg9iUpgobsJtGUBGF2pJBSsdxeyAav77O/PPw+Z4XF4yvOQ8kxsS5IqONrp00SXJbJ9HTzB4OgyvrwI3FPau+7UcX1cgw7533R51YAa0tOXb85HYA7Lof+QwxXUU86opZjEOnMp+/EeGID0aIs5d/+3kbpd1Mu4fosho/7+VIzM7oXqpWVzW+yfHcFckc7Ls5DZ0AlFp4NHieq6XLcSk1r9+d1kzyqf0HWNOVqoLNGJnbsYcNIR4/KQ2LkYjcSKXDKQ8NA7yojg73TxABIZqTUwOeBArU3NxVayl10P8dxM8F//bsvQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; 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=QQ6dLZTM2tm9BhyH0kaEKG/QfWSqlO/dOMydDacaC2g=; b=MkqMn9vO9r7jfIGK7Ms2LSuj5kCmASV+UF98UQi7QmVfK2Rh0xRkxxCfksjkvKVl4fZDSZpLbvvo91eiW1tVAIYB39YK80wHTfCMHYGO7QSWILm6MbSD0Wwv5KJjlEOVSqLio+o4pg2Oi/B9TRobSqPPPYxpU+czEXWnJXBLBLJcgF4WjCRap9Zz2+OBuCCodxtn9pxmh6YbnXlWYYk4N8H6KPzvrYF5KVYops7JGQ3qQXBGX90vzWCTOC6p/tJtRz1UcSCT8dGyf5Kx0Bvm1K/7qK7MYhK4hIgLd3lYs/ikr5k3QZPH6d982YANh0Ciw5xwrj4J4+4LVM272h7s1A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH3PR12MB8659.namprd12.prod.outlook.com (2603:10b6:610:17c::13) by PH7PR12MB6563.namprd12.prod.outlook.com (2603:10b6:510:211::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.28; Thu, 14 Nov 2024 19:55:33 +0000 Received: from CH3PR12MB8659.namprd12.prod.outlook.com ([fe80::6eb6:7d37:7b4b:1732]) by CH3PR12MB8659.namprd12.prod.outlook.com ([fe80::6eb6:7d37:7b4b:1732%4]) with mapi id 15.20.8137.027; Thu, 14 Nov 2024 19:55:33 +0000 From: Jason Gunthorpe To: Lu Baolu , David Woodhouse , iommu@lists.linux.dev, Joerg Roedel , Kevin Tian , linux-arm-kernel@lists.infradead.org, Robin Murphy , Suravee Suthikulpanit , Will Deacon Cc: patches@lists.linux.dev Subject: [PATCH 1/2] iommu: Add ops->domain_alloc_nested() Date: Thu, 14 Nov 2024 15:55:30 -0400 Message-ID: <1-v1-c252ebdeb57b+329-iommu_paging_flags_jgg@nvidia.com> In-Reply-To: <0-v1-c252ebdeb57b+329-iommu_paging_flags_jgg@nvidia.com> References: X-ClientProxiedBy: BN0PR04CA0142.namprd04.prod.outlook.com (2603:10b6:408:ed::27) To CH3PR12MB8659.namprd12.prod.outlook.com (2603:10b6:610:17c::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PR12MB8659:EE_|PH7PR12MB6563:EE_ X-MS-Office365-Filtering-Correlation-Id: f44f4ad3-ad18-4f50-9fa8-08dd04e64c3f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: 6Jx6WatVaiQzJtqosIG1M3wDRn29NOZIV7XQgTNZgJL1lmcxqUgiKPW0Xxp9PnMrA6/H20OvJD8pRgwqs9+tE0DrhwIv/mElTrLALb5xlNAvmOwL7zPid+sUZQX0vmUErizQmvZu4knMiGLB8a1qxJfowXQ9qMF38dEob3kpm25Ultxecb+CgvAQwIkuc3YhHjL8KSoMFvOXEYY549CFlVI5lIEw9oY+IduHnHRebnH9iCwE7OpRw9bU2prBshrGK7neu0+/M68N5lRh1909ULplQnsaSPdsAVETlw6VuCjXLej92BuUGqJPkyh0M4NajpaopLg4U6SvX3u7tcoH6dtHY8Am8to/DhPnC3ZrmTfPwcy6uu+9CIo1In8GHkalL6eelLUcOlpDsjVNRpf7NIxgatc9r7RqAZxiBKPzpTb5xCziPMzfXd4gGDsiXOSJAKTEUvw1pTaopnBRXRwSWe+cGUMXX3oPUq5ZDLFWhMp+bk1FaO/VeGx5DT/XJNLAmS35pHogc6jFMKadZVIV0a5eJ56TF65YZ66SXdPDrWjNQ2hAfIzGKByJR+SvhnTgdXhxw84iBLK1SK+51HMPgXoQyoLUgFWtheIdab8KPmSAgXQ8Zq8Oj3xsyFgDfHsGVWvmtBlFQDW6wfIJcf1q6ObQDFmwij3FAiwRq+IJRC9ymmElS0o7+FQYuMC4ghuViZqaBKsb2Dy6h5D6Rp1e1hyGqNF73dibFYJ9TDRmfZl1yBUJ55POjx1qRNmlju8NpO+F9OPRUIZd3F6eV6lB/xuPZDRTIoYburVdQIBI/jnVRncYyfW6fjv4l02O/LuE7G/Vi5Zetlu7Xa6J1nNAJfwrk1sKsZUu746JP+ks67FasMrFlUDZgcRUIgyWBC6XWGp+kqyiZY0a/RnleRqQ+DbJ9RbZtGDh9/USINxHQUHvHjXOIhLEk80f17rNOFDy1S6TqAwy1yW8/1MGGko+trog3VYth038YtOvi/V7UfFULR4kKHy6x7XFbLPThCpypgViw2hAhk7ov9sPiU+pxKsgXFsKam9AJ/iZRugZQNq12prImZ3Hx0kuBl8cEfC6k0Iv4Upuhv5cJcW222Kc/mZSJfdNReTk+daA9lLHKU+Y8VnSeUc5CLDzJXs5XKzXgsHuqBwmSNs8qABwe4gBNNHZmxJHvjbhHxyTYKBXanLqIFaB/eu+n98EKO0XtKYZpTnSKtNPJnQQmSYPXIBQzlC+Px+Z+7qaVA83fZHRPMTu2WinsMd9zCtXBBiUrVtKTpQ5a4dOnfSxeQiYVL2Y0af6tlE8lc1KuuoYsecUxY6GJm1264hyaVuDrhHwqdp8 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH3PR12MB8659.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /acb3p3QcaHjnfok9yUPzvQaGdPioXZr+D6t5FHi+o4zXdhhkQ2Qu5oB/UUgB0d/xfVmec52xKCwutZyFvoevtZWVKacq38DOKl2KHmoGQauuyF3DfNFz9Z9Uy303DEUp6EImKpn2vv/51lgGdZuUQnka2POTA/iMaaMZSnrWyY1q4u7RJdUyOo8hVziebBAfBRl19neQuLlQCD7wPYJqEJZpfofptJ8ZpjGmYY5GIA5m4zVZJ0oazijcuQuTts+d7b7u15pYmlUm0dls9kkfF1pD/fqAeaC23Nbi+v7hudgF8k0wmL8OqBVwSQFQElz0iwXdS7NOAtv1+kmFqwIxQCV4eWRayHxNhzAvmNQP4IsolMKVDwJIEwYntpTaqJB77cMYzFmi2ZMHxqYX0rWSG3t7noGGtxElguqYBps/Mt4/NWnJ0lhDZnadkpucbhJhztLLaAMXYGKSVEGWHj0S2oJoQznE4e704RzjxnI3cAycikJTwEztAZB7dEO/Be+t8art4T3zW1gM3pOVHIOABUZm8ZUCNS1O1vDHNWvXQ9Wdb5IroiTVYC0/HTND8Hj5ZafyUqL2vZLCxlZ8NR9tgOUcBlNgEinjSxH3ONlwsFJWAIK4mznob1+Xdm3Z7GmR7QOczUoVyIwjOuU/DWVnhmMwhsYzyR0FTBCBJHUtRUeC9M+NWQoxOY7v0bLddv6w4L3jG4mEmu0XthKNUYBIwCrwoGccd6J+lFn8UIrEq2jDFZO+etvMUWDleZhIyO0Q4oCdWTjG1VNiprVgMevvmvSn/LZWTSvlDf+MMYO2jsjY0h+lh5TqGpArqmT0OD+RvUk+RuV7Sh0MsekqAfqVJWxRF0GTC+xADXIrRkGePGMtvp2Vk/b4fhzIH2bCj+mSsyYKX2NKvQdygxVdxXovbdt43ucV1+VR5xcBtaIHUnYApdbFmv1HZsqmUy8Jb8l5iwVtC78xrx4Wlvn3S/qRElrxjavSUUJnyp9UkQdYz+7DXnU2ug7hxG+GAq5u19yAXPfcp+ej6/d3y014hFlfHOrGjFosD7C8CpHPwbr7GbWpGSjuO+EsiyXv9IHiwlRncDdyzfoPaUZThpUwQRJ+VXPxVoVORH9kJjWwjozQYBVz5SJ6iU8Rz+0huokbm8dlHirRdA4ZLLWa+YhtZkp4v67tCZcNbawGzhNEjpMQMQqQ5IZChlvkH89t4VzP17mOwQlhsnG0bp7r0vltyqxKp4630kvt3U5vxxHaHm41Szo4pa2AgRhbcHlsswnXRmNaFBgbBKCzc3V3FQquABS05hpRle3anUmqYI4elvc+1NDB3BPjTmjCifz5r1wMMQFDjAHc9Uwy9qlbzyH4POrKdqzf5KFYvdmRs5A2BLvk709D0Z5XprMCIm7wnkkIiLrK5z3lGMxrGYeCHswTVE9apJvZUmnqL6XJ3bMR3yUapkFrL23y8ls+mD4wU58136WmvgQxgtldx9BK0kXzqfN4HkW8qzOBA19Gx/MzxvBX2q6V89lpzDV45PnN7r2Mc7T9Bj1O19r9+sCNlfrzGS5iJxSk11QrzfsxKu/5/fBtbQ= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f44f4ad3-ad18-4f50-9fa8-08dd04e64c3f X-MS-Exchange-CrossTenant-AuthSource: CH3PR12MB8659.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2024 19:55:32.7152 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QO1IMG+bGxb/DQx+SWBwFO6o9ZdeXnE2dA8BKbDyPQKY55TnD5a8k8AmjQ17tQ/j X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6563 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241114_115545_193586_D0CCF1C8 X-CRM114-Status: GOOD ( 19.33 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org It turns out all the drivers that are using this immediately call into another function, so just make that function directly into the op. This makes paging=NULL for domain_alloc_user and we can remove the argument in the next patch. The function mirrors the similar op in the viommu that allocates a nested domain on top of the viommu's nesting parent. This version supports cases where a viommu is not being used. Signed-off-by: Jason Gunthorpe Reviewed-by: Lu Baolu --- drivers/iommu/intel/iommu.c | 9 +++------ drivers/iommu/intel/iommu.h | 6 ++++-- drivers/iommu/intel/nested.c | 11 +++++++++-- drivers/iommu/iommufd/hw_pagetable.c | 8 ++++---- drivers/iommu/iommufd/selftest.c | 7 ++++--- include/linux/iommu.h | 9 +++++---- 6 files changed, 29 insertions(+), 21 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 527f6f89d8a1f5..6f11a075114f7a 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -3340,12 +3340,8 @@ intel_iommu_domain_alloc_user(struct device *dev, u32 flags, struct iommu_domain *domain; bool first_stage; - /* Must be NESTING domain */ - if (parent) { - if (!nested_supported(iommu) || flags) - return ERR_PTR(-EOPNOTSUPP); - return intel_nested_domain_alloc(parent, user_data); - } + if (parent) + return ERR_PTR(-EOPNOTSUPP); if (flags & (~(IOMMU_HWPT_ALLOC_NEST_PARENT | IOMMU_HWPT_ALLOC_DIRTY_TRACKING @@ -4475,6 +4471,7 @@ const struct iommu_ops intel_iommu_ops = { .domain_alloc_user = intel_iommu_domain_alloc_user, .domain_alloc_sva = intel_svm_domain_alloc, .domain_alloc_paging = intel_iommu_domain_alloc_paging, + .domain_alloc_nested = intel_iommu_domain_alloc_nested, .probe_device = intel_iommu_probe_device, .release_device = intel_iommu_release_device, .get_resv_regions = intel_iommu_get_resv_regions, diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h index 2cca094c259dc1..6ea7bbe26b19d5 100644 --- a/drivers/iommu/intel/iommu.h +++ b/drivers/iommu/intel/iommu.h @@ -1265,8 +1265,10 @@ int __domain_setup_first_level(struct intel_iommu *iommu, int dmar_ir_support(void); void iommu_flush_write_buffer(struct intel_iommu *iommu); -struct iommu_domain *intel_nested_domain_alloc(struct iommu_domain *parent, - const struct iommu_user_data *user_data); +struct iommu_domain * +intel_iommu_domain_alloc_nested(struct device *dev, struct iommu_domain *parent, + u32 flags, + const struct iommu_user_data *user_data); struct device *device_rbtree_find(struct intel_iommu *iommu, u16 rid); enum cache_tag_type { diff --git a/drivers/iommu/intel/nested.c b/drivers/iommu/intel/nested.c index 42c4533a6ea21d..aba92c00b42740 100644 --- a/drivers/iommu/intel/nested.c +++ b/drivers/iommu/intel/nested.c @@ -186,14 +186,21 @@ static const struct iommu_domain_ops intel_nested_domain_ops = { .cache_invalidate_user = intel_nested_cache_invalidate_user, }; -struct iommu_domain *intel_nested_domain_alloc(struct iommu_domain *parent, - const struct iommu_user_data *user_data) +struct iommu_domain * +intel_iommu_domain_alloc_nested(struct device *dev, struct iommu_domain *parent, + u32 flags, + const struct iommu_user_data *user_data) { + struct device_domain_info *info = dev_iommu_priv_get(dev); struct dmar_domain *s2_domain = to_dmar_domain(parent); + struct intel_iommu *iommu = info->iommu; struct iommu_hwpt_vtd_s1 vtd; struct dmar_domain *domain; int ret; + if (!nested_supported(iommu) || flags) + return ERR_PTR(-EOPNOTSUPP); + /* Must be nested domain */ if (user_data->type != IOMMU_HWPT_DATA_VTD_S1) return ERR_PTR(-EOPNOTSUPP); diff --git a/drivers/iommu/iommufd/hw_pagetable.c b/drivers/iommu/iommufd/hw_pagetable.c index 9236e8ca9aa864..ec3c64a8c79633 100644 --- a/drivers/iommu/iommufd/hw_pagetable.c +++ b/drivers/iommu/iommufd/hw_pagetable.c @@ -227,7 +227,7 @@ iommufd_hwpt_nested_alloc(struct iommufd_ctx *ictx, int rc; if ((flags & ~IOMMU_HWPT_FAULT_ID_VALID) || - !user_data->len || !ops->domain_alloc_user) + !user_data->len || !ops->domain_alloc_nested) return ERR_PTR(-EOPNOTSUPP); if (parent->auto_domain || !parent->nest_parent || parent->common.domain->owner != ops) @@ -242,9 +242,9 @@ iommufd_hwpt_nested_alloc(struct iommufd_ctx *ictx, refcount_inc(&parent->common.obj.users); hwpt_nested->parent = parent; - hwpt->domain = ops->domain_alloc_user(idev->dev, - flags & ~IOMMU_HWPT_FAULT_ID_VALID, - parent->common.domain, user_data); + hwpt->domain = ops->domain_alloc_nested( + idev->dev, parent->common.domain, + flags & ~IOMMU_HWPT_FAULT_ID_VALID, user_data); if (IS_ERR(hwpt->domain)) { rc = PTR_ERR(hwpt->domain); hwpt->domain = NULL; diff --git a/drivers/iommu/iommufd/selftest.c b/drivers/iommu/iommufd/selftest.c index 2f9de177dffc79..c58083c3660aee 100644 --- a/drivers/iommu/iommufd/selftest.c +++ b/drivers/iommu/iommufd/selftest.c @@ -356,8 +356,8 @@ __mock_domain_alloc_nested(const struct iommu_user_data *user_data) } static struct iommu_domain * -mock_domain_alloc_nested(struct iommu_domain *parent, u32 flags, - const struct iommu_user_data *user_data) +mock_domain_alloc_nested(struct device *dev, struct iommu_domain *parent, + u32 flags, const struct iommu_user_data *user_data) { struct mock_iommu_domain_nested *mock_nested; struct mock_iommu_domain *mock_parent; @@ -391,7 +391,7 @@ mock_domain_alloc_user(struct device *dev, u32 flags, struct iommu_domain *domain; if (parent) - return mock_domain_alloc_nested(parent, flags, user_data); + return ERR_PTR(-EOPNOTSUPP); if (user_data) return ERR_PTR(-EOPNOTSUPP); @@ -719,6 +719,7 @@ static const struct iommu_ops mock_ops = { .hw_info = mock_domain_hw_info, .domain_alloc_paging = mock_domain_alloc_paging, .domain_alloc_user = mock_domain_alloc_user, + .domain_alloc_nested = mock_domain_alloc_nested, .capable = mock_domain_capable, .device_group = generic_device_group, .probe_device = mock_probe_device, diff --git a/include/linux/iommu.h b/include/linux/iommu.h index d6aaaec3caf462..0472cc1245192d 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -559,15 +559,13 @@ iommu_copy_struct_from_full_user_array(void *kdst, size_t kdst_entry_size, * the caller iommu_domain_alloc() returns. * @domain_alloc_user: Allocate an iommu domain corresponding to the input * parameters as defined in include/uapi/linux/iommufd.h. - * Upon success, if the @user_data is valid and the @parent - * points to a kernel-managed domain, the new domain must be - * IOMMU_DOMAIN_NESTED type; otherwise, the @parent must be - * NULL while the @user_data can be optionally provided, the + * The @user_data can be optionally provided, the * new domain must support __IOMMU_DOMAIN_PAGING. * Upon failure, ERR_PTR must be returned. * @domain_alloc_paging: Allocate an iommu_domain that can be used for * UNMANAGED, DMA, and DMA_FQ domain types. * @domain_alloc_sva: Allocate an iommu_domain for Shared Virtual Addressing. + * @domain_alloc_nested: Allocate an iommu_domain for nested translation. * @probe_device: Add device to iommu driver handling * @release_device: Remove device from iommu driver handling * @probe_finalize: Do final setup work after the device is added to an IOMMU @@ -622,6 +620,9 @@ struct iommu_ops { struct iommu_domain *(*domain_alloc_paging)(struct device *dev); struct iommu_domain *(*domain_alloc_sva)(struct device *dev, struct mm_struct *mm); + struct iommu_domain *(*domain_alloc_nested)( + struct device *dev, struct iommu_domain *parent, u32 flags, + const struct iommu_user_data *user_data); struct iommu_device *(*probe_device)(struct device *dev); void (*release_device)(struct device *dev); From patchwork Thu Nov 14 19:55:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 13875586 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B3A06D6A22C for ; Thu, 14 Nov 2024 19:56:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-ID:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=53/vONpAvsslSbP0976wx0/6dZsZC3vKS7PP3chj9pw=; b=HrhH6+QNhc2vbRx5WT3G1z38m5 oWh7xWv28dq6wYGBiB78AJ0UxlPFVBhiyUz/YwFYHKvTMZV2SNAjBazpJiY35vDeAWmRNHkB5QklB GSyaAlQcRq0Az2tHW39pNBxQKyU8/CiMkuHRysgDDz4sdo1WdskRi9DUuRen7AbVhEReIzUKIQ2jj Lp7fcH1PCeKfk5ahq51YPRaX+zytHGsCvJwsj4UIemV2wWunZ/6SRQ4vOl8UoHlqknTsm2B9KEudB XxVGCezfjoUg0aWxrRTRX3zMC9NDERshnUdWMxlWl7FqTd3GIK7Dps4bjpyfHTah/T6yWp+WXA4mw bMAGmR4g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tBfxH-00000000fLy-3Dur; Thu, 14 Nov 2024 19:56:39 +0000 Received: from mail-bn1nam02on2061f.outbound.protection.outlook.com ([2a01:111:f403:2407::61f] helo=NAM02-BN1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tBfwM-00000000f77-0Bi0 for linux-arm-kernel@lists.infradead.org; Thu, 14 Nov 2024 19:55:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ci2Hni/+BXOhBRooipAMsG1+wxiQC29KK9YT9NBcT/F6bVsJCouak2Q+4gN47hiMuZ0QszkqH65Nl12RA5iJwJ/TyoxrSEHVV1b019rUU3isCd0QS/MW7D0v5mYmgcmKQoLpAi5yMM1iF8Gk/3KSR6Mw7zLgTXTqM6rczGhVWzsSNMni7NOMah9SVJFYZxus1Wam0UF9RgmLbrvGeA6fiiBoSiVG3ql8qaw/EYJcPFd8tYnZ2H8eVY66I8BNtft91EpSCFdN+WNTsebcyDAOlxhQXZ4A/HRvs4fc2lnohK++9U86sBa9vj2QY1gKgu3UpJbTAmzf4oaMX73S9RExvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=53/vONpAvsslSbP0976wx0/6dZsZC3vKS7PP3chj9pw=; b=alihav8oql77yifaqgWrLUTpQu6x84J9N5pTw4ic4QOjTfT43p9N9U5ZJV+RzxZa2VIzgFxWXX/wgoFD5ZxfRxUqjIawGls7aAkibrGFxvrxb1cuj2kyKV4cLqJHbrUANUwiYUSEa9wEp2q7ljbN3gKJJnKIk8bqOLupI3A6dGAiI/x9rkDeziFxe0dFsVkzxGICEf8u8ex8tvuI7Koyec98vuZ0MDIl8d3J0FrlB4DFBgGQPVKw3dvztEZFaYgIqyrD/fHJUcaJ65GoYH2aN8NXvx3b9mCCu2lHus8+hlTn5RO4P9fh51vFgGkq0yiLC1fp4sT/P45rxmkRs63xRw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; 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=53/vONpAvsslSbP0976wx0/6dZsZC3vKS7PP3chj9pw=; b=V+Uiy8BsvX7cACn137Rz8zzT/N1yHpVFzqhHywIQ2zbJHfpJ7HrhGEpUO3J+cIlA39ahe2nsLQrHz4yU4FsV5Ilk0vYnvKzsZkxVDZZj0wLb3KCsup/18hFZV65pslE2JD8e9pfBhkP3QI3+iw5rvY0/+bFhjTQjW0Ijmuu/JheEm/Qyg+FDYOxe9e+FkXdoSIf+B6oTfjEDb5ujTFCSFPm7pnI267FzGRIv4HMitaiHYhYDkYKrp50df9esjgQK2ZYHJaFAXPZvVFcykfa0VaIq6ho185Da5tK3nsq8SQDyBdc6qWvKoAgkTJu7cYe71zKj8LgnOks/Io+vgszycQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH3PR12MB8659.namprd12.prod.outlook.com (2603:10b6:610:17c::13) by PH7PR12MB6563.namprd12.prod.outlook.com (2603:10b6:510:211::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.28; Thu, 14 Nov 2024 19:55:32 +0000 Received: from CH3PR12MB8659.namprd12.prod.outlook.com ([fe80::6eb6:7d37:7b4b:1732]) by CH3PR12MB8659.namprd12.prod.outlook.com ([fe80::6eb6:7d37:7b4b:1732%4]) with mapi id 15.20.8137.027; Thu, 14 Nov 2024 19:55:32 +0000 From: Jason Gunthorpe To: Lu Baolu , David Woodhouse , iommu@lists.linux.dev, Joerg Roedel , Kevin Tian , linux-arm-kernel@lists.infradead.org, Robin Murphy , Suravee Suthikulpanit , Will Deacon Cc: patches@lists.linux.dev Subject: [PATCH 2/2] iommu: Rename ops->domain_alloc_user() to domain_alloc_paging_flags() Date: Thu, 14 Nov 2024 15:55:31 -0400 Message-ID: <2-v1-c252ebdeb57b+329-iommu_paging_flags_jgg@nvidia.com> In-Reply-To: <0-v1-c252ebdeb57b+329-iommu_paging_flags_jgg@nvidia.com> References: X-ClientProxiedBy: BN0PR04CA0074.namprd04.prod.outlook.com (2603:10b6:408:ea::19) To CH3PR12MB8659.namprd12.prod.outlook.com (2603:10b6:610:17c::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PR12MB8659:EE_|PH7PR12MB6563:EE_ X-MS-Office365-Filtering-Correlation-Id: d4ad5ef5-c70b-4e28-1918-08dd04e64c0d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: 1EDGz6lL27iRnmBANO7TbdQmObBU/bnTG+6+/SKnCyr3HqAZ52qNp6tnlrovW0LlPC/fVr7usAxbnTDZy55Xn1gJ73iZWGaNY5Q9RDYwu8PsZ4hr9ZHdlRrm7D8+yhPNilvgtgdyweWDJk9Vo4GFpTx19bZa0zcqbYFU2TiiaspoODKjasb1SSBNu8WAL1kPCgy9rLZbluhIum67jvvBORTGVrJGl+JCJ9ebNWyo1SAlkUAB1O0j1pAVBQecIdKx1bp3EMuTVRhWNfPVro+CPvLWH2FssidlnF1uHeGr7lpx2c94cutlTKUFBLIkGVE67flfxxHhf1/lhqkP2ic7/BBN6QVPJ+pnbQgBh9yAcV2sLD21oUM3suM8lB7ef9gMpiWLVWolFy6TsCBOorbYInqo9kQDvp38peN1nN31X/dOz2sV5ISU5awSQIQko+jHRBOFyZkCz3zG9r/HmR+8r409zET2J9FuXmHsPnE3AawzHt/UGTq9xcuv/MLRpRkXDBjN344EMiVuMJNmD3pts3LDAl/HbembpvXj7CFIUQhNcF6tg5I3hRaFSB0q65OpQItGJFTmoxVi6Jueg7IrdVjTIEN042I6d1m8l22nIGuFZp8Sim2uuax9WjnwW9hBAddliLvAgC8NXAGumGQjh9di3wnpLGXIXJL1jjP86cvRWdUrTJDk44U0ZFaJRdzW0ODpA2/O1dpZdaialWCTKde97Rut5dUCMQUJAOGBCjuyslIaESy5j0gK7M7RvDJB3kyOtSkVblQ24hGHWvejTBrXy2/vA1IPb7qZ8KxAQI16l6Sld1GqTItkKzERa0YNkg90MpvURw5QA7PVowQHl9F5TtsxeEFSqJkp/OGps88eo/GF2cNNZyKZD49kMUDMQJnVcm3gqIZGS8N10yBPqvx66lQF9IHKFnw/oAMp+uReN9wp8h4k053jD53tZ4Kf6TO3JZu8+23/buygXZs/lvzdXs21ZuSqLwHVATDSznqSTQKAcBHFkr4mrTuSjwKtu3PGvkxYPCA/MaPeMKTqUdvmHMohxvoafQN6e2Zqm47jsgOm5n6Vx4rqzTdfhDawKsemi1Y5/9uwq/4Yz0t1u9GfEdOiLfSwbwcpH7Nn9ksofQw9ExOF8W8SOufIM5l75gOjHfFN2nCjz9NK0f/MBjb4BKJQyPkWE00G73L15MrPCGqcJ/LR5FCPoy9QWQqFiaBkKGtOb+TmUjuXL3DqqJf/2fuf0KjbgfP2fHpK2arjFfhnDOP3vAygTXe/AN6TQX6MXn+zMhBM6nVeN5D47PFm2U/A9WACYzAs/28siG49OAv7ajSVNJS+I+1EEtgF X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH3PR12MB8659.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jx/Gk5wMPtk2raYOJgrIB+nVNu1ebl05j8x0JgOUgWwcarrqEI+3bCvX7jl7udCBwtV71FUKvM6ddio9VU7rwAK6eCXkw5OJUQ26ONo3MK7AKaT8T74YPiEWDzEKhgei0m498rRHKJj5kh+f6ejHA8OHZkA1WXPVYsGjuOLxusDKjE6+q49KSLvy93LqeSSC9AmhhYsxJfK8PCmjfm+6as0e1+Fg7fYr2eOBcbEd9GO5fpdTON59QuQd8Rzg0JLxZgQYtWVWK8zwyopdQVO3EdoQdJC71EXoeM9BWQzw4cE/eLTePH39HhxB804BpbYgoGVOldgHSjQEEck3ORD+7ys6dRD9TJSbKUyngyUc84dNFPCCcrYpWW38KMOfQgSuvbzP8eZfyAEWNVyKsaoeJjPufYM+Byc01X/usfgtAbWKRXjCjoy5C8TmVsMOOQWtOMRfxddsT2HRlyjr78pFdTpQ0QRF5CpPI2qBDg0H0lJ9qGJ5x1tc0OYcZtOs179wPDArc/QxM5sBEF2NLBQnnDM1Gv3SIL/rtfHeJ6doAkpV6t8XmmrwdcAqMM/WOEOnfqKlM89Fi2l5fWVduTse01yxmnksnZ6vvLQ/4qkNS/cgmFAqAYTUob2dIvDLWOVlmUMP15EH2dKJ89QCsL5kvBDnUJT0bh32cDMIxhAfawdaMd18Clb6nyIKDXI22WowS8aOzT2bkZHXcJhh6L33k132YifNdoyI/5iK+okV7J7nrSrthR/+HNO6U91uZvG4XO6nFqCqq4dP5B/KJeupleKRtX6c7zwp4wOeCoHOssqXl2yhW8lXcGQrOCJPA/joOiCifTuiSwD17wuBW+alT04lUcJYpJYUjuegF7xpWd/aVsF2iyuR8GBjl7KWMnIs+yrLDM1EAM2hlzZPvTvRI7ZcsDOBvuoZN3mYA0hrJ7fo+jwzRihgJP6VA5bYvU+JEsj0zocWw9XpWi9Xvsvbg8JDk9iN+HUaeIZH/fJ7i7gTbLMf/yffsvAoBgMtFn3UHvZBL1MCAz1+HMdTXyRva8/mOqe1aACX3MSK8/Z7Ynkp0z8XknxHzMz19h5YrDk1vfC465KXGM7i3aVtxJg5RvDGxqxjBCP4k3DMBS68pRL6GOaWysrhR/P5d1JBOgAnsdpRrCUpIMFgGrJ8w5cvKEwjsiyk/P6SFVOPWVaz9ew5YNlQjR972HRhpa4i6NjhayrQ21menY216dE0z/V7ZmOpIpfw5/Pl5xBwXgtjGbt2l2J6nXb+H2ruyQe+4anVdO07uaVdc5UVuEoC7NjjMeeQh7nnvJLPrlRdRbsA2N60oQmEtmLnjt3K9YI32kg7Ri9/6EtZs2SmuF0CGrdJlE1+MP8CtHYplMzqCayXKC2GCxKUHdMivdV+39pdOkVq/QqdLmiTK8rKqhHP3Vsyjmue6Sqfq15+Ebw4vtKII1kQb19Oh9PFNveDByO463xTmUYzmS/jDS6QbFf18G03OHB/hiH49nPPkl5v2FArgl6m3wmW8ZLY8YqamDgvzs9J9P8SW/2PKFXqKhHi30fM/ZMdYpPZphpgqHc0Y96lyO8= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d4ad5ef5-c70b-4e28-1918-08dd04e64c0d X-MS-Exchange-CrossTenant-AuthSource: CH3PR12MB8659.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2024 19:55:32.4014 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sk5kMA5fzJtV/OecIdLRyddR1Hw3JaurzxFuTmEtZwG1BqxyxAFLu52FAUJIcqVb X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6563 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241114_115542_176003_6AB2ABAD X-CRM114-Status: GOOD ( 17.75 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Now that the main domain allocating path is calling this function it doesn't make sense to leave it named _user. Change the name to alloc_paging_flags() to mirror the new iommu_paging_domain_alloc_flags() function. A driver should implement only one of ops->domain_alloc_paging() or ops->domain_alloc_paging_user(). The former is a simpler interface with less boiler plate that the majority of drivers use. The latter is for drivers with a greater feature set (PASID, multiple page table support, advanced iommufd support, nesting, etc). Additional patches will be needed to achieve this. Signed-off-by: Jason Gunthorpe Reviewed-by: Lu Baolu --- drivers/iommu/amd/iommu.c | 9 ++++----- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 9 ++++----- drivers/iommu/intel/iommu.c | 10 +++------- drivers/iommu/iommu.c | 4 ++-- drivers/iommu/iommufd/hw_pagetable.c | 8 ++++---- drivers/iommu/iommufd/selftest.c | 10 +++------- include/linux/iommu.h | 20 ++++++++++++-------- 7 files changed, 32 insertions(+), 38 deletions(-) diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 5ce8e6504ba7ee..3f691e1fd22ce4 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -2407,9 +2407,8 @@ static struct iommu_domain *amd_iommu_domain_alloc(unsigned int type) } static struct iommu_domain * -amd_iommu_domain_alloc_user(struct device *dev, u32 flags, - struct iommu_domain *parent, - const struct iommu_user_data *user_data) +amd_iommu_domain_alloc_paging_flags(struct device *dev, u32 flags, + const struct iommu_user_data *user_data) { unsigned int type = IOMMU_DOMAIN_UNMANAGED; @@ -2420,7 +2419,7 @@ amd_iommu_domain_alloc_user(struct device *dev, u32 flags, if (dev) iommu = get_amd_iommu_from_dev(dev); - if ((flags & ~supported_flags) || parent || user_data) + if ((flags & ~supported_flags) || user_data) return ERR_PTR(-EOPNOTSUPP); /* Allocate domain with v2 page table if IOMMU supports PASID. */ @@ -2884,7 +2883,7 @@ const struct iommu_ops amd_iommu_ops = { .release_domain = &release_domain, .identity_domain = &identity_domain.domain, .domain_alloc = amd_iommu_domain_alloc, - .domain_alloc_user = amd_iommu_domain_alloc_user, + .domain_alloc_paging_flags = amd_iommu_domain_alloc_paging_flags, .domain_alloc_sva = amd_iommu_domain_alloc_sva, .probe_device = amd_iommu_probe_device, .release_device = amd_iommu_release_device, diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c index 04630dbfedd92a..e4ebd9e12ad468 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c @@ -3132,9 +3132,8 @@ static struct iommu_domain arm_smmu_blocked_domain = { }; static struct iommu_domain * -arm_smmu_domain_alloc_user(struct device *dev, u32 flags, - struct iommu_domain *parent, - const struct iommu_user_data *user_data) +arm_smmu_domain_alloc_paging_flags(struct device *dev, u32 flags, + const struct iommu_user_data *user_data) { struct arm_smmu_master *master = dev_iommu_priv_get(dev); const u32 PAGING_FLAGS = IOMMU_HWPT_ALLOC_DIRTY_TRACKING | @@ -3145,7 +3144,7 @@ arm_smmu_domain_alloc_user(struct device *dev, u32 flags, if (flags & ~PAGING_FLAGS) return ERR_PTR(-EOPNOTSUPP); - if (parent || user_data) + if (user_data) return ERR_PTR(-EOPNOTSUPP); if (flags & IOMMU_HWPT_ALLOC_PASID) @@ -3546,7 +3545,7 @@ static struct iommu_ops arm_smmu_ops = { .hw_info = arm_smmu_hw_info, .domain_alloc_paging = arm_smmu_domain_alloc_paging, .domain_alloc_sva = arm_smmu_sva_domain_alloc, - .domain_alloc_user = arm_smmu_domain_alloc_user, + .domain_alloc_paging_flags = arm_smmu_domain_alloc_paging_flags, .probe_device = arm_smmu_probe_device, .release_device = arm_smmu_release_device, .device_group = arm_smmu_device_group, diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 6f11a075114f7a..7d0acb74d5a543 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -3328,9 +3328,8 @@ static struct dmar_domain *paging_domain_alloc(struct device *dev, bool first_st } static struct iommu_domain * -intel_iommu_domain_alloc_user(struct device *dev, u32 flags, - struct iommu_domain *parent, - const struct iommu_user_data *user_data) +intel_iommu_domain_alloc_paging_flags(struct device *dev, u32 flags, + const struct iommu_user_data *user_data) { struct device_domain_info *info = dev_iommu_priv_get(dev); bool dirty_tracking = flags & IOMMU_HWPT_ALLOC_DIRTY_TRACKING; @@ -3340,9 +3339,6 @@ intel_iommu_domain_alloc_user(struct device *dev, u32 flags, struct iommu_domain *domain; bool first_stage; - if (parent) - return ERR_PTR(-EOPNOTSUPP); - if (flags & (~(IOMMU_HWPT_ALLOC_NEST_PARENT | IOMMU_HWPT_ALLOC_DIRTY_TRACKING | IOMMU_HWPT_FAULT_ID_VALID))) @@ -4468,7 +4464,7 @@ const struct iommu_ops intel_iommu_ops = { .identity_domain = &identity_domain, .capable = intel_iommu_capable, .hw_info = intel_iommu_hw_info, - .domain_alloc_user = intel_iommu_domain_alloc_user, + .domain_alloc_paging_flags = intel_iommu_domain_alloc_paging_flags, .domain_alloc_sva = intel_svm_domain_alloc, .domain_alloc_paging = intel_iommu_domain_alloc_paging, .domain_alloc_nested = intel_iommu_domain_alloc_nested, diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 7618e9c65d3fa8..9bc0c74cca3c7e 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -1987,8 +1987,8 @@ __iommu_paging_domain_alloc_flags(struct device *dev, unsigned int type, if (ops->domain_alloc_paging && !flags) domain = ops->domain_alloc_paging(dev); - else if (ops->domain_alloc_user) - domain = ops->domain_alloc_user(dev, flags, NULL, NULL); + else if (ops->domain_alloc_paging_flags) + domain = ops->domain_alloc_paging_flags(dev, flags, NULL); else if (ops->domain_alloc && !flags) domain = ops->domain_alloc(IOMMU_DOMAIN_UNMANAGED); else diff --git a/drivers/iommu/iommufd/hw_pagetable.c b/drivers/iommu/iommufd/hw_pagetable.c index ec3c64a8c79633..ce03c380465154 100644 --- a/drivers/iommu/iommufd/hw_pagetable.c +++ b/drivers/iommu/iommufd/hw_pagetable.c @@ -119,7 +119,7 @@ iommufd_hwpt_paging_alloc(struct iommufd_ctx *ictx, struct iommufd_ioas *ioas, lockdep_assert_held(&ioas->mutex); - if ((flags || user_data) && !ops->domain_alloc_user) + if ((flags || user_data) && !ops->domain_alloc_paging_flags) return ERR_PTR(-EOPNOTSUPP); if (flags & ~valid_flags) return ERR_PTR(-EOPNOTSUPP); @@ -139,9 +139,9 @@ iommufd_hwpt_paging_alloc(struct iommufd_ctx *ictx, struct iommufd_ioas *ioas, hwpt_paging->ioas = ioas; hwpt_paging->nest_parent = flags & IOMMU_HWPT_ALLOC_NEST_PARENT; - if (ops->domain_alloc_user) { - hwpt->domain = ops->domain_alloc_user(idev->dev, flags, NULL, - user_data); + if (ops->domain_alloc_paging_flags) { + hwpt->domain = ops->domain_alloc_paging_flags(idev->dev, flags, + user_data); if (IS_ERR(hwpt->domain)) { rc = PTR_ERR(hwpt->domain); hwpt->domain = NULL; diff --git a/drivers/iommu/iommufd/selftest.c b/drivers/iommu/iommufd/selftest.c index c58083c3660aee..a0de6d6d4e689c 100644 --- a/drivers/iommu/iommufd/selftest.c +++ b/drivers/iommu/iommufd/selftest.c @@ -379,9 +379,8 @@ mock_domain_alloc_nested(struct device *dev, struct iommu_domain *parent, } static struct iommu_domain * -mock_domain_alloc_user(struct device *dev, u32 flags, - struct iommu_domain *parent, - const struct iommu_user_data *user_data) +mock_domain_alloc_paging_flags(struct device *dev, u32 flags, + const struct iommu_user_data *user_data) { bool has_dirty_flag = flags & IOMMU_HWPT_ALLOC_DIRTY_TRACKING; const u32 PAGING_FLAGS = IOMMU_HWPT_ALLOC_DIRTY_TRACKING | @@ -390,9 +389,6 @@ mock_domain_alloc_user(struct device *dev, u32 flags, MOCK_FLAGS_DEVICE_NO_DIRTY; struct iommu_domain *domain; - if (parent) - return ERR_PTR(-EOPNOTSUPP); - if (user_data) return ERR_PTR(-EOPNOTSUPP); if ((flags & ~PAGING_FLAGS) || (has_dirty_flag && no_dirty_ops)) @@ -718,7 +714,7 @@ static const struct iommu_ops mock_ops = { .pgsize_bitmap = MOCK_IO_PAGE_SIZE, .hw_info = mock_domain_hw_info, .domain_alloc_paging = mock_domain_alloc_paging, - .domain_alloc_user = mock_domain_alloc_user, + .domain_alloc_paging_flags = mock_domain_alloc_paging_flags, .domain_alloc_nested = mock_domain_alloc_nested, .capable = mock_domain_capable, .device_group = generic_device_group, diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 0472cc1245192d..1e3308e899969d 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -557,13 +557,17 @@ iommu_copy_struct_from_full_user_array(void *kdst, size_t kdst_entry_size, * @domain_alloc: allocate and return an iommu domain if success. Otherwise * NULL is returned. The domain is not fully initialized until * the caller iommu_domain_alloc() returns. - * @domain_alloc_user: Allocate an iommu domain corresponding to the input - * parameters as defined in include/uapi/linux/iommufd.h. - * The @user_data can be optionally provided, the - * new domain must support __IOMMU_DOMAIN_PAGING. - * Upon failure, ERR_PTR must be returned. + * @domain_alloc_paging_flags: Allocate an iommu domain corresponding to the + * input parameters as defined in + * include/uapi/linux/iommufd.h. The @user_data can be + * optionally provided, the new domain must support + * __IOMMU_DOMAIN_PAGING. Upon failure, ERR_PTR must be + * returned. * @domain_alloc_paging: Allocate an iommu_domain that can be used for - * UNMANAGED, DMA, and DMA_FQ domain types. + * UNMANAGED, DMA, and DMA_FQ domain types. This is the + * same as invoking domain_alloc_paging_flags() with + * @flags=0, @user_data=NULL. A driver should implement + * only one of the two ops. * @domain_alloc_sva: Allocate an iommu_domain for Shared Virtual Addressing. * @domain_alloc_nested: Allocate an iommu_domain for nested translation. * @probe_device: Add device to iommu driver handling @@ -614,8 +618,8 @@ struct iommu_ops { /* Domain allocation and freeing by the iommu driver */ struct iommu_domain *(*domain_alloc)(unsigned iommu_domain_type); - struct iommu_domain *(*domain_alloc_user)( - struct device *dev, u32 flags, struct iommu_domain *parent, + struct iommu_domain *(*domain_alloc_paging_flags)( + struct device *dev, u32 flags, const struct iommu_user_data *user_data); struct iommu_domain *(*domain_alloc_paging)(struct device *dev); struct iommu_domain *(*domain_alloc_sva)(struct device *dev,