Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3024056ybt; Mon, 29 Jun 2020 13:11:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwqE3Fi3d0f4hoG9QfhtzBU/Np3s4NoP7lFULzWaQh2/nfj/jfq5fyojEJov+HMPl4JJ+uw X-Received: by 2002:a17:906:fa13:: with SMTP id lo19mr15213363ejb.213.1593461513720; Mon, 29 Jun 2020 13:11:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593461513; cv=none; d=google.com; s=arc-20160816; b=BASBeehDW7cenY0rGxDxHjnus2OG15uLTGX1SKPTrBizYOOLA8PN2dMvOUAqOxn3ZN QDepj7g6iIq+gB1MglrVbr6/s7hbfWLxoNby3frVeqIaXln3XOAzg/su2w1BENQIohdd y2T3afWxKvn0dnE5gIgH/UtDOJdqq3LqaIACoPSzoByNnrHc7pzCSYIi/M3tNE5jdiIS uUCztA93KpISn3r6sJgRR46RwBW+QeumjI81fAfmk8DuBBnij+G9fanmsdIoDcbu97ky Ot19R9kKOM1cC0CDaqpOUI79I2czNOYbLJLCjYvhItEMkc59MfZSaIrsNY5yv0hnVVfx Lpkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:ironport-sdr; bh=1oaLnFP+iDH9bEJ3N8ZPf7GDe2FFvJi5Y0t2upD5VIg=; b=y/lGIkMQZG6z+MmqtkZ8vpH2C6Qly0w2MzvoiMqaaLjaqth/9u8acRqvyGw1ymGbCC bAldmTq+/tdtgyc6GifThC16Qwwk06jQ4ak+Tqydt0LWA92ZMKVd6AWwJaDFVDT57W1V bnxJnDu7TFdjAZ3YRsIVL4i8AjjPQweR95sWbnhBcGABRRtcMCxWAaB0vYw1fVIdIOoL leo3rjy8XpUxwvT+SscL+AoAVFMmI75WCFi69iZwnk+JYFdQPaPirJj+NPa3TKs/hude nv8f2klVwTe6acwLy6TVFORs80+Zct3yOkrCG2DsbIz1VUhSsL9N9LMH+h8wuAyQbChT Wjvw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=citrix.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id do5si545658ejc.105.2020.06.29.13.11.30; Mon, 29 Jun 2020 13:11:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=citrix.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388962AbgF2UIe (ORCPT + 99 others); Mon, 29 Jun 2020 16:08:34 -0400 Received: from esa1.hc3370-68.iphmx.com ([216.71.145.142]:10847 "EHLO esa1.hc3370-68.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732926AbgF2TaX (ORCPT ); Mon, 29 Jun 2020 15:30:23 -0400 Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: jRfbOdaUpIV5NuTDp9xgStPlFJ7H7FU9MkvbzFpf6SC+gjm1TCq/JlRMLcrC7UJAyIMPw89gJS eVqG7hgGVyCXEhehd/EmuVIEnOji1laX9+U6DlPOHnWFpCDzpSpeyOH0d8zzrcIGvO7xQHwgsP gi2SrcUOyubaHunpUUz+FhFEs966VAB/WiHbNGUCfdnOxx+HefctRE9q9UD7ZO7H7bgwYWaDMm N4lJ50WCn4F60J6BG2F2i+5cvSz64wE5F03LZqxfUBuFeQbFgaruwG+fYamMknztCeLiExj6Jt dMw= X-SBRS: 2.7 X-MesageID: 21469946 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.75,294,1589256000"; d="scan'208";a="21469946" Subject: Re: [PATCH fsgsbase v2 4/4] x86/fsgsbase: Fix Xen PV support To: =?UTF-8?B?SsO8cmdlbiBHcm/Dnw==?= , Andy Lutomirski , CC: Sasha Levin , , "Boris Ostrovsky" , Stefano Stabellini , References: <714d4c04-5907-885f-e23b-baef662f1080@suse.com> From: Andrew Cooper Message-ID: <9740c5ee-9072-b4f6-5b20-b609d42bf8bb@citrix.com> Date: Mon, 29 Jun 2020 12:07:55 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <714d4c04-5907-885f-e23b-baef662f1080@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Content-Language: en-GB X-ClientProxiedBy: AMSPEX02CAS02.citrite.net (10.69.22.113) To AMSPEX02CL02.citrite.net (10.69.22.126) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 29/06/2020 06:17, Jürgen Groß wrote: > On 26.06.20 19:24, Andy Lutomirski wrote: >> On Xen PV, SWAPGS doesn't work.  Teach __rdfsbase_inactive() and >> __wrgsbase_inactive() to use rdmsrl()/wrmsrl() on Xen PV.  The Xen >> pvop code will understand this and issue the correct hypercalls. >> >> Cc: Boris Ostrovsky >> Cc: Juergen Gross >> Cc: Stefano Stabellini >> Cc: xen-devel@lists.xenproject.org >> Signed-off-by: Andy Lutomirski >> --- >>   arch/x86/kernel/process_64.c | 20 ++++++++++++++------ >>   1 file changed, 14 insertions(+), 6 deletions(-) >> >> diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c >> index cb8e37d3acaa..457d02aa10d8 100644 >> --- a/arch/x86/kernel/process_64.c >> +++ b/arch/x86/kernel/process_64.c >> @@ -163,9 +163,13 @@ static noinstr unsigned long >> __rdgsbase_inactive(void) >>         lockdep_assert_irqs_disabled(); >>   -    native_swapgs(); >> -    gsbase = rdgsbase(); >> -    native_swapgs(); >> +    if (!static_cpu_has(X86_FEATURE_XENPV)) { >> +        native_swapgs(); >> +        gsbase = rdgsbase(); >> +        native_swapgs(); >> +    } else { >> +        rdmsrl(MSR_KERNEL_GS_BASE, gsbase); >> +    } >>         return gsbase; >>   } >> @@ -182,9 +186,13 @@ static noinstr void __wrgsbase_inactive(unsigned >> long gsbase) >>   { >>       lockdep_assert_irqs_disabled(); >>   -    native_swapgs(); >> -    wrgsbase(gsbase); >> -    native_swapgs(); >> +    if (!static_cpu_has(X86_FEATURE_XENPV)) { >> +        native_swapgs(); >> +        wrgsbase(gsbase); >> +        native_swapgs(); >> +    } else { >> +        wrmsrl(MSR_KERNEL_GS_BASE, gsbase); >> +    } >>   } >>     /* >> > > Another possibility would be to just do (I'm fine either way): > > diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c > index acc49fa6a097..b78dd373adbf 100644 > --- a/arch/x86/xen/enlighten_pv.c > +++ b/arch/x86/xen/enlighten_pv.c > @@ -318,6 +318,8 @@ static void __init xen_init_capabilities(void) >          setup_clear_cpu_cap(X86_FEATURE_XSAVE); >          setup_clear_cpu_cap(X86_FEATURE_OSXSAVE); >      } > + > +    setup_clear_cpu_cap(X86_FEATURE_FSGSBASE); That will stop both userspace and Xen (side effect of the guest kernel's CR4 choice) from using the instructions. Even when the kernel is using the paravirt fastpath, its still Xen actually taking the hit.  MSR_{FS,GS}_BASE/SHADOW are thousands of cycles to access, whereas {RD,WR}{FS,GS}BASE are a handful. ~Andrew