kvm虚拟机下电qemu关键流程精解

#0  piix4_powerdown (opaque=0x7f804b393410, irq=0, power_failing=1)
    at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/hw/acpi_piix4.c:314
#1  0x00007f8049d072ac in qemu_set_irq (irq=0x7f804b393d80, level=1)
    at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/hw/irq.c:38
#2  0x00007f8049d88494 in qemu_irq_raise (irq=0x7f804b393d80)
    at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/hw/irq.h:12
#3  0x00007f8049d88437 in main_loop_should_exit ()
    at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/vl.c:1462
#4  0x00007f8049d88507 in main_loop ()
    at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/vl.c:1486
#5  0x00007f8049d8d1f5 in main (argc=50, argv=0x7fff058a8108,
    envp=0x7fff058a82a0) at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/vl.c:3523

piix4_powerdown  ->acpi_pm1_evt_power_down -> pm_tmr_timer -> pm_update_sci

pm_update_sci  ->qemu_set_irq  ->kvm_i8259_set_irq

void acpi_pm1_evt_power_down(ACPIPM1EVT *pm1, ACPIPMTimer *tmr)
{
    if (!pm1) {
        qemu_system_shutdown_request();
} else if (pm1->en & ACPI_BITMASK_POWER_BUTTON_ENABLE) {
执行下电的关键,就是对pm1->sts进行修改。
        pm1->sts |= ACPI_BITMASK_POWER_BUTTON_STATUS;
        tmr->update_sci(tmr);
    }
}

PIIX4PMState * (qemu_system_powerdown ->opaque) ->pm1a-> sts
p ((PIIX4PMState *)(qemu_system_powerdown->opaque))->pm1a->sts
0
#0  qemu_set_irq (irq=0x7fd4f2ffcce8, level=1)
    at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/hw/irq.c:40
#1  0x00007fd4f1ae6793 in pm_update_sci (s=0x7fd4f303d210)
    at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/hw/acpi_piix4.c:99
#2  0x00007fd4f1ae6830 in pm_tmr_timer (tmr=0x7fd4f303d6a8)
    at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/hw/acpi_piix4.c:108
#3  0x00007fd4f1ae60db in acpi_pm_tmr_timer (opaque=0x7fd4f303d6a8)
    at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/hw/acpi.c:314
#4  0x00007fd4f1a8c511 in qemu_run_timers (clock=0x7fd4f27ab180)
    at qemu-timer.c:420
#5  0x00007fd4f1a8c85c in qemu_run_all_timers () at qemu-timer.c:482
#6  0x00007fd4f1a5d293 in main_loop_wait (nonblocking=0) at main-loop.c:468
#7  0x00007fd4f1a52557 in main_loop ()
at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/vl.c:1484
#8  0x00007fd4f1a5724d in main (argc=48, argv=0x7fffd66aad38,
    envp=0x7fffd66aaec0) at /home/sdc/wyf/kvm/qemu-kvm-1.0.1/vl.c:3525

timer更新会调用pm_update_sci。

猜你喜欢

转载自blog.csdn.net/tdaajames/article/details/8960420
今日推荐