Received: by 2002:a89:288:0:b0:1f7:eeee:6653 with SMTP id j8csp325816lqh; Mon, 6 May 2024 23:20:36 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVStI0v2zaU/GsV/Ua0LYAt15OUWWIu42GQZS+z6C/kxvmDS8mEKWOjFI93GKIvlnfJvbTfsdJCWA6qDKN2XZnQVVo+eBGeVesoO5wKPw== X-Google-Smtp-Source: AGHT+IHIRSHzMTkYcW+0w+D/+a+eS3RSXHKHk9eSiXfy7NQg8kzSW2kj3OIg8GEA6KXjHvueqUTR X-Received: by 2002:a17:90a:6fc4:b0:2b3:28df:91e1 with SMTP id e62-20020a17090a6fc400b002b328df91e1mr9882030pjk.10.1715062835875; Mon, 06 May 2024 23:20:35 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1715062835; cv=pass; d=google.com; s=arc-20160816; b=o5Tzg/Iv7Da8wMF/E3k3dNtdcVq2aWfQpJRquDq12l/X7IW1A4ww8GxHhAYbPFfKoM LtIG+NC1R3CxVBabBFg3mBvFzDL4f2DS5JhnD8yCrVQik162o5wfZrsGe2y7qVRfhJmv xQ/5wk1aY5S/2Ep6UcZ4HlYQnpDIWAjctVBOv2sw+0/HK0IxJ/SAIbnV6qOEOLltAVM4 ksuV3a/g8hI0FprNnKTzMNB/CcFgyKo447+NRjruRSqNmFUe0zMfhF5IX6SIBYiqWAOP Whjco9yYt0uY1FTsjWbBMHtZ27ga/9KcT92BinNTGXSRcHC+ZnGx3QLT/48DFt+ygI7g B6eg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-id:precedence:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=BnB7fVxnvVNQRJHCuRjmn4O2UNX3UGmbcX0RdYtfdvE=; fh=M22/JH5uftwq/Q82uiLEqedpik0oe3FUcPi7MW7AWgg=; b=Y/qs7f1c3yg21wN2GGu6EWwf9Uzip+wqSUcD2S0gY6nHqYwgaJ7glX4X5gVNwGQGrt oL44EZy4aSOsCCUB/SjbTYzhEnzHrlH4XxyVIidJjuC4WtzJs4qqCeoFLnaHQHjPrdeu pmPfkkLTG7RpMYaVCUOs9zVkYa/PfSLMzj4rtLaW3Y7PehlEwbaMyBZZVR4KqhL5H2TO NHTms7D2zA/ruTpEhfxx9foAq7fDFLtFJUomO9FMg/QX+NbThh4zePZGQOtVEPCGoupL 4CfPshVdq/Kgmu+O2960LuJsx9CZy9vl6g1CbHuzMvwqtKEgq0iV6PhiyxeeAainYKcj cu0A==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Z1SjWqrr; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-170734-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-170734-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id n3-20020a17090ade8300b002b5002ad0a1si4734327pjv.4.2024.05.06.23.20.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 May 2024 23:20:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-170734-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Z1SjWqrr; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-170734-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-170734-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 8A2C7B22665 for ; Tue, 7 May 2024 06:20:29 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id EDC3070CDA; Tue, 7 May 2024 06:20:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Z1SjWqrr" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C10CB6F09C; Tue, 7 May 2024 06:20:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.20 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715062818; cv=none; b=r05XGI+aLwsZ4KtOVHgSqBqjH7ckd2u2a3x6kELqVLC2MH7gfSH+Lz3IRX3WkVEX5Q+MRl2JKYrZ94oFRmgkNUn8wugw7kXnM5bPN45en/RfMnh1woUlvgeBnk/GJhzCcHcA8uQGpdsd6PAS9d3QZrmwgg90kK/0CSbCHGVkaWo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715062818; c=relaxed/simple; bh=mSaRASfGQY8AR8D1WEG7ksj0ddXO2afJXERqBKb8+K0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=tIwV9px0nP5RWYQ/O7mBmAJ85xZBOASCgpOJzvv35fITi+OEX7Z+bpjlSjVtT5+9lOEQklUsXbClwdUWtRAzL930P87SlpkOeKow0/fYUCnX4MqiqxPtRJrBLw/EAE+zLan+MVxnfws6hSnn1jdyHj2r/MEfnNZLjMmwZQZdq7A= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Z1SjWqrr; arc=none smtp.client-ip=198.175.65.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1715062817; x=1746598817; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=mSaRASfGQY8AR8D1WEG7ksj0ddXO2afJXERqBKb8+K0=; b=Z1SjWqrr1/J7A/7jDUahemLkC4I9IRYgakWRj3bLTmumGcgOPXxyqUEm ey8swK5yIDJhExjxFY69xIJgBl4cijsvn1qz99g++9CJ/R4MXDuDQP9rX wjWAN6Qfla4D0j3l/C48ZwuPBX3mf91D2VPekONMDZ2MY24GVK5OCJnp7 vlgKRjUScRtCZ5FYYwyxOgR0zT/btVG0oIunu2PSUZkCULgGOEmGadcid ARBcJPhfiZ6575q/yBEUqJaiWHgyz2SkttoRg7AoSz1PEyybnbsrPFG3L 7vneJrELgAyB0BTwtkWMjZBzQJ/GJQ+Gp8G6swqcTVv5oL9SRZsgukV4H A==; X-CSE-ConnectionGUID: Gaxhuf2xRfiUsFeVVZXZsQ== X-CSE-MsgGUID: ascVcqElTJqtOkhkLuI+mw== X-IronPort-AV: E=McAfee;i="6600,9927,11065"; a="10672818" X-IronPort-AV: E=Sophos;i="6.07,260,1708416000"; d="scan'208";a="10672818" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 May 2024 23:20:17 -0700 X-CSE-ConnectionGUID: mo9MOEQOR7OgE5r5/VzEQg== X-CSE-MsgGUID: 03sqDDM8Sde46PMnyPlv4w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,260,1708416000"; d="scan'208";a="33081907" Received: from yzhao56-desk.sh.intel.com ([10.239.159.62]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 May 2024 23:20:11 -0700 From: Yan Zhao To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org, alex.williamson@redhat.com, jgg@nvidia.com, kevin.tian@intel.com Cc: iommu@lists.linux.dev, pbonzini@redhat.com, seanjc@google.com, dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, hpa@zytor.com, corbet@lwn.net, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, baolu.lu@linux.intel.com, yi.l.liu@intel.com, Yan Zhao Subject: [PATCH 1/5] x86/pat: Let pat_pfn_immune_to_uc_mtrr() check MTRR for untracked PAT range Date: Tue, 7 May 2024 14:19:24 +0800 Message-Id: <20240507061924.20251-1-yan.y.zhao@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20240507061802.20184-1-yan.y.zhao@intel.com> References: <20240507061802.20184-1-yan.y.zhao@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Let pat_pfn_immune_to_uc_mtrr() check MTRR type for PFNs in untracked PAT range. pat_pfn_immune_to_uc_mtrr() is used by KVM to distinguish MMIO PFNs and give them UC memory type in the EPT page tables. When pat_pfn_immune_to_uc_mtrr() identifies a PFN as having a PAT type of UC/WC/UC-, it indicates that the PFN should be accessed using an uncacheable memory type. Consequently, KVM maps it with UC in the EPT to ensure that the guest's memory access is uncacheable. Internally, pat_pfn_immune_to_uc_mtrr() utilizes lookup_memtype() to determine PAT type for a PFN. For a PFN outside untracked PAT range, the returned PAT type is either - The type set by memtype_reserve() (which, in turn, calls pat_x_mtrr_type() to adjust the requested type to UC- if the requested type is WB but the MTRR type does not match WB), - Or UC-, if memtype_reserve() has not yet been invoked for this PFN. However, lookup_memtype() defaults to returning WB for PFNs within the untracked PAT range, regardless of their actual MTRR type. This behavior could lead KVM to misclassify the PFN as non-MMIO, permitting cacheable guest access. Such access might result in MCE on certain platforms, (e.g. clflush on VGA range (0xA0000-0xBFFFF) triggers MCE on some platforms). Hence, invoke pat_x_mtrr_type() for PFNs within the untracked PAT range so as to take MTRR type into account to mitigate potential MCEs. Fixes: b8d7044bcff7 ("x86/mm: add a function to check if a pfn is UC/UC-/WC") Cc: Kevin Tian Signed-off-by: Yan Zhao --- arch/x86/mm/pat/memtype.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/arch/x86/mm/pat/memtype.c b/arch/x86/mm/pat/memtype.c index 36b603d0cdde..e85e8c5737ad 100644 --- a/arch/x86/mm/pat/memtype.c +++ b/arch/x86/mm/pat/memtype.c @@ -705,7 +705,17 @@ static enum page_cache_mode lookup_memtype(u64 paddr) */ bool pat_pfn_immune_to_uc_mtrr(unsigned long pfn) { - enum page_cache_mode cm = lookup_memtype(PFN_PHYS(pfn)); + u64 paddr = PFN_PHYS(pfn); + enum page_cache_mode cm; + + /* + * Check MTRR type for untracked pat range since lookup_memtype() always + * returns WB for this range. + */ + if (x86_platform.is_untracked_pat_range(paddr, paddr + PAGE_SIZE)) + cm = pat_x_mtrr_type(paddr, paddr + PAGE_SIZE, _PAGE_CACHE_MODE_WB); + else + cm = lookup_memtype(paddr); return cm == _PAGE_CACHE_MODE_UC || cm == _PAGE_CACHE_MODE_UC_MINUS || -- 2.17.1