[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/3] x86: allow Kconfig control over psABI level


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Wed, 12 Jul 2023 14:33:49 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=rtLOHvDW3yXb0XGX8XzAuCLdaHStzU+kOEDq0XjqWuA=; b=I4fKpzesTseIoyK38wJ4GmMgVt7S8m0EN1FiBcaGCfkrdme32hxC16SxWzVC52T2Pw0Eb6HwKNG+3PSnZqfGuHD1EieoiePMnccfRG2epW0VCbK+OA3wMSwCP04bk62ZmFc1U04dMZjmSk/4okQ/OkPwRBpfvB28RfEt62p+rN/X53Rx74z407JwymWHE9rvexKewdA1o6rpTMFn/mNgR24ez2kB2kIR/Lj+HqbIbfKLEaUSj/kkGVoq6wMTzeEyLy9qw9xxkfHW4URJhV4Oz+op9aM/LJCnzggAeOdekElklz8NeG43JOSgX8p2t7AwRy84oVCrgiFQEu16XgOLBg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HjkcbXJKpkJgADoQrPWMuRUJjgUDSQTxUcVZCAfFcSAioOvD0DXcSGPkki6dkfmixbttxclxA+NcxJDtkluo64pAT7v1eV1Zj4Rs9pswk0n84Wbvlq1d7FyhqWTTSWMSqXEibRnal1OMI21kcJj0lEhrPn+xdpQZcgbTGbdNLHwRLaNL5vSNx0D/N4r0vDsBUHYdIiJfdTQO37ZKuT3siNBp9EsA7JWUK7uCzaMccy3I64mk1Z9vzSwYxfz9LKZnpAk5XbP+t/4n1q6diIBbMSyK8/77bCNd3Tz4rr15vAmHwaVo7Da/n9FGyEzvQJU9LlK2y6zRlQ+Umq+Yc8iA8g==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Delivery-date: Wed, 12 Jul 2023 12:34:08 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Newer hardware offers more efficient and/or flexible and/or capable
instructions, some of which we can make good use of in the hypervisor
as well. Allow a basic way (no alternatives patching) of enabling their
use. Of course this means that hypervisors thus built won't work
anymore on older, less capable hardware.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---
TBD: Should we, just like for NX, add an early check in assembly code,
     to have a "clean" failure rather than a random crash?

Whereas the baseline -> v2 step isn't much of a difference (we'll gain
more there by a subsequent patch), v2 -> v3, while presumably (or shall
I say hopefully) faster, yields an overall growth of .text size by (in
my build) about 2k. The primary reason for this appear to be conversions
of SHL-by-immediate to SHLX.

--- a/xen/arch/x86/Kconfig
+++ b/xen/arch/x86/Kconfig
@@ -118,6 +118,36 @@ config HVM
 
          If unsure, say Y.
 
+choice
+       prompt "base psABI level"
+       default X86_64_BASELINE
+       help
+         The psABI defines 4 levels of ISA extension sets as a coarse granular
+         way of identifying advanced functionality that would be uniformly
+         available in respectively newer hardware.  While v4 is not really of
+         interest for Xen, the others can be selected here, making the
+         resulting Xen no longer work on older hardware.  This option won't
+         have any effect if the toolchain doesn't support the distinction.
+
+         If unsure, stick to the default.
+
+config X86_64_BASELINE
+       bool "baseline"
+
+config X86_64_V2
+       bool "v2"
+       help
+         This enables POPCNT and CX16, besides other extensions which are of
+         no interest here.
+
+config X86_64_V3
+       bool "v3"
+       help
+         This enables BMI, BMI2, LZCNT, and MOVBE, besides other extensions
+         which are of no interest here.
+
+endchoice
+
 config XEN_SHSTK
        bool "Supervisor Shadow Stacks"
        depends on HAS_AS_CET_SS
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -36,6 +36,10 @@ CFLAGS += -mno-red-zone -fpic
 # the SSE setup for variadic function calls.
 CFLAGS += -mno-mmx -mno-sse $(call cc-option,$(CC),-mskip-rax-setup)
 
+# Enable the selected baseline ABI, if supported by the compiler.
+CFLAGS-$(CONFIG_X86_64_V2) += $(call cc-option,$(CC),-march=x86-64-v2)
+CFLAGS-$(CONFIG_X86_64_V3) += $(call cc-option,$(CC),-march=x86-64-v3)
+
 ifeq ($(CONFIG_INDIRECT_THUNK),y)
 # Compile with gcc thunk-extern, indirect-branch-register if available.
 CFLAGS-$(CONFIG_CC_IS_GCC) += -mindirect-branch=thunk-extern




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.