Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp633079pxb; Mon, 7 Feb 2022 21:33:55 -0800 (PST) X-Google-Smtp-Source: ABdhPJyPuTxD6bvbRYSkNX6V8j1qPZJpMFOi214Kb2ya93wGCwK5rtmY/PVQsj5VXTwl++DLHeaQ X-Received: by 2002:a17:902:e851:: with SMTP id t17mr239546plg.54.1644298435311; Mon, 07 Feb 2022 21:33:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644298435; cv=none; d=google.com; s=arc-20160816; b=D1lWuMydpD0T0VmNoI7bGK4TOYY+gCZxQxjsp/0a4XbmOG1yDGLnTNaEsfwwRjLGJn MUNNeUcf0lcv7iKhaIwwlw03QfeWOwOSLumiEUZNHS8B/ADfJEvDv5igqa4RAmnIsFxL TeafXzEKIc9ZgzcX4ZL+Fokcau94d4Roa0Lh4FqOGEZ4TzQmfFM/YuJGdyoHGbDNYi5G 3OCBxgktdcebF9G7PvgIyAzmgm+dBGXDRe1rrBanRjLSF4mvL13ZIrK2GTQfXSrWHLZc 1JzRGNkM0W/rGS8T8Xby6XQ/5ieAGwDe/aRiugZjX9jSzn6kF7P8FGlmppeu2Heobuly 1ZVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=HFO7H9KwwOsWfQ5IBlV178vaxLUND8djG2xzzwTUfFg=; b=eIjy1dwthg4/5B/qXHSwwrF6genPwbNUhNNjLP+i3FNuiH9SMexC3PhXN44Wzol24B sc8iD3stWpP+K9fxJqSdYStBrB4J8DS1CUFRIMkpxjEFehIh/mhReGkzHRuIcBdcaL+Q UVUdtpaE1F6d/nsj+XB0GgGWqxqzKAOAEki7OVmSKAH+DWFdPn92x9gAcjtg2AUtXKpi L9WuzqvJULfwgVFb4sNpuLSVQQUGXxeavINi1MGHQihH/BId8QPYU4axEho2Z7K6AHl/ Nob/lvDb8k2G2GqYwVjCMZ7D7kthPO/WyvyvSIrFJwCev/8uPMFdVIgy73QXBBUQXGGK /gRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=RxPGZAVn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n4si1453761pjo.61.2022.02.07.21.33.42; Mon, 07 Feb 2022 21:33:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=RxPGZAVn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242421AbiBHBDm (ORCPT + 99 others); Mon, 7 Feb 2022 20:03:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35624 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245434AbiBGXD3 (ORCPT ); Mon, 7 Feb 2022 18:03:29 -0500 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6ABCEC061A73 for ; Mon, 7 Feb 2022 15:03:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1644275008; x=1675811008; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=905JQ3YZKvuZYu7D1FVJXac593yX75ihm3basE87bLk=; b=RxPGZAVnlTuKDuKMWh4piYMqWy32Ri5PMwox5lQcXvVApO1qKBb1M62d Uf0K3DJlwc5OxdXiUmD9ZhvLie75BiKMN74lWEe8Nfmv9XFb1eb0pgFhA vRTYAlBWKjkR91uMNwMZXI5PeoxxsMGpt7ACpb8ioX1abINi/JBBeMaVc Muq99MJnkwsgo0AgR44fJZDpAqr9kpsXuoA1ZKQY0XWA4RlEqAcIeQXKx Xs8HoR2kXpZsLTUUfZLLilnLAJDxZzqAKq0gK+JDNIV1/dsx4O+V2tN8E jvVFahVyNMay5g4bHiRdo8iZhAhE2wN7e9tZgJ/s5cKXxricvACCFMK6b g==; X-IronPort-AV: E=McAfee;i="6200,9189,10251"; a="229475012" X-IronPort-AV: E=Sophos;i="5.88,351,1635231600"; d="scan'208";a="229475012" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Feb 2022 15:03:04 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,351,1635231600"; d="scan'208";a="540324041" Received: from otcwcpicx3.sc.intel.com ([172.25.55.73]) by orsmga008.jf.intel.com with ESMTP; 07 Feb 2022 15:03:03 -0800 From: Fenghua Yu To: "Thomas Gleixner" , "Dave Hansen" , "Ingo Molnar" , "Borislav Petkov" , "Peter Zijlstra" , "Andy Lutomirski" , "Tony Luck" , "Lu Baolu" , "Joerg Roedel" , Josh Poimboeuf , "Jacob Pan" , "Ashok Raj" , "Ravi V Shankar" Cc: iommu@lists.linux-foundation.org, "x86" , "linux-kernel" , Fenghua Yu Subject: [PATCH v4 04/11] kernel/fork: Initialize mm's PASID Date: Mon, 7 Feb 2022 15:02:47 -0800 Message-Id: <20220207230254.3342514-5-fenghua.yu@intel.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220207230254.3342514-1-fenghua.yu@intel.com> References: <20220207230254.3342514-1-fenghua.yu@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A new mm doesn't have a PASID yet when it's created. Initialize the mm's PASID on fork() or for init_mm to INVALID_IOASID (-1). INIT_PASID (0) is reserved for kernel legacy DMA PASID. It cannot be allocated to a user process. Initializing the process's PASID to 0 may cause confusion that why the process uses the reserved kernel legacy DMA PASID. Initializing the PASID to INVALID_IOASID (-1) explicitly tells the process doesn't have a valid PASID yet. Even though the only user of mm_pasid_init() is in fork.c, define it in as the first of three mm/pasid life cycle functions (init/set/drop) to keep these all together. Suggested-by: Dave Hansen Signed-off-by: Fenghua Yu Reviewed-by: Tony Luck --- v4: - Update the commit message to explain why init pasid to -1 and why define mm_pasid_init() (Thomas) v2: - Change condition to more accurate CONFIG_IOMMU_SVA (Jacob) include/linux/sched/mm.h | 10 ++++++++++ kernel/fork.c | 10 ++-------- mm/init-mm.c | 4 ++++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h index aa5f09ca5bcf..c74d1edbac2f 100644 --- a/include/linux/sched/mm.h +++ b/include/linux/sched/mm.h @@ -8,6 +8,7 @@ #include #include #include +#include /* * Routines for handling mm_structs @@ -433,4 +434,13 @@ static inline void membarrier_update_current_mm(struct mm_struct *next_mm) } #endif +#ifdef CONFIG_IOMMU_SVA +static inline void mm_pasid_init(struct mm_struct *mm) +{ + mm->pasid = INVALID_IOASID; +} +#else +static inline void mm_pasid_init(struct mm_struct *mm) {} +#endif + #endif /* _LINUX_SCHED_MM_H */ diff --git a/kernel/fork.c b/kernel/fork.c index 6ee7551d3bd2..deacd2c17a7f 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -97,6 +97,7 @@ #include #include #include +#include #include #include @@ -1019,13 +1020,6 @@ static void mm_init_owner(struct mm_struct *mm, struct task_struct *p) #endif } -static void mm_init_pasid(struct mm_struct *mm) -{ -#ifdef CONFIG_IOMMU_SVA - mm->pasid = INIT_PASID; -#endif -} - static void mm_init_uprobes_state(struct mm_struct *mm) { #ifdef CONFIG_UPROBES @@ -1054,7 +1048,7 @@ static struct mm_struct *mm_init(struct mm_struct *mm, struct task_struct *p, mm_init_cpumask(mm); mm_init_aio(mm); mm_init_owner(mm, p); - mm_init_pasid(mm); + mm_pasid_init(mm); RCU_INIT_POINTER(mm->exe_file, NULL); mmu_notifier_subscriptions_init(mm); init_tlb_flush_pending(mm); diff --git a/mm/init-mm.c b/mm/init-mm.c index b4a6f38fb51d..fbe7844d0912 100644 --- a/mm/init-mm.c +++ b/mm/init-mm.c @@ -10,6 +10,7 @@ #include #include +#include #include #ifndef INIT_MM_CONTEXT @@ -38,6 +39,9 @@ struct mm_struct init_mm = { .mmlist = LIST_HEAD_INIT(init_mm.mmlist), .user_ns = &init_user_ns, .cpu_bitmap = CPU_BITS_NONE, +#ifdef CONFIG_IOMMU_SVA + .pasid = INVALID_IOASID, +#endif INIT_MM_CONTEXT(init_mm) }; -- 2.35.1