From 8cb8b24c05366f5f04137eefb65c789f6da92252 Mon Sep 17 00:00:00 2001 From: Salvatore Mazzarino Date: Mon, 12 Oct 2020 12:29:05 +0200 Subject: [PATCH] Make fw_cfg a slice Signed-off-by: Salvatore Mazzarino --- qemu/qemu.go | 36 ++++++++++++++++++++---------------- qemu/qemu_test.go | 16 +++++++++------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/qemu/qemu.go b/qemu/qemu.go index 05cf9e16b9..539c788925 100644 --- a/qemu/qemu.go +++ b/qemu/qemu.go @@ -2133,21 +2133,23 @@ func (fwcfg FwCfg) QemuParams(config *Config) []string { var fwcfgParams []string var qemuParams []string - if config.FwCfg.Name != "" { - fwcfgParams = append(fwcfgParams, fmt.Sprintf("name=%q", config.FwCfg.Name)) + for _, f := range config.FwCfg { + if f.Name != "" { + fwcfgParams = append(fwcfgParams, fmt.Sprintf("name=%s", f.Name)) - if config.FwCfg.File != "" { - fwcfgParams = append(fwcfgParams, fmt.Sprintf(",file=%q", config.FwCfg.File)) + if f.File != "" { + fwcfgParams = append(fwcfgParams, fmt.Sprintf(",file=%s", f.File)) + } + + if f.Str != "" { + fwcfgParams = append(fwcfgParams, fmt.Sprintf(",string=%s", f.Str)) + } } - if config.FwCfg.Str != "" { - fwcfgParams = append(fwcfgParams, fmt.Sprintf(",string=%q", config.FwCfg.Str)) - } + qemuParams = append(qemuParams, "-fw_cfg") + qemuParams = append(qemuParams, strings.Join(fwcfgParams, "")) } - qemuParams = append(qemuParams, "-fw_cfg") - qemuParams = append(qemuParams, strings.Join(fwcfgParams, "")) - return qemuParams } @@ -2285,7 +2287,7 @@ type Config struct { fds []*os.File // FwCfg is the -fw_cfg parameter - FwCfg FwCfg + FwCfg []FwCfg IOThreads []IOThread @@ -2624,12 +2626,14 @@ func (config *Config) appendFwCfg(logger QMPLog) { logger = qmpNullLogger{} } - if !config.FwCfg.Valid() { - logger.Errorf("fw_cfg is not valid: %+v", config.FwCfg) - return - } + for _, f := range config.FwCfg { + if !f.Valid() { + logger.Errorf("fw_cfg is not valid: %+v", config.FwCfg) + continue + } - config.qemuParams = append(config.qemuParams, config.FwCfg.QemuParams(config)...) + config.qemuParams = append(config.qemuParams, f.QemuParams(config)...) + } } // LaunchQemu can be used to launch a new qemu instance. diff --git a/qemu/qemu_test.go b/qemu/qemu_test.go index 6928ede4bc..f0cf812602 100644 --- a/qemu/qemu_test.go +++ b/qemu/qemu_test.go @@ -45,7 +45,7 @@ func testConfigAppend(config *Config, structure interface{}, expected string, t config.Machine = s config.appendMachine() case FwCfg: - config.FwCfg = s + config.FwCfg = []FwCfg{s} config.appendFwCfg(nil) case Device: @@ -1152,10 +1152,12 @@ func TestBadFwcfg(t *testing.T) { } c = &Config{ - FwCfg: FwCfg{ - Name: "name=opt/com.mycompany/blob", - File: "./my_blob.bin", - Str: "foo", + FwCfg: []FwCfg{ + { + Name: "name=opt/com.mycompany/blob", + File: "./my_blob.bin", + Str: "foo", + }, }, } c.appendFwCfg(nil) @@ -1189,14 +1191,14 @@ func TestIommu(t *testing.T) { } func TestAppendFwcfg(t *testing.T) { - fwcfgString := "-fw_cfg name=\"opt/com.mycompany/blob\",file=\"./my_blob.bin\"" + fwcfgString := "-fw_cfg name=opt/com.mycompany/blob,file=./my_blob.bin" fwcfg := FwCfg{ Name: "opt/com.mycompany/blob", File: "./my_blob.bin", } testAppend(fwcfg, fwcfgString, t) - fwcfgString = "-fw_cfg name=\"opt/com.mycompany/blob\",string=\"foo\"" + fwcfgString = "-fw_cfg name=opt/com.mycompany/blob,string=foo" fwcfg = FwCfg{ Name: "opt/com.mycompany/blob", Str: "foo",