x86, build, pci: Fix PCI_MSI build on !SMP
Commitebd97be635
('PCI: remove ARCH_SUPPORTS_MSI kconfig option') removed the ARCH_SUPPORTS_MSI option which architectures could select to indicate that they support MSI. Now, all architectures are supposed to build fine when MSI support is enabled: instead of having the architecture tell *when* MSI support can be used, it's up to the architecture code to ensure that MSI support can be enabled. On x86, commitebd97be635
removed the following line: select ARCH_SUPPORTS_MSI if (X86_LOCAL_APIC && X86_IO_APIC) Which meant that MSI support was only available when the local APIC and I/O APIC were enabled. While this is always true on SMP or x86-64, it is not necessarily the case on i386 !SMP. The below patch makes sure that the local APIC and I/O APIC support is always enabled when MSI support is enabled. To do so, it: * Ensures the X86_UP_APIC option is not visible when PCI_MSI is enabled. This is the option that allows, on UP machines, to enable or not the APIC support. It is already not visible on SMP systems, or x86-64 systems, for example. We're simply also making it invisible on i386 MSI systems. * Ensures that the X86_LOCAL_APIC and X86_IO_APIC options are 'y' when PCI_MSI is enabled. Notice that this change requires a change in drivers/iommu/Kconfig to avoid a recursive Kconfig dependencey. The AMD_IOMMU option selects PCI_MSI, but was depending on X86_IO_APIC. This dependency is no longer needed: as soon as PCI_MSI is selected, the presence of X86_IO_APIC is guaranteed. Moreover, the AMD_IOMMU already depended on X86_64, which already guaranteed that X86_IO_APIC was enabled, so this dependency was anyway redundant. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Link: http://lkml.kernel.org/r/1380794354-9079-1-git-send-email-thomas.petazzoni@free-electrons.com Reported-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:
parent
15c83d26e1
commit
0dbc6078c0
|
@ -860,7 +860,7 @@ source "kernel/Kconfig.preempt"
|
||||||
|
|
||||||
config X86_UP_APIC
|
config X86_UP_APIC
|
||||||
bool "Local APIC support on uniprocessors"
|
bool "Local APIC support on uniprocessors"
|
||||||
depends on X86_32 && !SMP && !X86_32_NON_STANDARD
|
depends on X86_32 && !SMP && !X86_32_NON_STANDARD && !PCI_MSI
|
||||||
---help---
|
---help---
|
||||||
A local APIC (Advanced Programmable Interrupt Controller) is an
|
A local APIC (Advanced Programmable Interrupt Controller) is an
|
||||||
integrated interrupt controller in the CPU. If you have a single-CPU
|
integrated interrupt controller in the CPU. If you have a single-CPU
|
||||||
|
@ -885,11 +885,11 @@ config X86_UP_IOAPIC
|
||||||
|
|
||||||
config X86_LOCAL_APIC
|
config X86_LOCAL_APIC
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC
|
depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC || PCI_MSI
|
||||||
|
|
||||||
config X86_IO_APIC
|
config X86_IO_APIC
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_IOAPIC
|
depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_IOAPIC || PCI_MSI
|
||||||
|
|
||||||
config X86_VISWS_APIC
|
config X86_VISWS_APIC
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
|
@ -52,7 +52,7 @@ config AMD_IOMMU
|
||||||
select PCI_PRI
|
select PCI_PRI
|
||||||
select PCI_PASID
|
select PCI_PASID
|
||||||
select IOMMU_API
|
select IOMMU_API
|
||||||
depends on X86_64 && PCI && ACPI && X86_IO_APIC
|
depends on X86_64 && PCI && ACPI
|
||||||
---help---
|
---help---
|
||||||
With this option you can enable support for AMD IOMMU hardware in
|
With this option you can enable support for AMD IOMMU hardware in
|
||||||
your system. An IOMMU is a hardware component which provides
|
your system. An IOMMU is a hardware component which provides
|
||||||
|
|
Loading…
Reference in a new issue