gHello, On Tue, 14 Feb 2017 22:24:36 +0100, Arnd Bergmann wrote: > This driver uses the MSI domain but has no strict dependency on PCI_MSI, so we > may run into a build failure when CONFIG_GENERIC_MSI_IRQ_DOMAIN is disabled: > > drivers/irqchip/irq-mvebu-odmi.c:152:15: error: variable 'odmi_msi_ops' has > initializer but incomplete type > static struct msi_domain_ops odmi_msi_ops = { > ^~~~~~~~~~~~~~ > drivers/irqchip/irq-mvebu-odmi.c:155:15: error: variable > 'odmi_msi_domain_info' has initializer but incomplete type > static struct msi_domain_info odmi_msi_domain_info = { > ^~~~~~~~~~~~~~~ > drivers/irqchip/irq-mvebu-odmi.c:156:3: error: 'struct msi_domain_info' has > no member named 'flags' > .flags = (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS), > ^~~~~ > drivers/irqchip/irq-mvebu-odmi.c:156:12: error: 'MSI_FLAG_USE_DEF_DOM_OPS' > undeclared here (not in a function) > .flags = (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS), > ^~~~~~~~~~~~~~~~~~~~~~~~ > drivers/irqchip/irq-mvebu-odmi.c:156:39: error: 'MSI_FLAG_USE_DEF_CHIP_OPS' > undeclared here (not in a function); did you mean 'MSI_FLAG_USE_DEF_DOM_OPS'? > > Selecting the option from this driver seems to solve this nicely, though I > could > not find any other instance of this in irqchip drivers.
Here is my explanation of why MVEBU_ODMI is the only one affected: because it's the only one that provides only platform MSI and not PCI MSI. Let's look at the other irqchip drivers using msi_domain_ops: irq-gic-v2m.c:static struct msi_domain_ops gicv2m_pmsi_ops = { irq-gic-v3-its-pci-msi.c:static struct msi_domain_ops its_pci_msi_ops = { irq-gic-v3-its-platform-msi.c:static struct msi_domain_ops its_pmsi_ops = { irq-gic-v3-its.c:static struct msi_domain_ops its_msi_domain_ops = { irq-mvebu-odmi.c:static struct msi_domain_ops odmi_msi_ops = { So, besides mvebu-odmi, we've got GICv2m and GIv3 ITS. Their Kconfig declaration is: config ARM_GIC_V2M bool depends on PCI select ARM_GIC select PCI_MSI config ARM_GIC_V3_ITS bool depends on PCI depends on PCI_MSI select ACPI_IORT if ACPI so both of them "select PCI_MSI". Then we have: config PCI_MSI_IRQ_DOMAIN def_bool ARC || ARM || ARM64 || X86 depends on PCI_MSI select GENERIC_MSI_IRQ_DOMAIN So, when we are on ARC, ARM, ARM64 or x86, and PCI_MSI is enabled, GENERIC_MSI_IRQ_DOMAIN is automatically enabled. So basically the fact that GICv2m and GICv3 "select PCI_MSI" ensure that "GENERIC_MSI_IRQ_DOMAIN" will be enabled. Therefore: > Signed-off-by: Arnd Bergmann <a...@arndb.de> Acked-by: Thomas Petazzoni <thomas.petazz...@free-electrons.com> Thanks! Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com