diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 19afeab7b9..d2b7ce3da9 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -750,9 +750,13 @@ cpuModelIsAllowed(const char *model, * @arch: CPU architecture * @models: where to store the NULL-terminated list of supported models * - * Fetches all CPU models supported by libvirt on @archName. + * Fetches all CPU models supported by libvirt on @archName. If there are + * no restrictions on CPU models on @archName (i.e., the CPU model is just + * passed directly to a hypervisor), this function returns 0 and sets + * @models to NULL. * - * Returns number of supported CPU models or -1 on error. + * Returns number of supported CPU models, 0 if any CPU model is supported, + * or -1 on error. */ int cpuGetModels(virArch arch, char ***models) @@ -770,10 +774,9 @@ cpuGetModels(virArch arch, char ***models) } if (!driver->getModels) { - virReportError(VIR_ERR_NO_SUPPORT, - _("CPU driver for %s has no CPU model support"), - virArchToString(arch)); - return -1; + if (models) + *models = NULL; + return 0; } return driver->getModels(models); diff --git a/src/libvirt-host.c b/src/libvirt-host.c index 2a3de03115..335798abf7 100644 --- a/src/libvirt-host.c +++ b/src/libvirt-host.c @@ -1005,7 +1005,8 @@ virConnectCompareCPU(virConnectPtr conn, * * Get the list of supported CPU models for a specific architecture. * - * Returns -1 on error, number of elements in @models on success. + * Returns -1 on error, number of elements in @models on success (0 means + * libvirt accepts any CPU model). */ int virConnectGetCPUModelNames(virConnectPtr conn, const char *arch, char ***models, diff --git a/tools/virsh-host.c b/tools/virsh-host.c index 2337ce8e6e..2fd368662a 100644 --- a/tools/virsh-host.c +++ b/tools/virsh-host.c @@ -1149,9 +1149,13 @@ cmdCPUModelNames(vshControl *ctl, const vshCmd *cmd) return false; } - for (i = 0; i < nmodels; i++) { - vshPrint(ctl, "%s\n", models[i]); - VIR_FREE(models[i]); + if (nmodels == 0) { + vshPrintExtra(ctl, "%s\n", _("all CPU models are accepted")); + } else { + for (i = 0; i < nmodels; i++) { + vshPrint(ctl, "%s\n", models[i]); + VIR_FREE(models[i]); + } } VIR_FREE(models);