Message ID | 1685709712-13752-1-git-send-email-ssengar@linux.microsoft.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp1004501vqr; Fri, 2 Jun 2023 05:54:53 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7umJ219V8GUvPWAIKONWMADCYpGdsg8naT+rV5cl3qtuaGDhJjAxEcefwTFtBm/cvn+ZNS X-Received: by 2002:a17:903:2445:b0:1ad:bc86:851 with SMTP id l5-20020a170903244500b001adbc860851mr1372891pls.45.1685710493199; Fri, 02 Jun 2023 05:54:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685710493; cv=none; d=google.com; s=arc-20160816; b=aYX21JAyYOFLV1WF8aAQWpoPACepcsBoAE1htfBwPiteW1al+Jd/L7tcLQjFuf86RK bx0B+YKWqDJqMy10Qg21OZjiL/5mo6iBa/3AOA4T3xZrkuiuosxuj3bFb5uFCOCNCAmu /nGYyTQ7L3Yved2cW3vKs8ekwHUwqRG5I+UncKDDqtSx9QdJGslSSOrthjYKRUyh+/f2 57ZEF/heN99d++LnizSottMnePA0eF1esqArFao/hXjklFrU9jGhPflSRYKywdx0PNFw sS2WtvJeOhwhhrwsDNx8OvB70DMENWauw04siicOJwMas23pUG6Xv1PBGpkiFdIqomEu PPaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:to:from:dkim-signature :dkim-filter; bh=CYFJLeDTCw3IfeJbOMeEsgxwh59MLlV9KXPjuDvd634=; b=dxCOXItA2ZzXRCVKPQn+jPkozrgq19eH3alDTWxcSwxPDGENgzcAfpZ8v9nILh7/qh ifUJ3KgIudh30/jmmcyosWfnCxHpgC2mZxG90iMBJxzf5zJjL4WRsvGDbymqK7B3b9l3 AF8A+1p/t/PnFTgXw4GqBGMCNujNDziQ9XfhLlNcsKzCLZDHUyJs7yfDivPtSKSUmUu+ L5SLYzQf53KNlupzBbghkEeV2SmHM97P/+q1aXGWV4gTCc4LGLW/KjIOL0hFwIeG91SM A3OFSTQCfxJdRvtsVWrMz/TxWe7dV8hkkD7MlixAkK/39/QRJRxZn4XQhuoeKXt6yHFr ULgQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=QNWh05LZ; 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=linux.microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u8-20020a170902e5c800b001a51c26f601si829275plf.627.2023.06.02.05.54.39; Fri, 02 Jun 2023 05:54:53 -0700 (PDT) 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=@linux.microsoft.com header.s=default header.b=QNWh05LZ; 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=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235397AbjFBMl7 (ORCPT <rfc822;limurcpp@gmail.com> + 99 others); Fri, 2 Jun 2023 08:41:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43942 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234114AbjFBMl5 (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Fri, 2 Jun 2023 08:41:57 -0400 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 022DB13D; Fri, 2 Jun 2023 05:41:57 -0700 (PDT) Received: from linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net (linux.microsoft.com [13.77.154.182]) by linux.microsoft.com (Postfix) with ESMTPSA id 73F1220FCD4F; Fri, 2 Jun 2023 05:41:56 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 73F1220FCD4F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1685709716; bh=CYFJLeDTCw3IfeJbOMeEsgxwh59MLlV9KXPjuDvd634=; h=From:To:Subject:Date:From; b=QNWh05LZTGEW/x9oPwlqDErkIN87ieDHA0LavFn/+ysV5pa9mqnXGeiY9QcALniin thoDpCsIDq4pYx0+uHtHYoCxpyFTSS2icS6cpyTFCW601u+SpVA3C2Sbx/Xa1A6gAJ fzztPhIbkib/hQggouVdJSaT64T1HCwGtFE/2/HE= From: Saurabh Sengar <ssengar@linux.microsoft.com> To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, mikelley@microsoft.com, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org, hpa@zytor.com Subject: [PATCH] x86/hyperv: add noop functions to x86_init mpparse functions Date: Fri, 2 Jun 2023 05:41:52 -0700 Message-Id: <1685709712-13752-1-git-send-email-ssengar@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 X-Spam-Status: No, score=-19.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL, USER_IN_DEF_SPF_WL 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: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1767595566309400956?= X-GMAIL-MSGID: =?utf-8?q?1767595566309400956?= |
Series |
x86/hyperv: add noop functions to x86_init mpparse functions
|
|
Commit Message
Saurabh Singh Sengar
June 2, 2023, 12:41 p.m. UTC
In !ACPI system, there is no way to disable CONFIG_X86_MPPARSE.
When CONFIG_X86_MPPARSE is enabled for VTL2, the kernel will
scan low memory looking for MP tables. Don't allow this, because
low memory is controlled by VTL0 and may contain actual valid
tables for VTL0, which can confuse the VTL2 kernel.
Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com>
---
arch/x86/hyperv/hv_vtl.c | 4 ++++
1 file changed, 4 insertions(+)
Comments
On 6/2/23 05:41, Saurabh Sengar wrote: > In !ACPI system, there is no way to disable CONFIG_X86_MPPARSE. > When CONFIG_X86_MPPARSE is enabled for VTL2, the kernel will > scan low memory looking for MP tables. Don't allow this, because > low memory is controlled by VTL0 and may contain actual valid > tables for VTL0, which can confuse the VTL2 kernel. Do you folks have a writeup of this VTL* setup anywhere? I'm struggling to grasp why VTL0 and VTL2 share the same address space and why they would get confused by each other's data structures. $ grep -r VTL[02] Documentation/ $ Either way, this is way better than the #ifdefs. But the changelog is kinda just gibberish to me.
On Fri, Jun 02, 2023 at 08:33:13AM -0700, Dave Hansen wrote: > On 6/2/23 05:41, Saurabh Sengar wrote: > > In !ACPI system, there is no way to disable CONFIG_X86_MPPARSE. > > When CONFIG_X86_MPPARSE is enabled for VTL2, the kernel will > > scan low memory looking for MP tables. Don't allow this, because > > low memory is controlled by VTL0 and may contain actual valid > > tables for VTL0, which can confuse the VTL2 kernel. > > Do you folks have a writeup of this VTL* setup anywhere? I'm struggling > to grasp why VTL0 and VTL2 share the same address space and why they > would get confused by each other's data structures. Dave, here is some public information about Virtual Trust Level. https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/tlfs/vsm#virtual-trust-level-vtl I wished it could be more detailed. With the proper configuration, VTL2 can see memory from VTL0, but not the other way around. Saurabh can probably give you more information for this particular setup. Thanks, Wei. > > $ grep -r VTL[02] Documentation/ > $ > > Either way, this is way better than the #ifdefs. But the changelog is > kinda just gibberish to me.
On 6/2/23 09:17, Wei Liu wrote: > On Fri, Jun 02, 2023 at 08:33:13AM -0700, Dave Hansen wrote: >> On 6/2/23 05:41, Saurabh Sengar wrote: >>> In !ACPI system, there is no way to disable CONFIG_X86_MPPARSE. >>> When CONFIG_X86_MPPARSE is enabled for VTL2, the kernel will >>> scan low memory looking for MP tables. Don't allow this, because >>> low memory is controlled by VTL0 and may contain actual valid >>> tables for VTL0, which can confuse the VTL2 kernel. >> Do you folks have a writeup of this VTL* setup anywhere? I'm struggling >> to grasp why VTL0 and VTL2 share the same address space and why they >> would get confused by each other's data structures. > Dave, here is some public information about Virtual Trust Level. > > https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/tlfs/vsm#virtual-trust-level-vtl Yeah, I can google too. ;) Seriously, though. I don't need an architecture document. This is like me asking how NMIs work in Linux and someone pointing me to the SDM describing the hardware architecture. I need to know about the Linux implementation of these VTL's, not the overall VTL architecture.
On Fri, Jun 02, 2023 at 05:41:52AM -0700, Saurabh Sengar wrote: > In !ACPI system, there is no way to disable CONFIG_X86_MPPARSE. > When CONFIG_X86_MPPARSE is enabled for VTL2, the kernel will > scan low memory looking for MP tables. Don't allow this, because > low memory is controlled by VTL0 and may contain actual valid > tables for VTL0, which can confuse the VTL2 kernel. > > Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com> > --- > arch/x86/hyperv/hv_vtl.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/arch/x86/hyperv/hv_vtl.c b/arch/x86/hyperv/hv_vtl.c > index 1ba5d3b99b16..ea21d897b5da 100644 > --- a/arch/x86/hyperv/hv_vtl.c > +++ b/arch/x86/hyperv/hv_vtl.c > @@ -23,6 +23,10 @@ void __init hv_vtl_init_platform(void) > x86_init.irqs.pre_vector_init = x86_init_noop; > x86_init.timers.timer_init = x86_init_noop; > > + /* Avoid searching for BIOS MP tables */ > + x86_init.mpparse.find_smp_config = x86_init_noop; > + x86_init.mpparse.get_smp_config = x86_init_uint_noop; > + The code looks fine. Can you expand the commit message a bit so that people who are not familiar with VTL and your setup can understand what's going on? Thanks, Wei. > x86_platform.get_wallclock = get_rtc_noop; > x86_platform.set_wallclock = set_rtc_noop; > x86_platform.get_nmi_reason = hv_get_nmi_reason; > -- > 2.34.1 >
> -----Original Message----- > From: Wei Liu <wei.liu@kernel.org> > Sent: Friday, June 2, 2023 9:53 PM > To: Saurabh Sengar <ssengar@linux.microsoft.com> > Cc: KY Srinivasan <kys@microsoft.com>; Haiyang Zhang > <haiyangz@microsoft.com>; wei.liu@kernel.org; Dexuan Cui > <decui@microsoft.com>; tglx@linutronix.de; mingo@redhat.com; > bp@alien8.de; dave.hansen@linux.intel.com; x86@kernel.org; Michael Kelley > (LINUX) <mikelley@microsoft.com>; linux-kernel@vger.kernel.org; linux- > hyperv@vger.kernel.org; hpa@zytor.com > Subject: [EXTERNAL] Re: [PATCH] x86/hyperv: add noop functions to x86_init > mpparse functions > > On Fri, Jun 02, 2023 at 05:41:52AM -0700, Saurabh Sengar wrote: > > In !ACPI system, there is no way to disable CONFIG_X86_MPPARSE. > > When CONFIG_X86_MPPARSE is enabled for VTL2, the kernel will scan low > > memory looking for MP tables. Don't allow this, because low memory is > > controlled by VTL0 and may contain actual valid tables for VTL0, which > > can confuse the VTL2 kernel. > > > > Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com> > > --- > > arch/x86/hyperv/hv_vtl.c | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/arch/x86/hyperv/hv_vtl.c b/arch/x86/hyperv/hv_vtl.c index > > 1ba5d3b99b16..ea21d897b5da 100644 > > --- a/arch/x86/hyperv/hv_vtl.c > > +++ b/arch/x86/hyperv/hv_vtl.c > > @@ -23,6 +23,10 @@ void __init hv_vtl_init_platform(void) > > x86_init.irqs.pre_vector_init = x86_init_noop; > > x86_init.timers.timer_init = x86_init_noop; > > > > + /* Avoid searching for BIOS MP tables */ > > + x86_init.mpparse.find_smp_config = x86_init_noop; > > + x86_init.mpparse.get_smp_config = x86_init_uint_noop; > > + > > The code looks fine. > > Can you expand the commit message a bit so that people who are not > familiar with VTL and your setup can understand what's going on? Sure, I will add more details in commit message. > > Thanks, > Wei. > > > x86_platform.get_wallclock = get_rtc_noop; > > x86_platform.set_wallclock = set_rtc_noop; > > x86_platform.get_nmi_reason = hv_get_nmi_reason; > > -- > > 2.34.1 > >
diff --git a/arch/x86/hyperv/hv_vtl.c b/arch/x86/hyperv/hv_vtl.c index 1ba5d3b99b16..ea21d897b5da 100644 --- a/arch/x86/hyperv/hv_vtl.c +++ b/arch/x86/hyperv/hv_vtl.c @@ -23,6 +23,10 @@ void __init hv_vtl_init_platform(void) x86_init.irqs.pre_vector_init = x86_init_noop; x86_init.timers.timer_init = x86_init_noop; + /* Avoid searching for BIOS MP tables */ + x86_init.mpparse.find_smp_config = x86_init_noop; + x86_init.mpparse.get_smp_config = x86_init_uint_noop; + x86_platform.get_wallclock = get_rtc_noop; x86_platform.set_wallclock = set_rtc_noop; x86_platform.get_nmi_reason = hv_get_nmi_reason;