|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 1/6] x86/Kconfig: add option for default x2APIC destination mode
Allow setting the default x2APIC destination mode from Kconfig to
Physical.
Note the default destination mode is still Logical (Cluster) mode.
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
Changes since v1:
- Use a boolean rather than a choice.
- Expand to X2APIC_PHYSICAL.
---
TBH I wasn't sure whether to keep X2APIC_PHYSICAL or X2APIC_LOGICAL as
the Kconfig option, went with X2APIC_PHYSICAL because that's the
define the code was already using.
---
xen/arch/x86/Kconfig | 18 ++++++++++++++++++
xen/arch/x86/genapic/x2apic.c | 6 ++++--
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
index 1e31edc99f..6bed72b791 100644
--- a/xen/arch/x86/Kconfig
+++ b/xen/arch/x86/Kconfig
@@ -226,6 +226,24 @@ config XEN_ALIGN_2M
endchoice
+config X2APIC_PHYSICAL
+ bool "x2APIC Physical Destination mode"
+ help
+ Use x2APIC Physical Destination mode by default when available.
+
+ When using this mode APICs are addressed using the Physical
+ Destination mode, which allows using all dynamic vectors on each
+ CPU independently.
+
+ Physical Destination has the benefit of having more vectors available
+ for external interrupts, but it also makes the delivery of multi
+ destination inter processor interrupts (IPIs) slightly slower than
+ Logical Destination mode.
+
+ The mode when this option is not selected is Logical Destination.
+
+ If unsure, say N.
+
config GUEST
bool
diff --git a/xen/arch/x86/genapic/x2apic.c b/xen/arch/x86/genapic/x2apic.c
index de5032f202..7dfc793514 100644
--- a/xen/arch/x86/genapic/x2apic.c
+++ b/xen/arch/x86/genapic/x2apic.c
@@ -228,7 +228,7 @@ static struct notifier_block x2apic_cpu_nfb = {
.notifier_call = update_clusterinfo
};
-static s8 __initdata x2apic_phys = -1; /* By default we use logical cluster
mode. */
+static int8_t __initdata x2apic_phys = -1;
boolean_param("x2apic_phys", x2apic_phys);
const struct genapic *__init apic_x2apic_probe(void)
@@ -241,7 +241,9 @@ const struct genapic *__init apic_x2apic_probe(void)
* the usage of the high 16 bits to hold the cluster ID.
*/
x2apic_phys = !iommu_intremap ||
- (acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL);
+ (acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL) ||
+ (IS_ENABLED(CONFIG_X2APIC_PHYSICAL) &&
+ !(acpi_gbl_FADT.flags & ACPI_FADT_APIC_CLUSTER));
}
else if ( !x2apic_phys )
switch ( iommu_intremap )
--
2.36.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |