All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] xen/x86: use extended destination mode if available
@ 2022-01-20 15:25 Roger Pau Monne
  2022-01-20 15:25 ` [PATCH 1/2] xen/x2apic: enable x2apic mode when supported Roger Pau Monne
  2022-01-20 15:25 ` [PATCH 2/2] xen/x86: detect support for extended destination ID Roger Pau Monne
  0 siblings, 2 replies; 8+ messages in thread
From: Roger Pau Monne @ 2022-01-20 15:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Roger Pau Monne

Hello,

Following two patches enable the usage of the extended destination ID if
supported by Xen. This is the same feature already supported by QEMU/KVM
and HyperV.

First patch can probably go in regardless of whether Xen ends up
implementing the extended destination ID, there's no reason to prevent a
VM from using x2APIC mode.

Thanks, Roger.

Roger Pau Monne (2):
  xen/x2apic: enable x2apic mode when supported
  xen/x86: detect support for extended destination ID

 arch/x86/include/asm/xen/cpuid.h | 7 +++++++
 arch/x86/xen/enlighten_hvm.c     | 9 ++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/2] xen/x2apic: enable x2apic mode when supported
  2022-01-20 15:25 [PATCH 0/2] xen/x86: use extended destination mode if available Roger Pau Monne
@ 2022-01-20 15:25 ` Roger Pau Monne
  2022-01-21  1:01   ` Boris Ostrovsky
  2022-01-20 15:25 ` [PATCH 2/2] xen/x86: detect support for extended destination ID Roger Pau Monne
  1 sibling, 1 reply; 8+ messages in thread
From: Roger Pau Monne @ 2022-01-20 15:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Roger Pau Monne, Boris Ostrovsky, Juergen Gross,
	Stefano Stabellini, Thomas Gleixner, Ingo Molnar,
	Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, xen-devel

There's no point in disabling x2APIC mode when running as a Xen HVM
guest, just enable it when available.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: x86@kernel.org
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: xen-devel@lists.xenproject.org
---
 arch/x86/xen/enlighten_hvm.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c
index 42300941ec29..ab8171cbee23 100644
--- a/arch/x86/xen/enlighten_hvm.c
+++ b/arch/x86/xen/enlighten_hvm.c
@@ -9,6 +9,7 @@
 #include <xen/events.h>
 #include <xen/interface/memory.h>
 
+#include <asm/apic.h>
 #include <asm/cpu.h>
 #include <asm/smp.h>
 #include <asm/io_apic.h>
@@ -248,7 +249,7 @@ bool __init xen_hvm_need_lapic(void)
 		return false;
 	if (!xen_hvm_domain())
 		return false;
-	if (xen_feature(XENFEAT_hvm_pirqs) && xen_have_vector_callback)
+	if (!x2apic_supported())
 		return false;
 	return true;
 }
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] xen/x86: detect support for extended destination ID
  2022-01-20 15:25 [PATCH 0/2] xen/x86: use extended destination mode if available Roger Pau Monne
  2022-01-20 15:25 ` [PATCH 1/2] xen/x2apic: enable x2apic mode when supported Roger Pau Monne
@ 2022-01-20 15:25 ` Roger Pau Monne
  2022-02-07  9:03   ` Juergen Gross
  1 sibling, 1 reply; 8+ messages in thread
From: Roger Pau Monne @ 2022-01-20 15:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Roger Pau Monne, Boris Ostrovsky, Juergen Gross,
	Stefano Stabellini, Thomas Gleixner, Ingo Molnar,
	Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, xen-devel

Xen allows the usage of some previously reserved bits in the IO-APIC
RTE and the MSI address fields in order to store high bits for the
target APIC ID. Such feature is already implemented by QEMU/KVM and
HyperV, so in order to enable it just add the handler that checks for
it's presence.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
Must not be applied until the public headers are changed in Xen.
---
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: x86@kernel.org
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: xen-devel@lists.xenproject.org
---
 arch/x86/include/asm/xen/cpuid.h | 7 +++++++
 arch/x86/xen/enlighten_hvm.c     | 6 ++++++
 2 files changed, 13 insertions(+)

diff --git a/arch/x86/include/asm/xen/cpuid.h b/arch/x86/include/asm/xen/cpuid.h
index a9630104f1c4..78e667a31d6c 100644
--- a/arch/x86/include/asm/xen/cpuid.h
+++ b/arch/x86/include/asm/xen/cpuid.h
@@ -100,6 +100,13 @@
 /* Memory mapped from other domains has valid IOMMU entries */
 #define XEN_HVM_CPUID_IOMMU_MAPPINGS   (1u << 2)
 #define XEN_HVM_CPUID_VCPU_ID_PRESENT  (1u << 3) /* vcpu id is present in EBX */
+#define XEN_HVM_CPUID_DOMID_PRESENT    (1u << 4) /* domid is present in ECX */
+/*
+ * Bits 55:49 from the IO-APIC RTE and bits 11:5 from the MSI address can be
+ * used to store high bits for the Destination ID. This expands the Destination
+ * ID field from 8 to 15 bits, allowing to target APIC IDs up 32768.
+ */
+#define XEN_HVM_CPUID_EXT_DEST_ID      (1u << 5)
 
 /*
  * Leaf 6 (0x40000x05)
diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c
index ab8171cbee23..0c5b0ee3a02a 100644
--- a/arch/x86/xen/enlighten_hvm.c
+++ b/arch/x86/xen/enlighten_hvm.c
@@ -254,6 +254,11 @@ bool __init xen_hvm_need_lapic(void)
 	return true;
 }
 
+static bool __init msi_ext_dest_id(void)
+{
+       return cpuid_eax(xen_cpuid_base() + 4) & XEN_HVM_CPUID_EXT_DEST_ID;
+}
+
 static __init void xen_hvm_guest_late_init(void)
 {
 #ifdef CONFIG_XEN_PVH
@@ -316,6 +321,7 @@ struct hypervisor_x86 x86_hyper_xen_hvm __initdata = {
 	.init.x2apic_available  = xen_x2apic_para_available,
 	.init.init_mem_mapping	= xen_hvm_init_mem_mapping,
 	.init.guest_late_init	= xen_hvm_guest_late_init,
+	.init.msi_ext_dest_id   = msi_ext_dest_id,
 	.runtime.pin_vcpu       = xen_pin_vcpu,
 	.ignore_nopv            = true,
 };
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] xen/x2apic: enable x2apic mode when supported
  2022-01-20 15:25 ` [PATCH 1/2] xen/x2apic: enable x2apic mode when supported Roger Pau Monne
@ 2022-01-21  1:01   ` Boris Ostrovsky
  2022-01-21  9:01     ` [PATCH] xen/x2apic: enable x2apic mode when supported for HVM Roger Pau Monne
  0 siblings, 1 reply; 8+ messages in thread
From: Boris Ostrovsky @ 2022-01-21  1:01 UTC (permalink / raw)
  To: Roger Pau Monne, linux-kernel
  Cc: Juergen Gross, Stefano Stabellini, Thomas Gleixner, Ingo Molnar,
	Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, xen-devel



On 1/20/22 10:25 AM, Roger Pau Monne wrote:
> There's no point in disabling x2APIC mode when running as a Xen HVM
> guest, just enable it when available.
> 
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> ---
> Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> Cc: Juergen Gross <jgross@suse.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: Borislav Petkov <bp@alien8.de>
> Cc: Dave Hansen <dave.hansen@linux.intel.com>
> Cc: x86@kernel.org
> Cc: "H. Peter Anvin" <hpa@zytor.com>
> Cc: xen-devel@lists.xenproject.org
> ---
>   arch/x86/xen/enlighten_hvm.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c
> index 42300941ec29..ab8171cbee23 100644
> --- a/arch/x86/xen/enlighten_hvm.c
> +++ b/arch/x86/xen/enlighten_hvm.c
> @@ -9,6 +9,7 @@
>   #include <xen/events.h>
>   #include <xen/interface/memory.h>
>   
> +#include <asm/apic.h>
>   #include <asm/cpu.h>
>   #include <asm/smp.h>
>   #include <asm/io_apic.h>
> @@ -248,7 +249,7 @@ bool __init xen_hvm_need_lapic(void)
>   		return false;
>   	if (!xen_hvm_domain())
>   		return false;
> -	if (xen_feature(XENFEAT_hvm_pirqs) && xen_have_vector_callback)
> +	if (!x2apic_supported())
>   		return false;
>   	return true;
>   }


Then it seems this whole routine can be reduced to just

	return x2apic_supported();

and then dropped altogether and x2apic_supported() moved to xen_x2apic_para_available(). Domain type checks here are not really needed since this can only be called on HVM guests.


-boris

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] xen/x2apic: enable x2apic mode when supported for HVM
  2022-01-21  1:01   ` Boris Ostrovsky
@ 2022-01-21  9:01     ` Roger Pau Monne
  2022-01-21 20:30       ` Boris Ostrovsky
  2022-02-03  6:50       ` Juergen Gross
  0 siblings, 2 replies; 8+ messages in thread
From: Roger Pau Monne @ 2022-01-21  9:01 UTC (permalink / raw)
  To: linux-kernel
  Cc: Roger Pau Monne, Boris Ostrovsky, Juergen Gross,
	Stefano Stabellini, Thomas Gleixner, Ingo Molnar,
	Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, xen-devel

There's no point in disabling x2APIC mode when running as a Xen HVM
guest, just enable it when available.

Remove some unneeded wrapping around the detection functions, and
simply provide a xen_x2apic_available helper that's a wrapper around
x2apic_supported.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
Changes since v1:
 - Remove useless code around x2APIC detection for Xen.
---
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: x86@kernel.org
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: xen-devel@lists.xenproject.org
---
 arch/x86/include/asm/xen/hypervisor.h | 14 --------------
 arch/x86/xen/enlighten_hvm.c          | 13 ++++---------
 2 files changed, 4 insertions(+), 23 deletions(-)

diff --git a/arch/x86/include/asm/xen/hypervisor.h b/arch/x86/include/asm/xen/hypervisor.h
index 1bf2ad34188a..16f548a661cf 100644
--- a/arch/x86/include/asm/xen/hypervisor.h
+++ b/arch/x86/include/asm/xen/hypervisor.h
@@ -43,20 +43,6 @@ static inline uint32_t xen_cpuid_base(void)
 	return hypervisor_cpuid_base("XenVMMXenVMM", 2);
 }
 
-#ifdef CONFIG_XEN
-extern bool __init xen_hvm_need_lapic(void);
-
-static inline bool __init xen_x2apic_para_available(void)
-{
-	return xen_hvm_need_lapic();
-}
-#else
-static inline bool __init xen_x2apic_para_available(void)
-{
-	return (xen_cpuid_base() != 0);
-}
-#endif
-
 struct pci_dev;
 
 #ifdef CONFIG_XEN_PV_DOM0
diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c
index 42300941ec29..6448c5071117 100644
--- a/arch/x86/xen/enlighten_hvm.c
+++ b/arch/x86/xen/enlighten_hvm.c
@@ -9,6 +9,7 @@
 #include <xen/events.h>
 #include <xen/interface/memory.h>
 
+#include <asm/apic.h>
 #include <asm/cpu.h>
 #include <asm/smp.h>
 #include <asm/io_apic.h>
@@ -242,15 +243,9 @@ static __init int xen_parse_no_vector_callback(char *arg)
 }
 early_param("xen_no_vector_callback", xen_parse_no_vector_callback);
 
-bool __init xen_hvm_need_lapic(void)
+static __init bool xen_x2apic_available(void)
 {
-	if (xen_pv_domain())
-		return false;
-	if (!xen_hvm_domain())
-		return false;
-	if (xen_feature(XENFEAT_hvm_pirqs) && xen_have_vector_callback)
-		return false;
-	return true;
+	return x2apic_supported();
 }
 
 static __init void xen_hvm_guest_late_init(void)
@@ -312,7 +307,7 @@ struct hypervisor_x86 x86_hyper_xen_hvm __initdata = {
 	.detect                 = xen_platform_hvm,
 	.type			= X86_HYPER_XEN_HVM,
 	.init.init_platform     = xen_hvm_guest_init,
-	.init.x2apic_available  = xen_x2apic_para_available,
+	.init.x2apic_available  = xen_x2apic_available,
 	.init.init_mem_mapping	= xen_hvm_init_mem_mapping,
 	.init.guest_late_init	= xen_hvm_guest_late_init,
 	.runtime.pin_vcpu       = xen_pin_vcpu,
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] xen/x2apic: enable x2apic mode when supported for HVM
  2022-01-21  9:01     ` [PATCH] xen/x2apic: enable x2apic mode when supported for HVM Roger Pau Monne
@ 2022-01-21 20:30       ` Boris Ostrovsky
  2022-02-03  6:50       ` Juergen Gross
  1 sibling, 0 replies; 8+ messages in thread
From: Boris Ostrovsky @ 2022-01-21 20:30 UTC (permalink / raw)
  To: Roger Pau Monne, linux-kernel
  Cc: Juergen Gross, Stefano Stabellini, Thomas Gleixner, Ingo Molnar,
	Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, xen-devel


On 1/21/22 4:01 AM, Roger Pau Monne wrote:
> There's no point in disabling x2APIC mode when running as a Xen HVM
> guest, just enable it when available.
>
> Remove some unneeded wrapping around the detection functions, and
> simply provide a xen_x2apic_available helper that's a wrapper around
> x2apic_supported.
>
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>


Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] xen/x2apic: enable x2apic mode when supported for HVM
  2022-01-21  9:01     ` [PATCH] xen/x2apic: enable x2apic mode when supported for HVM Roger Pau Monne
  2022-01-21 20:30       ` Boris Ostrovsky
@ 2022-02-03  6:50       ` Juergen Gross
  1 sibling, 0 replies; 8+ messages in thread
From: Juergen Gross @ 2022-02-03  6:50 UTC (permalink / raw)
  To: Roger Pau Monne, linux-kernel
  Cc: Boris Ostrovsky, Stefano Stabellini, Thomas Gleixner,
	Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin,
	xen-devel


[-- Attachment #1.1.1: Type: text/plain, Size: 437 bytes --]

On 21.01.22 10:01, Roger Pau Monne wrote:
> There's no point in disabling x2APIC mode when running as a Xen HVM
> guest, just enable it when available.
> 
> Remove some unneeded wrapping around the detection functions, and
> simply provide a xen_x2apic_available helper that's a wrapper around
> x2apic_supported.
> 
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>

Pushed to xen/tip.git for-linus-5.17a


Juergen

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3149 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] xen/x86: detect support for extended destination ID
  2022-01-20 15:25 ` [PATCH 2/2] xen/x86: detect support for extended destination ID Roger Pau Monne
@ 2022-02-07  9:03   ` Juergen Gross
  0 siblings, 0 replies; 8+ messages in thread
From: Juergen Gross @ 2022-02-07  9:03 UTC (permalink / raw)
  To: Roger Pau Monne, linux-kernel
  Cc: Boris Ostrovsky, Stefano Stabellini, Thomas Gleixner,
	Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin,
	xen-devel


[-- Attachment #1.1.1: Type: text/plain, Size: 470 bytes --]

On 20.01.22 16:25, Roger Pau Monne wrote:
> Xen allows the usage of some previously reserved bits in the IO-APIC
> RTE and the MSI address fields in order to store high bits for the
> target APIC ID. Such feature is already implemented by QEMU/KVM and
> HyperV, so in order to enable it just add the handler that checks for
> it's presence.
> 
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>

Reviewed-by: Juergen Gross <jgross@suse.com>


Juergen

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3149 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-02-07  9:15 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-20 15:25 [PATCH 0/2] xen/x86: use extended destination mode if available Roger Pau Monne
2022-01-20 15:25 ` [PATCH 1/2] xen/x2apic: enable x2apic mode when supported Roger Pau Monne
2022-01-21  1:01   ` Boris Ostrovsky
2022-01-21  9:01     ` [PATCH] xen/x2apic: enable x2apic mode when supported for HVM Roger Pau Monne
2022-01-21 20:30       ` Boris Ostrovsky
2022-02-03  6:50       ` Juergen Gross
2022-01-20 15:25 ` [PATCH 2/2] xen/x86: detect support for extended destination ID Roger Pau Monne
2022-02-07  9:03   ` Juergen Gross

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.