qmp: add checks for the CPU toplogy

Support for function isSocketIDSupported, isThreadIDSupported and isDieIDSupported.
The functions check if the cpu driver and the qemu version support the
id parameter.

Fixes: #102

Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
This commit is contained in:
Alice Frosi 2019-07-22 13:28:30 +02:00
parent e894e7ad00
commit e0cf9d5c14

View File

@ -1158,6 +1158,30 @@ func (q *QMP) ExecutePCIVFIOMediatedDeviceAdd(ctx context.Context, devID, sysfsd
return q.executeCommand(ctx, "device_add", args, nil) return q.executeCommand(ctx, "device_add", args, nil)
} }
// isSocketIDSupported returns if the cpu driver supports the socket id option
func isSocketIDSupported(driver string) bool {
if driver == "host-s390x-cpu" || driver == "host-powerpc64-cpu" {
return false
}
return true
}
// isThreadIDSupported returns if the cpu driver supports the thread id option
func isThreadIDSupported(driver string) bool {
if driver == "host-s390x-cpu" || driver == "host-powerpc64-cpu" {
return false
}
return true
}
// isDieIDSupported returns if the cpu driver and the qemu version support the die id option
func (q *QMP) isDieIDSupported(driver string) bool {
if (q.version.Major > 4 || (q.version.Major == 4 && q.version.Minor >= 1)) && driver == "host-x86_64-cpu" {
return true
}
return false
}
// ExecuteCPUDeviceAdd adds a CPU to a QEMU instance using the device_add command. // ExecuteCPUDeviceAdd adds a CPU to a QEMU instance using the device_add command.
// driver is the CPU model, cpuID must be a unique ID to identify the CPU, socketID is the socket number within // driver is the CPU model, cpuID must be a unique ID to identify the CPU, socketID is the socket number within
// node/board the CPU belongs to, coreID is the core number within socket the CPU belongs to, threadID is the // node/board the CPU belongs to, coreID is the core number within socket the CPU belongs to, threadID is the
@ -1170,15 +1194,15 @@ func (q *QMP) ExecuteCPUDeviceAdd(ctx context.Context, driver, cpuID, socketID,
"core-id": coreID, "core-id": coreID,
} }
if socketID != "" { if socketID != "" && isSocketIDSupported(driver) {
args["socket-id"] = socketID args["socket-id"] = socketID
} }
if threadID != "" { if threadID != "" && isThreadIDSupported(driver) {
args["thread-id"] = threadID args["thread-id"] = threadID
} }
if q.version.Major > 4 || (q.version.Major == 4 && q.version.Minor >= 1) { if q.isDieIDSupported(driver) {
if dieID != "" { if dieID != "" {
args["die-id"] = dieID args["die-id"] = dieID
} }