Hi Tianyu,
While testing the guest patches on KVM host, My guest kernel is stuck
at early bootup. As it did not seem a hang but sort of loop where
interrupts are getting processed from "pv_native_irq_enable" path
repeatedly and prevent boot process to make progress IIUC. Did you face
any such scenario in your testing?
It seems to me "native_irq_enable" enable interrupts and
"check_hv_pending_irq_enable" starts handling the interrupts (after
disabling irqs). But "check_hv_pending_irq_enable=>do_exc_hv" can again
call "pv_native_irq_enable" in interrupt handling path and execute the
same loop?
Also pasting below the stack dump [1].
Thanks,
Pankaj
[1]
[ 20.530786] Call Trace:^M
[ 20.531099] <IRQ>^M
[ 20.531360] dump_stack_lvl+0x4d/0x67^M
[ 20.531820] dump_stack+0x14/0x1a^M
[ 20.532235] do_exc_hv.cold+0x11/0xec^M
[ 20.532792] check_hv_pending_irq_enable+0x64/0x80^M
[ 20.533390] pv_native_irq_enable+0xe/0x20^M ====> here
[ 20.533902] __do_softirq+0x89/0x2f3^M
[ 20.534352] __irq_exit_rcu+0x9f/0x110^M
[ 20.534825] irq_exit_rcu+0x12/0x20^M
[ 20.535267] common_interrupt+0xca/0xf0^M
[ 20.535745] </IRQ>^M
[ 20.536014] <TASK>^M
[ 20.536286] do_exc_hv.cold+0xda/0xec^M
[ 20.536826] check_hv_pending_irq_enable+0x64/0x80^M
[ 20.537429] pv_native_irq_enable+0xe/0x20^M ====> here
[ 20.537942] _raw_spin_unlock_irqrestore+0x21/0x50^M
[ 20.538539] __setup_irq+0x3be/0x740^M
[ 20.538990] request_threaded_irq+0x116/0x180^M
[ 20.539533] hpet_time_init+0x35/0x56^M
[ 20.539994] x86_late_time_init+0x1f/0x3d^M
[ 20.540556] start_kernel+0x8af/0x970^M
[ 20.541033] x86_64_start_reservations+0x28/0x2e^M
[ 20.541607] x86_64_start_kernel+0x96/0xa0^M
[ 20.542126] secondary_startup_64_no_verify+0xe5/0xeb^M
[ 20.542757] </TASK>^M