GUEST PANIC 相关的处理函数入口

105 篇文章 2 订阅

 libvirt


src/qemu/qemu_process.c:

static int  qemuProcessHandleGuestPanic(qemuMonitorPtr mon ATTRIBUTE_UNUSED,  virDomainObjPtr vm,  void *opaque)   


qemuMonitorJSONIOProcess (mon=mon@entry=0x7fcd540065c0, 
    data=0x557298ed9580 "{\"timestamp\": {\"seconds\": 1490341608, \"microseconds\": 410320}, \"event\": \"GUEST_PANICKED\", \"data\": {\"action\": \"pause\"}}\r\n", len=120, msg=msg@entry=0x0) at qemu/qemu_monitor_json.c:250



qemu

hw/misc/pvpanic.c:

 static void handle_event(int event) 

vl.c

void qemu_system_guest_panicked(void) 


前端驱动

static int pvpanic_add(struct acpi_device *device)
{
        ......
        //注册pvpanic_panic_nb到panic_notifier_list,在panic函数中调用
atomic_notifier_chain_register(&panic_notifier_list,
      &pvpanic_panic_nb);

      ......
}


//发送panic事件通知,就是写入一个pio,然后被hypervisro截获

static void
pvpanic_send_event(unsigned int event)
{
outb(event, port);
}


static int
pvpanic_panic_notify(struct notifier_block *nb, unsigned long code,
    void *unused)
{
pvpanic_send_event(PVPANIC_PANICKED);
return NOTIFY_DONE;
}


static struct notifier_block pvpanic_panic_nb = {
.notifier_call = pvpanic_panic_notify,
};


XXOO


内核

void panic(const char *fmt, ...){

//执行kdump
crash_kexec(NULL);

        //没有kdump的,进行notifier的通知

        atomic_notifier_call_chain(&panic_notifier_list, 0, buf);

       ......

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值