On Wed, Apr 19, 2023 at 04:53:36PM +0200, Michal Prívozník wrote:
On 4/19/23 16:07, Martin Kletzander wrote:Most of them are platform devices and only i6300esb can be plugged multiple times into different PCI slots. Signed-off-by: Martin Kletzander <mkletzan@xxxxxxxxxx> --- src/qemu/qemu_validate.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index b2c3fd1785bc..2b205348f597 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1110,19 +1110,21 @@ qemuValidateDomainDefTPMs(const virDomainDef *def) static int qemuValidateDomainDefWatchdogs(const virDomainDef *def) { - bool found_itco = false; + bool watchdogs[VIR_DOMAIN_WATCHDOG_MODEL_LAST] = {0};We usually us virBitmap for this...size_t i = 0; for (i = 0; i < def->nwatchdogs; i++) { + if (def->watchdogs[i]->model == VIR_DOMAIN_WATCHDOG_MODEL_I6300ESB) + continue; - if (def->watchdogs[i]->model == VIR_DOMAIN_WATCHDOG_MODEL_ITCO) { - if (found_itco) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("Multiple iTCO watchdogs are not supported")); - return -1; - } - found_itco = true; + if (watchdogs[def->watchdogs[i]->model]) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("domain can only have one watchdog with model '%1$s'"), + virDomainWatchdogModelTypeToString(def->watchdogs[i]->model)); + return -1; } + + watchdogs[def->watchdogs[i]->model] = true; } return 0;It should be fairly trivial to rewrite.
Is the following patch OK to squash in? diff --git i/src/qemu/qemu_validate.c w/src/qemu/qemu_validate.c index 2b205348f597..fdfb4c6407e2 100644 --- i/src/qemu/qemu_validate.c +++ w/src/qemu/qemu_validate.c @@ -26,6 +26,7 @@ #include "qemu_domain.h" #include "qemu_process.h" #include "domain_conf.h" +#include "virbitmap.h" #include "virlog.h" #include "virutil.h" @@ -1110,21 +1111,25 @@ qemuValidateDomainDefTPMs(const virDomainDef *def) static int qemuValidateDomainDefWatchdogs(const virDomainDef *def) { - bool watchdogs[VIR_DOMAIN_WATCHDOG_MODEL_LAST] = {0}; + g_autoptr(virBitmap) watchdogs = virBitmapNew(VIR_DOMAIN_WATCHDOG_MODEL_LAST); size_t i = 0; for (i = 0; i < def->nwatchdogs; i++) { if (def->watchdogs[i]->model == VIR_DOMAIN_WATCHDOG_MODEL_I6300ESB) continue; - if (watchdogs[def->watchdogs[i]->model]) { + if (virBitmapIsBitSet(watchdogs, def->watchdogs[i]->model)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("domain can only have one watchdog with model '%1$s'"), virDomainWatchdogModelTypeToString(def->watchdogs[i]->model)); return -1; } - watchdogs[def->watchdogs[i]->model] = true; + if (virBitmapSetBit(watchdogs, def->watchdogs[i]->model) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Integrity error in watchdog models")); + return -1; + } } return 0; --
Attachment:
signature.asc
Description: PGP signature