On Sat, Nov 11 2023 at 20:16, Jacob Pan wrote: > static void fill_msi_msg(struct msi_msg *msg, u32 index, u32 subhandle) > { > memset(msg, 0, sizeof(*msg)); > @@ -1361,7 +1397,7 @@ static int intel_irq_remapping_alloc(struct irq_domain *domain, > > irq_data->hwirq = (index << 16) + i; > irq_data->chip_data = ird; > - irq_data->chip = &intel_ir_chip; > + irq_data->chip = posted_msi_supported() ? &intel_ir_chip_post_msi : &intel_ir_chip; This is just wrong because you change the chip to posted for _ALL_ domains unconditionally. The only domains which want this chip are the PCI/MSI domains. And those are distinct from the domains which serve IO/APIC, HPET, no? So you can set that chip only for PCI/MSI and just let IO/APIC, HPET domains keep the original chip, which spares any modification of the IO/APIC domain.