qemu: add pvpanic device to get GUEST_PANICKED event

Listening to the events channel from QEMU and a guest
panic event issued, then we can get the event and do some
work for the special event.

Fixes: #152

Signed-off-by: bin liu <bin@hyper.sh>
This commit is contained in:
bin liu 2020-10-19 16:59:37 +08:00
parent 546cc55ea4
commit d7836877e9
2 changed files with 33 additions and 0 deletions

View File

@ -1118,6 +1118,24 @@ func (blkdev BlockDevice) deviceName(config *Config) string {
return string(blkdev.Driver)
}
// PVPanicDevice represents a qemu pvpanic device.
type PVPanicDevice struct {
NoShutdown bool
}
// Valid always returns true for pvpanic device
func (dev PVPanicDevice) Valid() bool {
return true
}
// QemuParams returns the qemu parameters built out of this serial device.
func (dev PVPanicDevice) QemuParams(config *Config) []string {
if dev.NoShutdown {
return []string{"-device", "pvpanic", "-no-shutdown"}
}
return []string{"-device", "pvpanic"}
}
// VhostUserDevice represents a qemu vhost-user device meant to be passed
// in to the guest
type VhostUserDevice struct {

View File

@ -1203,3 +1203,18 @@ func TestAppendFwcfg(t *testing.T) {
}
testAppend(fwcfg, fwcfgString, t)
}
func TestAppendPVPanicDevice(t *testing.T) {
testCases := []struct {
dev Device
out string
}{
{nil, ""},
{PVPanicDevice{}, "-device pvpanic"},
{PVPanicDevice{NoShutdown: true}, "-device pvpanic -no-shutdown"},
}
for _, tc := range testCases {
testAppend(tc.dev, tc.out, t)
}
}