From ea1d799f7961617dc7be7b70564444e66f6c890a Mon Sep 17 00:00:00 2001 From: David Gibson Date: Sat, 20 Jun 2020 20:04:49 +1000 Subject: [PATCH] qemu: Only one element of qemuPaths map is relevant The qemuPaths field in qemuArchBase maps from machine type to the default qemu path. But, by the time we construct it, we already know the machine type, so that entry ends up being the only one we care about. So, collapse the map into a single path. As a bonus, the qemuPath() method can no longer fail. Signed-off-by: David Gibson --- src/runtime/virtcontainers/qemu.go | 5 +---- src/runtime/virtcontainers/qemu_amd64.go | 2 +- src/runtime/virtcontainers/qemu_arch_base.go | 13 ++++--------- src/runtime/virtcontainers/qemu_arch_base_test.go | 13 ++----------- src/runtime/virtcontainers/qemu_arm64.go | 6 +----- src/runtime/virtcontainers/qemu_ppc64le.go | 6 +----- src/runtime/virtcontainers/qemu_s390x.go | 6 +----- src/runtime/virtcontainers/qemu_test.go | 11 +---------- 8 files changed, 12 insertions(+), 50 deletions(-) diff --git a/src/runtime/virtcontainers/qemu.go b/src/runtime/virtcontainers/qemu.go index 31865b3b50..3d21f953b4 100644 --- a/src/runtime/virtcontainers/qemu.go +++ b/src/runtime/virtcontainers/qemu.go @@ -199,10 +199,7 @@ func (q *qemu) qemuPath() (string, error) { } if p == "" { - p, err = q.arch.qemuPath() - if err != nil { - return "", err - } + p = q.arch.qemuPath() } if _, err = os.Stat(p); os.IsNotExist(err) { diff --git a/src/runtime/virtcontainers/qemu_amd64.go b/src/runtime/virtcontainers/qemu_amd64.go index 92c056de60..b8e49683c4 100644 --- a/src/runtime/virtcontainers/qemu_amd64.go +++ b/src/runtime/virtcontainers/qemu_amd64.go @@ -116,8 +116,8 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) { q := &qemuAmd64{ qemuArchBase: qemuArchBase{ qemuMachine: *mp, + qemuExePath: qemuPaths[machineType], memoryOffset: config.MemOffset, - qemuPaths: qemuPaths, kernelParamsNonDebug: kernelParamsNonDebug, kernelParamsDebug: kernelParamsDebug, kernelParams: kernelParams, diff --git a/src/runtime/virtcontainers/qemu_arch_base.go b/src/runtime/virtcontainers/qemu_arch_base.go index 40fadc7c4c..ba2ab10385 100644 --- a/src/runtime/virtcontainers/qemu_arch_base.go +++ b/src/runtime/virtcontainers/qemu_arch_base.go @@ -41,7 +41,7 @@ type qemuArch interface { machine() govmmQemu.Machine // qemuPath returns the path to the QEMU binary - qemuPath() (string, error) + qemuPath() string // kernelParameters returns the kernel parameters // if debug is true then kernel debug parameters are included @@ -137,13 +137,13 @@ type qemuArch interface { type qemuArchBase struct { qemuMachine govmmQemu.Machine + qemuExePath string memoryOffset uint32 nestedRun bool vhost bool disableNvdimm bool dax bool networkIndex int - qemuPaths map[string]string kernelParamsNonDebug []Param kernelParamsDebug []Param kernelParams []Param @@ -242,13 +242,8 @@ func (q *qemuArchBase) machine() govmmQemu.Machine { return q.qemuMachine } -func (q *qemuArchBase) qemuPath() (string, error) { - p, ok := q.qemuPaths[q.qemuMachine.Type] - if !ok { - return "", fmt.Errorf("Unknown machine type: %s", q.qemuMachine.Type) - } - - return p, nil +func (q *qemuArchBase) qemuPath() string { + return q.qemuExePath } func (q *qemuArchBase) kernelParameters(debug bool) []Param { diff --git a/src/runtime/virtcontainers/qemu_arch_base_test.go b/src/runtime/virtcontainers/qemu_arch_base_test.go index 417a32b2a4..36da03bb7f 100644 --- a/src/runtime/virtcontainers/qemu_arch_base_test.go +++ b/src/runtime/virtcontainers/qemu_arch_base_test.go @@ -53,8 +53,8 @@ var qemuArchBaseKernelParams = []Param{ func newQemuArchBase() *qemuArchBase { return &qemuArchBase{ qemuMachine: qemuArchBaseMachine, + qemuExePath: qemuArchBaseQemuPaths[qemuArchBaseMachine.Type], nestedRun: false, - qemuPaths: qemuArchBaseQemuPaths, kernelParamsNonDebug: qemuArchBaseKernelParamsNonDebug, kernelParamsDebug: qemuArchBaseKernelParamsDebug, kernelParams: qemuArchBaseKernelParams, @@ -89,17 +89,8 @@ func TestQemuArchBaseQemuPath(t *testing.T) { assert := assert.New(t) qemuArchBase := newQemuArchBase() - p, err := qemuArchBase.qemuPath() - assert.NoError(err) + p := qemuArchBase.qemuPath() assert.Equal(p, qemuArchBaseQemuPath) - - paths := map[string]string{ - "bad": qemuArchBaseQemuPath, - } - qemuArchBase.qemuPaths = paths - p, err = qemuArchBase.qemuPath() - assert.Error(err) - assert.Equal("", p) } func TestQemuArchBaseKernelParameters(t *testing.T) { diff --git a/src/runtime/virtcontainers/qemu_arm64.go b/src/runtime/virtcontainers/qemu_arm64.go index eaec0087cb..dba48a3ecd 100644 --- a/src/runtime/virtcontainers/qemu_arm64.go +++ b/src/runtime/virtcontainers/qemu_arm64.go @@ -30,10 +30,6 @@ const qmpMigrationWaitTimeout = 10 * time.Second var defaultQemuMachineOptions = "usb=off,accel=kvm,gic-version=" + getGuestGICVersion() -var qemuPaths = map[string]string{ - QemuVirt: defaultQemuPath, -} - var kernelParams = []Param{ {"console", "hvc0"}, {"console", "hvc1"}, @@ -136,8 +132,8 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) { q := &qemuArm64{ qemuArchBase{ qemuMachine: supportedQemuMachine, + qemuExePath: defaultQemuPath, memoryOffset: config.MemOffset, - qemuPaths: qemuPaths, kernelParamsNonDebug: kernelParamsNonDebug, kernelParamsDebug: kernelParamsDebug, kernelParams: kernelParams, diff --git a/src/runtime/virtcontainers/qemu_ppc64le.go b/src/runtime/virtcontainers/qemu_ppc64le.go index b6b22f0712..e19340da28 100644 --- a/src/runtime/virtcontainers/qemu_ppc64le.go +++ b/src/runtime/virtcontainers/qemu_ppc64le.go @@ -27,10 +27,6 @@ const defaultQemuMachineOptions = "accel=kvm,usb=off" const qmpMigrationWaitTimeout = 5 * time.Second -var qemuPaths = map[string]string{ - QemuPseries: defaultQemuPath, -} - var kernelParams = []Param{ {"rcupdate.rcu_expedited", "1"}, {"reboot", "k"}, @@ -68,8 +64,8 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) { q := &qemuPPC64le{ qemuArchBase{ qemuMachine: supportedQemuMachine, + qemuExePath: defaultQemuPath, memoryOffset: config.MemOffset, - qemuPaths: qemuPaths, kernelParamsNonDebug: kernelParamsNonDebug, kernelParamsDebug: kernelParamsDebug, kernelParams: kernelParams, diff --git a/src/runtime/virtcontainers/qemu_s390x.go b/src/runtime/virtcontainers/qemu_s390x.go index 4ad12a5e69..beaad5eae4 100644 --- a/src/runtime/virtcontainers/qemu_s390x.go +++ b/src/runtime/virtcontainers/qemu_s390x.go @@ -29,10 +29,6 @@ const virtioSerialCCW = "virtio-serial-ccw" const qmpMigrationWaitTimeout = 5 * time.Second -var qemuPaths = map[string]string{ - QemuCCWVirtio: defaultQemuPath, -} - // Verify needed parameters var kernelParams = []Param{ {"console", "ttysclp0"}, @@ -66,8 +62,8 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) { q := &qemuS390x{ qemuArchBase{ qemuMachine: supportedQemuMachine, + qemuExePath: defaultQemuPath, memoryOffset: config.MemOffset, - qemuPaths: qemuPaths, kernelParamsNonDebug: kernelParamsNonDebug, kernelParamsDebug: kernelParamsDebug, kernelParams: kernelParams, diff --git a/src/runtime/virtcontainers/qemu_test.go b/src/runtime/virtcontainers/qemu_test.go index f1fe9924e6..e6c254031a 100644 --- a/src/runtime/virtcontainers/qemu_test.go +++ b/src/runtime/virtcontainers/qemu_test.go @@ -346,9 +346,7 @@ func TestQemuQemuPath(t *testing.T) { Type: "pc", Options: "", }, - qemuPaths: map[string]string{ - "pc": expectedPath, - }, + qemuExePath: expectedPath, } q := &qemu{ @@ -372,13 +370,6 @@ func TestQemuQemuPath(t *testing.T) { path, err = q.qemuPath() assert.NoError(err) assert.Equal(path, expectedPath) - - // bad machine type, arch should fail - qkvm.qemuMachine.Type = "rgb" - q.arch = qkvm - path, err = q.qemuPath() - assert.Error(err) - assert.Equal(path, "") } func TestHotplugUnsupportedDeviceType(t *testing.T) {