PVPANIC 设备
pvpanic 是模拟设备,用于将客户机 panic 事件发送给 QEMU,并生成 QMP 事件, 使 libvirt 等管理应用能够获知并响应。
管理应用可以等待 GUEST_PANICKED 事件,和/或轮询 guest-panicked RunState, 判断设备何时触发 panic。
pvpanic 可以实现为使用 IOPORT 的 ISA 设备,也可以是 PCI 设备。
ISA 接口
pvpanic 暴露一个 I/O 端口,默认为 0x505。读取时,设备识别的位设为 1, 软件应忽略不认识的位。写入时,设备忽略不认识的位, 软件只应设置双方都认识的位。
位定义
- 位 0
客户机发生 panic,应由主机处理。
- 位 1
客户机发生 panic,将由客户机处理;主机应记录或报告,但不应影响客户机执行。
- 位 2
客户机发生正常关机,应由主机处理。
PCI 接口
PCI 接口类似 ISA,但使用 BAR0 提供的 1 字节 MMIO 地址空间。
有 PCI 总线的机器可通过命令行 -device pvpanic-pci 启用。
ACPI 接口
pvpanic 的 ACPI ID 为 "QEMU0001"。自定义方法如下:
RDPT
判断是否支持客户机 panic 通知。
- 参数
无。
- 返回值
返回一个字节,语义与 I/O 端口接口相同。
WRPT
发送客户机 panic 事件。
- 参数
Arg0 为待写入字节,语义与 I/O 接口相同。
- 返回值
无。
端口被修改时,ACPI 设备会自动引用正确的端口。