arch/x86: Implementing ARCH_PCIE_IRQ_CONNECT for ia32 and intel64

While this does not change anything for ia32, this is fixing the chicken
& egg issue on intel64 if (and only if) interrupt remapping is enabled
so pcie_connect_dynamic_irq() is to be called properly.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
Tomasz Bursztyka 2021-03-16 09:31:39 +01:00 committed by Anas Nashif
commit 5b3d94510c
2 changed files with 19 additions and 0 deletions

View file

@ -225,6 +225,14 @@ typedef struct s_isrList {
(flags_p)); \ (flags_p)); \
} }
#ifdef CONFIG_PCIE
#define ARCH_PCIE_IRQ_CONNECT(bdf_p, irq_p, priority_p, \
isr_p, isr_param_p, flags_p) \
ARCH_IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p)
#endif /* CONFIG_PCIE */
/* Direct interrupts won't work as expected with KPTI turned on, because /* Direct interrupts won't work as expected with KPTI turned on, because
* all non-user accessible pages in the page table are marked non-present. * all non-user accessible pages in the page table are marked non-present.
* It's likely possible to add logic to ARCH_ISR_DIRECT_HEADER/FOOTER to do * It's likely possible to add logic to ARCH_ISR_DIRECT_HEADER/FOOTER to do

View file

@ -133,6 +133,17 @@ struct x86_ssf {
(void (*)(const void *))isr_p, \ (void (*)(const void *))isr_p, \
isr_param_p, flags_p) isr_param_p, flags_p)
#ifdef CONFIG_PCIE
#define ARCH_PCIE_IRQ_CONNECT(bdf_p, irq_p, priority_p, \
isr_p, isr_param_p, flags_p) \
X86_RESERVE_IRQ(irq_p, _CONCAT(_irq_alloc_fixed, __COUNTER__)); \
pcie_connect_dynamic_irq(bdf_p, irq_p, priority_p, \
(void (*)(const void *))isr_p, \
isr_param_p, flags_p)
#endif /* CONFIG_PCIE */
/* /*
* Thread object needs to be 16-byte aligned. * Thread object needs to be 16-byte aligned.
*/ */