I am running a linux guest (Linux version 6.6.44) on azure. I am trying to understand how hyper V interrupts are coming to linux.
cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
4: 0 0 306 0 0 0 0 0 IO-APIC 4-edge ttyS0
8: 0 0 0 0 0 0 0 0 IO-APIC 8-edge rtc0
9: 0 0 0 0 0 0 0 0 IO-APIC 9-fasteoi acpi
NMI: 1 1 1 1 1 1 1 1 Non-maskable interrupts
LOC: 0 0 0 0 0 0 0 0 Local timer interrupts
SPU: 0 0 0 0 0 0 0 0 Spurious interrupts
PMI: 0 0 0 0 0 0 0 0 Performance monitoring interrupts
IWI: 74 0 0 0 0 0 0 0 IRQ work interrupts
RTR: 0 0 0 0 0 0 0 0 APIC ICR read retries
RES: 4 6 30 3 35 9 32 11 Rescheduling interrupts
CAL: 425 412 234 84 446 168 139 147 Function call interrupts
TLB: 0 0 0 0 0 0 0 0 TLB shootdowns
TRM: 0 0 0 0 0 0 0 0 Thermal event interrupts
THR: 0 0 0 0 0 0 0 0 Threshold APIC interrupts
DFR: 0 0 0 0 0 0 0 0 Deferred Error APIC interrupts
MCE: 0 0 0 0 0 0 0 0 Machine check exceptions
MCP: 1 1 1 1 1 1 1 1 Machine check polls
HYP: 123 17 37 86 0 0 0 0 Hypervisor callback interrupts
HRE: 0 0 0 0 0 0 0 0 Hyper-V reenlightenment interrupts
HVS: 584 866 782 368 985 453 870 576 Hyper-V stimer0 interrupts
ERR: 0
MIS: 0
PIN: 0 0 0 0 0 0 0 0 Posted-interrupt notification event
NPI: 0 0 0 0 0 0 0 0 Nested posted-interrupt event
PIW: 0 0 0 0 0 0 0 0 Posted-interrupt wakeup event
here I see 3 interrupt handlers are getting used such as
HYP: 123 17 37 86 0 0 0 0 Hypervisor callback interrupts
HRE: 0 0 0 0 0 0 0 0 Hyper-V reenlightenment interrupts
HVS: 584 866 782 368 985 453 870 576 Hyper-V stimer0 interrupts
and in particular this handler Hypervisor callback interrupts isr is getting called. All this is done via registering a callback gate at idt index 0xf3 sysvec_hyperv_callback
My doubt is how hyperv knows/sends these particular interrupts, which reaches to this particular callback? At which stage of boot this agreement is done?
Does ACPI gives this interrupt (IO-APIC 9-fasteoi acpi) on this gate?
Boot logs