diff --git a/Gopkg.lock b/Gopkg.lock index d111131745..a2ef67389c 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -86,7 +86,7 @@ [[projects]] name = "github.com/intel/govmm" packages = ["qemu"] - revision = "82c67ab9b21e8cd0042b6c2d3be2d3705a511603" + revision = "1509acf1862ae5154c5c096f9318bd3eb434d816" [[projects]] name = "github.com/kata-containers/agent" @@ -250,6 +250,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "bb2ac1696f8e90526e492a6d54362549094fa844c17fbd06c727198bff6667ef" + inputs-digest = "f7c3a1b7f5cb5f891a3badcb7323f3b5fc0fa79f69dd6532ec2e2be2baafaf98" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 81c3705509..67f31bead2 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -56,7 +56,7 @@ [[constraint]] name = "github.com/intel/govmm" - revision = "82c67ab9b21e8cd0042b6c2d3be2d3705a511603" + revision = "1509acf1862ae5154c5c096f9318bd3eb434d816" [[constraint]] name = "github.com/kata-containers/agent" diff --git a/vendor/github.com/intel/govmm/qemu/qemu.go b/vendor/github.com/intel/govmm/qemu/qemu.go index 89d053fe95..4b0e41795a 100644 --- a/vendor/github.com/intel/govmm/qemu/qemu.go +++ b/vendor/github.com/intel/govmm/qemu/qemu.go @@ -841,6 +841,9 @@ type SCSIController struct { // DisableModern prevents qemu from relying on fast MMIO. DisableModern bool + + // IOThread is the IO thread on which IO will be handled + IOThread string } // Valid returns true if the SCSIController structure is valid and complete. @@ -867,6 +870,9 @@ func (scsiCon SCSIController) QemuParams(config *Config) []string { if scsiCon.DisableModern { devParams = append(devParams, fmt.Sprintf("disable-modern=true")) } + if scsiCon.IOThread != "" { + devParams = append(devParams, fmt.Sprintf("iothread=%s", scsiCon.IOThread)) + } qemuParams = append(qemuParams, "-device") qemuParams = append(qemuParams, strings.Join(devParams, ",")) @@ -1159,6 +1165,11 @@ type Knobs struct { Realtime bool } +// IOThread allows IO to be performed on a separate thread. +type IOThread struct { + ID string +} + // Config is the qemu configuration structure. // It allows for passing custom settings and parameters to the qemu API. type Config struct { @@ -1213,6 +1224,8 @@ type Config struct { // fds is a list of open file descriptors to be passed to the spawned qemu process fds []*os.File + IOThreads []IOThread + qemuParams []string } @@ -1481,6 +1494,15 @@ func (config *Config) appendBios() { } } +func (config *Config) appendIOThreads() { + for _, t := range config.IOThreads { + if t.ID != "" { + config.qemuParams = append(config.qemuParams, "-object") + config.qemuParams = append(config.qemuParams, fmt.Sprintf("iothread,id=%s", t.ID)) + } + } +} + // LaunchQemu can be used to launch a new qemu instance. // // The Config parameter contains a set of qemu parameters and settings. @@ -1504,6 +1526,7 @@ func LaunchQemu(config Config, logger QMPLog) (string, error) { config.appendKnobs() config.appendKernel() config.appendBios() + config.appendIOThreads() if err := config.appendCPUs(); err != nil { return "", err