mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-05-02 13:44:33 +00:00
qemu: Remove useless table from qemuArchBase
The supportedQemuMachines array in qemuArchBase has a list of all the qemu machine types supported for the architecture, with the options for each. But, the machineType field already tells us which of the machine types we're actually using, and that's the only entry we actually care about. So, drop the table, and just have a single value with the machine type we're actually using. As a bonus that means the machine() method can no longer fail, so no longer needs an error return. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
97a02131c6
commit
5dffffd432
@ -335,10 +335,7 @@ func (q *qemu) qmpSocketPath(id string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemu) getQemuMachine() (govmmQemu.Machine, error) {
|
func (q *qemu) getQemuMachine() (govmmQemu.Machine, error) {
|
||||||
machine, err := q.arch.machine()
|
machine := q.arch.machine()
|
||||||
if err != nil {
|
|
||||||
return govmmQemu.Machine{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
accelerators := q.config.MachineAccelerators
|
accelerators := q.config.MachineAccelerators
|
||||||
if accelerators != "" {
|
if accelerators != "" {
|
||||||
@ -1542,10 +1539,7 @@ func (q *qemu) hotplugAddCPUs(amount uint32) (uint32, error) {
|
|||||||
return 0, fmt.Errorf("failed to query hotpluggable CPUs: %v", err)
|
return 0, fmt.Errorf("failed to query hotpluggable CPUs: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
machine, err := q.arch.machine()
|
machine := q.arch.machine()
|
||||||
if err != nil {
|
|
||||||
return 0, fmt.Errorf("failed to query machine type: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var hotpluggedVCPUs uint32
|
var hotpluggedVCPUs uint32
|
||||||
for _, hc := range hotpluggableVCPUs {
|
for _, hc := range hotpluggableVCPUs {
|
||||||
|
@ -100,7 +100,6 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) {
|
|||||||
factory = true
|
factory = true
|
||||||
}
|
}
|
||||||
|
|
||||||
var qemuMachines = supportedQemuMachines
|
|
||||||
if config.IOMMU {
|
if config.IOMMU {
|
||||||
var q35QemuIOMMUOptions = "accel=kvm,kernel_irqchip=split"
|
var q35QemuIOMMUOptions = "accel=kvm,kernel_irqchip=split"
|
||||||
|
|
||||||
@ -109,22 +108,16 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) {
|
|||||||
kernelParams = append(kernelParams,
|
kernelParams = append(kernelParams,
|
||||||
Param{"iommu", "pt"})
|
Param{"iommu", "pt"})
|
||||||
|
|
||||||
for i, m := range qemuMachines {
|
if mp.Type == QemuQ35 {
|
||||||
if m.Type == QemuQ35 {
|
mp.Options = q35QemuIOMMUOptions
|
||||||
qemuMachines[i].Options = q35QemuIOMMUOptions
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
kernelParams = append(kernelParams,
|
|
||||||
Param{"iommu", "off"})
|
|
||||||
}
|
|
||||||
|
|
||||||
q := &qemuAmd64{
|
q := &qemuAmd64{
|
||||||
qemuArchBase: qemuArchBase{
|
qemuArchBase: qemuArchBase{
|
||||||
machineType: machineType,
|
qemuMachine: *mp,
|
||||||
memoryOffset: config.MemOffset,
|
memoryOffset: config.MemOffset,
|
||||||
qemuPaths: qemuPaths,
|
qemuPaths: qemuPaths,
|
||||||
supportedQemuMachines: qemuMachines,
|
|
||||||
kernelParamsNonDebug: kernelParamsNonDebug,
|
kernelParamsNonDebug: kernelParamsNonDebug,
|
||||||
kernelParamsDebug: kernelParamsDebug,
|
kernelParamsDebug: kernelParamsDebug,
|
||||||
kernelParams: kernelParams,
|
kernelParams: kernelParams,
|
||||||
@ -142,9 +135,9 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) {
|
|||||||
func (q *qemuAmd64) capabilities() types.Capabilities {
|
func (q *qemuAmd64) capabilities() types.Capabilities {
|
||||||
var caps types.Capabilities
|
var caps types.Capabilities
|
||||||
|
|
||||||
if q.machineType == QemuPC ||
|
if q.qemuMachine.Type == QemuPC ||
|
||||||
q.machineType == QemuQ35 ||
|
q.qemuMachine.Type == QemuQ35 ||
|
||||||
q.machineType == QemuVirt {
|
q.qemuMachine.Type == QemuVirt {
|
||||||
caps.SetBlockDeviceHotplugSupport()
|
caps.SetBlockDeviceHotplugSupport()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +148,7 @@ func (q *qemuAmd64) capabilities() types.Capabilities {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemuAmd64) bridges(number uint32) {
|
func (q *qemuAmd64) bridges(number uint32) {
|
||||||
q.Bridges = genericBridges(number, q.machineType)
|
q.Bridges = genericBridges(number, q.qemuMachine.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemuAmd64) cpuModel() string {
|
func (q *qemuAmd64) cpuModel() string {
|
||||||
@ -187,5 +180,5 @@ func (q *qemuAmd64) appendImage(devices []govmmQemu.Device, path string) ([]govm
|
|||||||
|
|
||||||
// appendBridges appends to devices the given bridges
|
// appendBridges appends to devices the given bridges
|
||||||
func (q *qemuAmd64) appendBridges(devices []govmmQemu.Device) []govmmQemu.Device {
|
func (q *qemuAmd64) appendBridges(devices []govmmQemu.Device) []govmmQemu.Device {
|
||||||
return genericAppendBridges(devices, q.Bridges, q.machineType)
|
return genericAppendBridges(devices, q.Bridges, q.qemuMachine.Type)
|
||||||
}
|
}
|
||||||
|
@ -138,9 +138,7 @@ func TestQemuAmd64AppendImage(t *testing.T) {
|
|||||||
cfg.DisableImageNvdimm = false
|
cfg.DisableImageNvdimm = false
|
||||||
amd64, err := newQemuArch(cfg)
|
amd64, err := newQemuArch(cfg)
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
for _, m := range amd64.(*qemuAmd64).supportedQemuMachines {
|
assert.Contains(amd64.machine().Options, qemuNvdimmOption)
|
||||||
assert.Contains(m.Options, qemuNvdimmOption)
|
|
||||||
}
|
|
||||||
|
|
||||||
expectedOut := []govmmQemu.Device{
|
expectedOut := []govmmQemu.Device{
|
||||||
govmmQemu.Object{
|
govmmQemu.Object{
|
||||||
@ -163,9 +161,7 @@ func TestQemuAmd64AppendImage(t *testing.T) {
|
|||||||
cfg.DisableImageNvdimm = true
|
cfg.DisableImageNvdimm = true
|
||||||
amd64, err = newQemuArch(cfg)
|
amd64, err = newQemuArch(cfg)
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
for _, m := range amd64.(*qemuAmd64).supportedQemuMachines {
|
assert.NotContains(amd64.machine().Options, qemuNvdimmOption)
|
||||||
assert.NotContains(m.Options, qemuNvdimmOption)
|
|
||||||
}
|
|
||||||
|
|
||||||
found := false
|
found := false
|
||||||
devices, err = amd64.appendImage(nil, f.Name())
|
devices, err = amd64.appendImage(nil, f.Name())
|
||||||
@ -243,9 +239,7 @@ func TestQemuAmd64WithInitrd(t *testing.T) {
|
|||||||
amd64, err := newQemuArch(cfg)
|
amd64, err := newQemuArch(cfg)
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
|
|
||||||
for _, m := range amd64.(*qemuAmd64).supportedQemuMachines {
|
assert.NotContains(amd64.machine().Options, qemuNvdimmOption)
|
||||||
assert.NotContains(m.Options, qemuNvdimmOption)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestQemuAmd64Iommu(t *testing.T) {
|
func TestQemuAmd64Iommu(t *testing.T) {
|
||||||
@ -259,8 +253,6 @@ func TestQemuAmd64Iommu(t *testing.T) {
|
|||||||
p := qemu.kernelParameters(false)
|
p := qemu.kernelParameters(false)
|
||||||
assert.Contains(p, Param{"intel_iommu", "on"})
|
assert.Contains(p, Param{"intel_iommu", "on"})
|
||||||
|
|
||||||
m, err := qemu.machine()
|
m := qemu.machine()
|
||||||
|
|
||||||
assert.NoError(err)
|
|
||||||
assert.Contains(m.Options, "kernel_irqchip=split")
|
assert.Contains(m.Options, "kernel_irqchip=split")
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@ type qemuArch interface {
|
|||||||
disableVhostNet()
|
disableVhostNet()
|
||||||
|
|
||||||
// machine returns the machine type
|
// machine returns the machine type
|
||||||
machine() (govmmQemu.Machine, error)
|
machine() govmmQemu.Machine
|
||||||
|
|
||||||
// qemuPath returns the path to the QEMU binary
|
// qemuPath returns the path to the QEMU binary
|
||||||
qemuPath() (string, error)
|
qemuPath() (string, error)
|
||||||
@ -136,7 +136,7 @@ type qemuArch interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type qemuArchBase struct {
|
type qemuArchBase struct {
|
||||||
machineType string
|
qemuMachine govmmQemu.Machine
|
||||||
memoryOffset uint32
|
memoryOffset uint32
|
||||||
nestedRun bool
|
nestedRun bool
|
||||||
vhost bool
|
vhost bool
|
||||||
@ -144,7 +144,6 @@ type qemuArchBase struct {
|
|||||||
dax bool
|
dax bool
|
||||||
networkIndex int
|
networkIndex int
|
||||||
qemuPaths map[string]string
|
qemuPaths map[string]string
|
||||||
supportedQemuMachines []govmmQemu.Machine
|
|
||||||
kernelParamsNonDebug []Param
|
kernelParamsNonDebug []Param
|
||||||
kernelParamsDebug []Param
|
kernelParamsDebug []Param
|
||||||
kernelParams []Param
|
kernelParams []Param
|
||||||
@ -239,20 +238,14 @@ func (q *qemuArchBase) disableVhostNet() {
|
|||||||
q.vhost = false
|
q.vhost = false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemuArchBase) machine() (govmmQemu.Machine, error) {
|
func (q *qemuArchBase) machine() govmmQemu.Machine {
|
||||||
for _, m := range q.supportedQemuMachines {
|
return q.qemuMachine
|
||||||
if m.Type == q.machineType {
|
|
||||||
return m, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return govmmQemu.Machine{}, fmt.Errorf("unrecognised machine type: %v", q.machineType)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemuArchBase) qemuPath() (string, error) {
|
func (q *qemuArchBase) qemuPath() (string, error) {
|
||||||
p, ok := q.qemuPaths[q.machineType]
|
p, ok := q.qemuPaths[q.qemuMachine.Type]
|
||||||
if !ok {
|
if !ok {
|
||||||
return "", fmt.Errorf("Unknown machine type: %s", q.machineType)
|
return "", fmt.Errorf("Unknown machine type: %s", q.qemuMachine.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
return p, nil
|
return p, nil
|
||||||
@ -681,12 +674,9 @@ func (q *qemuArchBase) handleImagePath(config HypervisorConfig) {
|
|||||||
if config.ImagePath != "" {
|
if config.ImagePath != "" {
|
||||||
kernelRootParams := commonVirtioblkKernelRootParams
|
kernelRootParams := commonVirtioblkKernelRootParams
|
||||||
if !q.disableNvdimm {
|
if !q.disableNvdimm {
|
||||||
for i := range q.supportedQemuMachines {
|
q.qemuMachine.Options = strings.Join([]string{
|
||||||
q.supportedQemuMachines[i].Options = strings.Join([]string{
|
q.qemuMachine.Options, qemuNvdimmOption,
|
||||||
q.supportedQemuMachines[i].Options,
|
|
||||||
qemuNvdimmOption,
|
|
||||||
}, ",")
|
}, ",")
|
||||||
}
|
|
||||||
if q.dax {
|
if q.dax {
|
||||||
kernelRootParams = commonNvdimmKernelRootParams
|
kernelRootParams = commonNvdimmKernelRootParams
|
||||||
} else {
|
} else {
|
||||||
@ -767,13 +757,12 @@ func (q *qemuArchBase) addBridge(b types.Bridge) {
|
|||||||
|
|
||||||
// appendPCIeRootPortDevice appends to devices the given pcie-root-port
|
// appendPCIeRootPortDevice appends to devices the given pcie-root-port
|
||||||
func (q *qemuArchBase) appendPCIeRootPortDevice(devices []govmmQemu.Device, number uint32) []govmmQemu.Device {
|
func (q *qemuArchBase) appendPCIeRootPortDevice(devices []govmmQemu.Device, number uint32) []govmmQemu.Device {
|
||||||
return genericAppendPCIeRootPort(devices, number, q.machineType)
|
return genericAppendPCIeRootPort(devices, number, q.qemuMachine.Type)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// appendIOMMU appends a virtual IOMMU device
|
// appendIOMMU appends a virtual IOMMU device
|
||||||
func (q *qemuArchBase) appendIOMMU(devices []govmmQemu.Device) ([]govmmQemu.Device, error) {
|
func (q *qemuArchBase) appendIOMMU(devices []govmmQemu.Device) ([]govmmQemu.Device, error) {
|
||||||
switch q.machineType {
|
switch q.qemuMachine.Type {
|
||||||
case QemuQ35:
|
case QemuQ35:
|
||||||
iommu := govmmQemu.IommuDev{
|
iommu := govmmQemu.IommuDev{
|
||||||
Intremap: true,
|
Intremap: true,
|
||||||
@ -784,6 +773,6 @@ func (q *qemuArchBase) appendIOMMU(devices []govmmQemu.Device) ([]govmmQemu.Devi
|
|||||||
devices = append(devices, iommu)
|
devices = append(devices, iommu)
|
||||||
return devices, nil
|
return devices, nil
|
||||||
default:
|
default:
|
||||||
return devices, fmt.Errorf("Machine Type %s does not support vIOMMU", q.machineType)
|
return devices, fmt.Errorf("Machine Type %s does not support vIOMMU", q.qemuMachine.Type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,12 +23,15 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
qemuArchBaseMachineType = "pc"
|
|
||||||
qemuArchBaseQemuPath = "/usr/bin/qemu-system-x86_64"
|
qemuArchBaseQemuPath = "/usr/bin/qemu-system-x86_64"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var qemuArchBaseMachine = govmmQemu.Machine{
|
||||||
|
Type: "pc",
|
||||||
|
}
|
||||||
|
|
||||||
var qemuArchBaseQemuPaths = map[string]string{
|
var qemuArchBaseQemuPaths = map[string]string{
|
||||||
qemuArchBaseMachineType: qemuArchBaseQemuPath,
|
qemuArchBaseMachine.Type: qemuArchBaseQemuPath,
|
||||||
}
|
}
|
||||||
|
|
||||||
var qemuArchBaseKernelParamsNonDebug = []Param{
|
var qemuArchBaseKernelParamsNonDebug = []Param{
|
||||||
@ -47,18 +50,11 @@ var qemuArchBaseKernelParams = []Param{
|
|||||||
{"rootfstype", "ext4"},
|
{"rootfstype", "ext4"},
|
||||||
}
|
}
|
||||||
|
|
||||||
var qemuArchBaseSupportedQemuMachines = []govmmQemu.Machine{
|
|
||||||
{
|
|
||||||
Type: qemuArchBaseMachineType,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func newQemuArchBase() *qemuArchBase {
|
func newQemuArchBase() *qemuArchBase {
|
||||||
return &qemuArchBase{
|
return &qemuArchBase{
|
||||||
machineType: qemuArchBaseMachineType,
|
qemuMachine: qemuArchBaseMachine,
|
||||||
nestedRun: false,
|
nestedRun: false,
|
||||||
qemuPaths: qemuArchBaseQemuPaths,
|
qemuPaths: qemuArchBaseQemuPaths,
|
||||||
supportedQemuMachines: qemuArchBaseSupportedQemuMachines,
|
|
||||||
kernelParamsNonDebug: qemuArchBaseKernelParamsNonDebug,
|
kernelParamsNonDebug: qemuArchBaseKernelParamsNonDebug,
|
||||||
kernelParamsDebug: qemuArchBaseKernelParamsDebug,
|
kernelParamsDebug: qemuArchBaseKernelParamsDebug,
|
||||||
kernelParams: qemuArchBaseKernelParams,
|
kernelParams: qemuArchBaseKernelParams,
|
||||||
@ -85,19 +81,8 @@ func TestQemuArchBaseMachine(t *testing.T) {
|
|||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
qemuArchBase := newQemuArchBase()
|
qemuArchBase := newQemuArchBase()
|
||||||
|
|
||||||
m, err := qemuArchBase.machine()
|
m := qemuArchBase.machine()
|
||||||
assert.NoError(err)
|
assert.Equal(m.Type, qemuArchBaseMachine.Type)
|
||||||
assert.Equal(m.Type, qemuArchBaseMachineType)
|
|
||||||
|
|
||||||
machines := []govmmQemu.Machine{
|
|
||||||
{
|
|
||||||
Type: "bad",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
qemuArchBase.supportedQemuMachines = machines
|
|
||||||
m, err = qemuArchBase.machine()
|
|
||||||
assert.Error(err)
|
|
||||||
assert.Equal("", m.Type)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestQemuArchBaseQemuPath(t *testing.T) {
|
func TestQemuArchBaseQemuPath(t *testing.T) {
|
||||||
@ -166,7 +151,7 @@ func TestQemuAddDeviceToBridge(t *testing.T) {
|
|||||||
|
|
||||||
// addDeviceToBridge successfully
|
// addDeviceToBridge successfully
|
||||||
q := newQemuArchBase()
|
q := newQemuArchBase()
|
||||||
q.machineType = QemuPC
|
q.qemuMachine.Type = QemuPC
|
||||||
|
|
||||||
q.bridges(1)
|
q.bridges(1)
|
||||||
for i := uint32(1); i <= types.PCIBridgeMaxCapacity; i++ {
|
for i := uint32(1); i <= types.PCIBridgeMaxCapacity; i++ {
|
||||||
@ -181,7 +166,7 @@ func TestQemuAddDeviceToBridge(t *testing.T) {
|
|||||||
|
|
||||||
// addDeviceToBridge fails cause q.Bridges == 0
|
// addDeviceToBridge fails cause q.Bridges == 0
|
||||||
q = newQemuArchBase()
|
q = newQemuArchBase()
|
||||||
q.machineType = QemuPCLite
|
q.qemuMachine.Type = QemuPCLite
|
||||||
q.bridges(0)
|
q.bridges(0)
|
||||||
_, _, err = q.addDeviceToBridge("qemu-bridge", types.PCI)
|
_, _, err = q.addDeviceToBridge("qemu-bridge", types.PCI)
|
||||||
if assert.Error(err) {
|
if assert.Error(err) {
|
||||||
@ -581,11 +566,11 @@ func TestQemuArchBaseAppendIOMMU(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
// Test IOMMU is not appended to PC machine type
|
// Test IOMMU is not appended to PC machine type
|
||||||
qemuArchBase.machineType = QemuPC
|
qemuArchBase.qemuMachine.Type = QemuPC
|
||||||
devices, err = qemuArchBase.appendIOMMU(devices)
|
devices, err = qemuArchBase.appendIOMMU(devices)
|
||||||
assert.Error(err)
|
assert.Error(err)
|
||||||
|
|
||||||
qemuArchBase.machineType = QemuQ35
|
qemuArchBase.qemuMachine.Type = QemuQ35
|
||||||
devices, err = qemuArchBase.appendIOMMU(devices)
|
devices, err = qemuArchBase.appendIOMMU(devices)
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
assert.Equal(expectedOut, devices)
|
assert.Equal(expectedOut, devices)
|
||||||
|
@ -40,11 +40,9 @@ var kernelParams = []Param{
|
|||||||
{"iommu.passthrough", "0"},
|
{"iommu.passthrough", "0"},
|
||||||
}
|
}
|
||||||
|
|
||||||
var supportedQemuMachines = []govmmQemu.Machine{
|
var supportedQemuMachine = govmmQemu.Machine {
|
||||||
{
|
|
||||||
Type: QemuVirt,
|
Type: QemuVirt,
|
||||||
Options: defaultQemuMachineOptions,
|
Options: defaultQemuMachineOptions,
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logger returns a logrus logger appropriate for logging qemu-aarch64 messages
|
// Logger returns a logrus logger appropriate for logging qemu-aarch64 messages
|
||||||
@ -137,10 +135,9 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) {
|
|||||||
|
|
||||||
q := &qemuArm64{
|
q := &qemuArm64{
|
||||||
qemuArchBase{
|
qemuArchBase{
|
||||||
machineType: machineType,
|
qemuMachine: supportedQemuMachine,
|
||||||
memoryOffset: config.MemOffset,
|
memoryOffset: config.MemOffset,
|
||||||
qemuPaths: qemuPaths,
|
qemuPaths: qemuPaths,
|
||||||
supportedQemuMachines: supportedQemuMachines,
|
|
||||||
kernelParamsNonDebug: kernelParamsNonDebug,
|
kernelParamsNonDebug: kernelParamsNonDebug,
|
||||||
kernelParamsDebug: kernelParamsDebug,
|
kernelParamsDebug: kernelParamsDebug,
|
||||||
kernelParams: kernelParams,
|
kernelParams: kernelParams,
|
||||||
@ -154,12 +151,12 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemuArm64) bridges(number uint32) {
|
func (q *qemuArm64) bridges(number uint32) {
|
||||||
q.Bridges = genericBridges(number, q.machineType)
|
q.Bridges = genericBridges(number, q.qemuMachine.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
// appendBridges appends to devices the given bridges
|
// appendBridges appends to devices the given bridges
|
||||||
func (q *qemuArm64) appendBridges(devices []govmmQemu.Device) []govmmQemu.Device {
|
func (q *qemuArm64) appendBridges(devices []govmmQemu.Device) []govmmQemu.Device {
|
||||||
return genericAppendBridges(devices, q.Bridges, q.machineType)
|
return genericAppendBridges(devices, q.Bridges, q.qemuMachine.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemuArm64) appendImage(devices []govmmQemu.Device, path string) ([]govmmQemu.Device, error) {
|
func (q *qemuArm64) appendImage(devices []govmmQemu.Device, path string) ([]govmmQemu.Device, error) {
|
||||||
|
@ -152,9 +152,7 @@ func TestQemuArm64AppendImage(t *testing.T) {
|
|||||||
cfg := qemuConfig(QemuVirt)
|
cfg := qemuConfig(QemuVirt)
|
||||||
cfg.ImagePath = f.Name()
|
cfg.ImagePath = f.Name()
|
||||||
arm64 := newQemuArch(cfg)
|
arm64 := newQemuArch(cfg)
|
||||||
for _, m := range arm64.(*qemuArm64).supportedQemuMachines {
|
assert.Contains(m.machine().Options, qemuNvdimmOption)
|
||||||
assert.Contains(m.Options, qemuNvdimmOption)
|
|
||||||
}
|
|
||||||
|
|
||||||
expectedOut := []govmmQemu.Device{
|
expectedOut := []govmmQemu.Device{
|
||||||
govmmQemu.Object{
|
govmmQemu.Object{
|
||||||
@ -182,7 +180,5 @@ func TestQemuArm64WithInitrd(t *testing.T) {
|
|||||||
cfg.InitrdPath = "dummy-initrd"
|
cfg.InitrdPath = "dummy-initrd"
|
||||||
arm64 := newQemuArch(cfg)
|
arm64 := newQemuArch(cfg)
|
||||||
|
|
||||||
for _, m := range arm64.(*qemuArm64).supportedQemuMachines {
|
assert.NotContains(m.machine().Options, qemuNvdimmOption)
|
||||||
assert.NotContains(m.Options, qemuNvdimmOption)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -40,11 +40,9 @@ var kernelParams = []Param{
|
|||||||
{"net.ifnames", "0"},
|
{"net.ifnames", "0"},
|
||||||
}
|
}
|
||||||
|
|
||||||
var supportedQemuMachines = []govmmQemu.Machine{
|
var supportedQemuMachine = govmmQemu.Machine {
|
||||||
{
|
|
||||||
Type: QemuPseries,
|
Type: QemuPseries,
|
||||||
Options: defaultQemuMachineOptions,
|
Options: defaultQemuMachineOptions,
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logger returns a logrus logger appropriate for logging qemu messages
|
// Logger returns a logrus logger appropriate for logging qemu messages
|
||||||
@ -69,10 +67,9 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) {
|
|||||||
|
|
||||||
q := &qemuPPC64le{
|
q := &qemuPPC64le{
|
||||||
qemuArchBase{
|
qemuArchBase{
|
||||||
machineType: machineType,
|
qemuMachine: supportedQemuMachine,
|
||||||
memoryOffset: config.MemOffset,
|
memoryOffset: config.MemOffset,
|
||||||
qemuPaths: qemuPaths,
|
qemuPaths: qemuPaths,
|
||||||
supportedQemuMachines: supportedQemuMachines,
|
|
||||||
kernelParamsNonDebug: kernelParamsNonDebug,
|
kernelParamsNonDebug: kernelParamsNonDebug,
|
||||||
kernelParamsDebug: kernelParamsDebug,
|
kernelParamsDebug: kernelParamsDebug,
|
||||||
kernelParams: kernelParams,
|
kernelParams: kernelParams,
|
||||||
@ -90,7 +87,7 @@ func (q *qemuPPC64le) capabilities() types.Capabilities {
|
|||||||
var caps types.Capabilities
|
var caps types.Capabilities
|
||||||
|
|
||||||
// pseries machine type supports hotplugging drives
|
// pseries machine type supports hotplugging drives
|
||||||
if q.machineType == QemuPseries {
|
if q.qemuMachine.Type == QemuPseries {
|
||||||
caps.SetBlockDeviceHotplugSupport()
|
caps.SetBlockDeviceHotplugSupport()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +98,7 @@ func (q *qemuPPC64le) capabilities() types.Capabilities {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemuPPC64le) bridges(number uint32) {
|
func (q *qemuPPC64le) bridges(number uint32) {
|
||||||
q.Bridges = genericBridges(number, q.machineType)
|
q.Bridges = genericBridges(number, q.qemuMachine.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemuPPC64le) cpuModel() string {
|
func (q *qemuPPC64le) cpuModel() string {
|
||||||
@ -117,7 +114,7 @@ func (q *qemuPPC64le) memoryTopology(memoryMb, hostMemoryMb uint64, slots uint8)
|
|||||||
|
|
||||||
// appendBridges appends to devices the given bridges
|
// appendBridges appends to devices the given bridges
|
||||||
func (q *qemuPPC64le) appendBridges(devices []govmmQemu.Device) []govmmQemu.Device {
|
func (q *qemuPPC64le) appendBridges(devices []govmmQemu.Device) []govmmQemu.Device {
|
||||||
return genericAppendBridges(devices, q.Bridges, q.machineType)
|
return genericAppendBridges(devices, q.Bridges, q.qemuMachine.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemuPPC64le) appendIOMMU(devices []govmmQemu.Device) ([]govmmQemu.Device, error) {
|
func (q *qemuPPC64le) appendIOMMU(devices []govmmQemu.Device) ([]govmmQemu.Device, error) {
|
||||||
|
@ -40,11 +40,9 @@ var kernelParams = []Param{
|
|||||||
|
|
||||||
var ccwbridge = types.NewBridge(types.CCW, "", make(map[uint32]string, types.CCWBridgeMaxCapacity), 0)
|
var ccwbridge = types.NewBridge(types.CCW, "", make(map[uint32]string, types.CCWBridgeMaxCapacity), 0)
|
||||||
|
|
||||||
var supportedQemuMachines = []govmmQemu.Machine{
|
var supportedQemuMachine = govmmQemu.Machine {
|
||||||
{
|
|
||||||
Type: QemuCCWVirtio,
|
Type: QemuCCWVirtio,
|
||||||
Options: defaultQemuMachineOptions,
|
Options: defaultQemuMachineOptions,
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MaxQemuVCPUs returns the maximum number of vCPUs supported
|
// MaxQemuVCPUs returns the maximum number of vCPUs supported
|
||||||
@ -67,10 +65,9 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) {
|
|||||||
|
|
||||||
q := &qemuS390x{
|
q := &qemuS390x{
|
||||||
qemuArchBase{
|
qemuArchBase{
|
||||||
machineType: machineType,
|
qemuMachine: supportedQemuMachine,
|
||||||
memoryOffset: config.MemOffset,
|
memoryOffset: config.MemOffset,
|
||||||
qemuPaths: qemuPaths,
|
qemuPaths: qemuPaths,
|
||||||
supportedQemuMachines: supportedQemuMachines,
|
|
||||||
kernelParamsNonDebug: kernelParamsNonDebug,
|
kernelParamsNonDebug: kernelParamsNonDebug,
|
||||||
kernelParamsDebug: kernelParamsDebug,
|
kernelParamsDebug: kernelParamsDebug,
|
||||||
kernelParams: kernelParams,
|
kernelParams: kernelParams,
|
||||||
@ -89,7 +86,7 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemuS390x) bridges(number uint32) {
|
func (q *qemuS390x) bridges(number uint32) {
|
||||||
q.Bridges = genericBridges(number, q.machineType)
|
q.Bridges = genericBridges(number, q.qemuMachine.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
// appendConsole appends a console to devices.
|
// appendConsole appends a console to devices.
|
||||||
@ -230,7 +227,7 @@ func (q *qemuS390x) append9PVolume(devices []govmmQemu.Device, volume types.Volu
|
|||||||
|
|
||||||
// appendBridges appends to devices the given bridges
|
// appendBridges appends to devices the given bridges
|
||||||
func (q *qemuS390x) appendBridges(devices []govmmQemu.Device) []govmmQemu.Device {
|
func (q *qemuS390x) appendBridges(devices []govmmQemu.Device) []govmmQemu.Device {
|
||||||
return genericAppendBridges(devices, q.Bridges, q.machineType)
|
return genericAppendBridges(devices, q.Bridges, q.qemuMachine.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *qemuS390x) appendSCSIController(devices []govmmQemu.Device, enableIOThreads bool) ([]govmmQemu.Device, *govmmQemu.IOThread, error) {
|
func (q *qemuS390x) appendSCSIController(devices []govmmQemu.Device, enableIOThreads bool) ([]govmmQemu.Device, *govmmQemu.IOThread, error) {
|
||||||
|
@ -342,7 +342,10 @@ func TestQemuQemuPath(t *testing.T) {
|
|||||||
qemuConfig := newQemuConfig()
|
qemuConfig := newQemuConfig()
|
||||||
qemuConfig.HypervisorPath = expectedPath
|
qemuConfig.HypervisorPath = expectedPath
|
||||||
qkvm := &qemuArchBase{
|
qkvm := &qemuArchBase{
|
||||||
machineType: "pc",
|
qemuMachine: govmmQemu.Machine{
|
||||||
|
Type: "pc",
|
||||||
|
Options: "",
|
||||||
|
},
|
||||||
qemuPaths: map[string]string{
|
qemuPaths: map[string]string{
|
||||||
"pc": expectedPath,
|
"pc": expectedPath,
|
||||||
},
|
},
|
||||||
@ -371,7 +374,7 @@ func TestQemuQemuPath(t *testing.T) {
|
|||||||
assert.Equal(path, expectedPath)
|
assert.Equal(path, expectedPath)
|
||||||
|
|
||||||
// bad machine type, arch should fail
|
// bad machine type, arch should fail
|
||||||
qkvm.machineType = "rgb"
|
qkvm.qemuMachine.Type = "rgb"
|
||||||
q.arch = qkvm
|
q.arch = qkvm
|
||||||
path, err = q.qemuPath()
|
path, err = q.qemuPath()
|
||||||
assert.Error(err)
|
assert.Error(err)
|
||||||
|
Loading…
Reference in New Issue
Block a user