@@ -246,6 +246,7 @@ typedef struct CpuTopology {
unsigned int threads;
unsigned int sockets;
unsigned int max_cpus;
+ unsigned int aux_cpus;
} CpuTopology;
/**
@@ -722,6 +722,7 @@ static void smp_parse(MachineState *ms, QemuOpts *opts)
unsigned sockets = qemu_opt_get_number(opts, "sockets", 0);
unsigned cores = qemu_opt_get_number(opts, "cores", 0);
unsigned threads = qemu_opt_get_number(opts, "threads", 0);
+ unsigned aux_cpus = qemu_opt_get_number(opts, "auxcpus", 0);
/* compute missing values, prefer sockets over cores over threads */
if (cpus == 0 || sockets == 0) {
@@ -767,10 +768,16 @@ static void smp_parse(MachineState *ms, QemuOpts *opts)
exit(1);
}
+ if (aux_cpus >= ms->smp.max_cpus) {
+ error_report("auxcpus must be lower than max_cpus");
+ exit(1);
+ }
+
ms->smp.cpus = cpus;
ms->smp.cores = cores;
ms->smp.threads = threads;
ms->smp.sockets = sockets;
+ ms->smp.aux_cpus = aux_cpus;
}
if (ms->smp.cpus > 1) {
@@ -718,6 +718,7 @@ void pc_smp_parse(MachineState *ms, QemuOpts *opts)
unsigned dies = qemu_opt_get_number(opts, "dies", 1);
unsigned cores = qemu_opt_get_number(opts, "cores", 0);
unsigned threads = qemu_opt_get_number(opts, "threads", 0);
+ unsigned aux_cpus = qemu_opt_get_number(opts, "auxcpus", 0);
/* compute missing values, prefer sockets over cores over threads */
if (cpus == 0 || sockets == 0) {
@@ -763,10 +764,16 @@ void pc_smp_parse(MachineState *ms, QemuOpts *opts)
exit(1);
}
+ if (aux_cpus >= ms->smp.max_cpus) {
+ error_report("auxcpus must be lower than max_cpus");
+ exit(1);
+ }
+
ms->smp.cpus = cpus;
ms->smp.cores = cores;
ms->smp.threads = threads;
ms->smp.sockets = sockets;
+ ms->smp.aux_cpus = aux_cpus;
x86ms->smp_dies = dies;
}
@@ -720,6 +720,9 @@ static QemuOptsList qemu_smp_opts = {
}, {
.name = "maxcpus",
.type = QEMU_OPT_NUMBER,
+ }, {
+ .name = "auxcpus",
+ .type = QEMU_OPT_NUMBER,
},
{ /*End of list */ }
},
Add a notion of auxiliary vcpus to CpuTopology, which will allow to designate a few vcpus (normally 1) to helper tasks not related to main guest VM execution. Example usage for starting a 4-vcpu guest, of which 1 vcpu is marked as auxiliary: qemu-system-x86_64 -smp 4,auxcpus=1 ... Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com> --- include/hw/boards.h | 1 + hw/core/machine.c | 7 +++++++ hw/i386/pc.c | 7 +++++++ softmmu/vl.c | 3 +++ 4 files changed, 18 insertions(+)