|
@@ -26,6 +26,9 @@
|
|
|
|
|
|
#define TOPOLOGY_REGISTER_OFFSET 0x10
|
|
#define TOPOLOGY_REGISTER_OFFSET 0x10
|
|
|
|
|
|
|
|
+/* Flag below is initialized once during vSMP PCI initialization. */
|
|
|
|
+static int irq_routing_comply = 1;
|
|
|
|
+
|
|
#if defined CONFIG_PCI && defined CONFIG_PARAVIRT
|
|
#if defined CONFIG_PCI && defined CONFIG_PARAVIRT
|
|
/*
|
|
/*
|
|
* Interrupt control on vSMPowered systems:
|
|
* Interrupt control on vSMPowered systems:
|
|
@@ -101,6 +104,10 @@ static void __init set_vsmp_pv_ops(void)
|
|
#ifdef CONFIG_SMP
|
|
#ifdef CONFIG_SMP
|
|
if (cap & ctl & BIT(8)) {
|
|
if (cap & ctl & BIT(8)) {
|
|
ctl &= ~BIT(8);
|
|
ctl &= ~BIT(8);
|
|
|
|
+
|
|
|
|
+ /* Interrupt routing set to ignore */
|
|
|
|
+ irq_routing_comply = 0;
|
|
|
|
+
|
|
#ifdef CONFIG_PROC_FS
|
|
#ifdef CONFIG_PROC_FS
|
|
/* Don't let users change irq affinity via procfs */
|
|
/* Don't let users change irq affinity via procfs */
|
|
no_irq_affinity = 1;
|
|
no_irq_affinity = 1;
|
|
@@ -218,7 +225,9 @@ static void vsmp_apic_post_init(void)
|
|
{
|
|
{
|
|
/* need to update phys_pkg_id */
|
|
/* need to update phys_pkg_id */
|
|
apic->phys_pkg_id = apicid_phys_pkg_id;
|
|
apic->phys_pkg_id = apicid_phys_pkg_id;
|
|
- apic->vector_allocation_domain = fill_vector_allocation_domain;
|
|
|
|
|
|
+
|
|
|
|
+ if (!irq_routing_comply)
|
|
|
|
+ apic->vector_allocation_domain = fill_vector_allocation_domain;
|
|
}
|
|
}
|
|
|
|
|
|
void __init vsmp_init(void)
|
|
void __init vsmp_init(void)
|