From d7836877e98957dcf1f8338ab2434e31bdcf5b51 Mon Sep 17 00:00:00 2001 From: bin liu Date: Mon, 19 Oct 2020 16:59:37 +0800 Subject: [PATCH] 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 --- qemu/qemu.go | 18 ++++++++++++++++++ qemu/qemu_test.go | 15 +++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/qemu/qemu.go b/qemu/qemu.go index 05cf9e16b..99a7677f2 100644 --- a/qemu/qemu.go +++ b/qemu/qemu.go @@ -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 { diff --git a/qemu/qemu_test.go b/qemu/qemu_test.go index 6928ede4b..cabc57cc6 100644 --- a/qemu/qemu_test.go +++ b/qemu/qemu_test.go @@ -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) + } +}