Messages in this thread Patch in this message | | | Date | Tue, 10 Oct 2023 08:59:14 -0700 | Subject | Re: [PATCH] x86/msi: Fix compile error "incomplete typedef 'msi_alloc_info_t'" | From | Randy Dunlap <> |
| |
Hi,
On 10/8/23 01:28, yaolu wrote: > When compiling the x86 kernel, if X86_64 || SMP || X86_32_NON_STANDARD || > X86_UP_APIC || PCI_MSI is not enabled in '.config' and GENERIC_MSI_IRQ is > selected, the following compilation error will occur: > >> include/linux/gpio/driver.h:38:19: error: >> field 'msiinfo' has incomplete type >> kernel/irq/msi.c:752:5: error: invalid use of incomplete typedef >> 'msi_alloc_info_t' {aka 'struct irq_alloc_info'} >> kernel/irq/msi.c:740:1: error: control reaches end of non-void function > > This is because 'X86_LOCAL_APIC' is not defined, but file such as > 'kernel/irq/msi.c' only depends on 'GENERIC_MSI_IRQ', and uses > 'struct msi_alloc_info_t'. When enable 'GENERIC_MSI_IRQ' will select > 'IRQ_DOMAIN_HIERARCHY', so exposing this struct using > 'IRQ_DOMAIN_HIERARCHY' rather than 'X86_LOCAL_APIC'. > > Signed-off-by: yaolu <yaolu@kylinos.cn>
Thank for the patch. This reduces the build error count from around 190 down to two remaining problems for me:
../arch/x86/kernel/hpet.c: In function ‘hpet_create_irq_domain’: ../arch/x86/kernel/hpet.c:550:13: error: ‘x86_vector_domain’ undeclared (first use in this function) 550 | if (x86_vector_domain == NULL) | ^~~~~~~~~~~~~~~~~ ../arch/x86/kernel/hpet.c:550:13: note: each undeclared identifier is reported only once for each function it appears in ../arch/x86/kernel/hpet.c: In function ‘hpet_assign_irq’: ../arch/x86/kernel/hpet.c:600:9: error: implicit declaration of function ‘init_irq_alloc_info’ [-Werror=implicit-function-declaration] 600 | init_irq_alloc_info(&info, NULL); | ^~~~~~~~~~~~~~~~~~~
I haven't looked into how to fix this yet...
> --- > arch/x86/include/asm/hw_irq.h | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h > index 551829884734..b02c3cd3c0f6 100644 > --- a/arch/x86/include/asm/hw_irq.h > +++ b/arch/x86/include/asm/hw_irq.h > @@ -28,7 +28,7 @@ > #include <asm/irq.h> > #include <asm/sections.h> > > -#ifdef CONFIG_X86_LOCAL_APIC > +#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY > struct irq_data; > struct pci_dev; > struct msi_desc; > @@ -105,10 +105,10 @@ static inline void irq_complete_move(struct irq_cfg *c) { } > #endif > > extern void apic_ack_edge(struct irq_data *data); > -#else /* CONFIG_X86_LOCAL_APIC */ > +#else /* CONFIG_IRQ_DOMAIN_HIERARCHY */ > static inline void lock_vector_lock(void) {} > static inline void unlock_vector_lock(void) {} > -#endif /* CONFIG_X86_LOCAL_APIC */ > +#endif /* CONFIG_IRQ_DOMAIN_HIERARCHY */ > > /* Statistics */ > extern atomic_t irq_err_count;
-- ~Randy
| |