mp_irqdomain_activate from arch/x86/kernel/apic/io_apic.c will use the chip_data that is set by the commit referred by Stefan ("XEN uses irqdesc::irq_data_common::handler_data to store a per interrupt XEN data pointer which contains XEN specific information.").
From drivers/xen/events/events_base.c, xen_allocate_irq_gsi has a test:
if (gsi < nr_legacy_irqs())
irq = gsi;
[...] xen_irq_init(irq);
And xen_irq_init calls irq_set_chip_data. That is not an irq number that had a irq_desc allocated by Xen, but one of the legacy IRQs, which is controlled by IO-APIC.
That still does not clarify why it works on bionic or upstream. But documenting what I was able to investigate so far.
mp_irqdomain_ activate from arch/x86/ kernel/ apic/io_ apic.c will use the chip_data that is set by the commit referred by Stefan ("XEN uses irqdesc: :irq_data_ common: :handler_ data to store a per interrupt XEN data pointer which contains XEN specific information.").
From drivers/ xen/events/ events_ base.c, xen_allocate_ irq_gsi has a test:
xen_irq_ init(irq) ;
if (gsi < nr_legacy_irqs())
irq = gsi;
[...]
And xen_irq_init calls irq_set_chip_data. That is not an irq number that had a irq_desc allocated by Xen, but one of the legacy IRQs, which is controlled by IO-APIC.
That still does not clarify why it works on bionic or upstream. But documenting what I was able to investigate so far.
Cascardo.