diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index ebc15a102e368a3630b5bdd8e57f99dad0bbcbed..437f93127b7337c06610dd3188752cf2149304b7 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3329,8 +3329,8 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, } -char * -qemuBuildWatchdogDevStr(virDomainDefPtr def, +static char * +qemuBuildWatchdogDevStr(const virDomainDef *def, virDomainWatchdogDefPtr dev, virQEMUCapsPtr qemuCaps) { @@ -3358,6 +3358,55 @@ qemuBuildWatchdogDevStr(virDomainDefPtr def, } +static int +qemuBuildWatchdogCommandLine(virCommandPtr cmd, + const virDomainDef *def, + virQEMUCapsPtr qemuCaps) +{ + virDomainWatchdogDefPtr watchdog = def->watchdog; + char *optstr; + const char *action; + + if (!def->watchdog) + return 0; + + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { + virCommandAddArg(cmd, "-device"); + + optstr = qemuBuildWatchdogDevStr(def, watchdog, qemuCaps); + if (!optstr) + return -1; + } else { + virCommandAddArg(cmd, "-watchdog"); + + const char *model = virDomainWatchdogModelTypeToString(watchdog->model); + if (!model) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("missing watchdog model")); + return -1; + } + + if (VIR_STRDUP(optstr, model) < 0) + return -1; + } + virCommandAddArg(cmd, optstr); + VIR_FREE(optstr); + + if (watchdog->action == VIR_DOMAIN_WATCHDOG_ACTION_DUMP) + watchdog->action = VIR_DOMAIN_WATCHDOG_ACTION_PAUSE; + + action = virDomainWatchdogActionTypeToString(watchdog->action); + if (!action) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("invalid watchdog action")); + return -1; + } + virCommandAddArgList(cmd, "-watchdog-action", action, NULL); + + return 0; +} + + char * qemuBuildMemballoonDevStr(virDomainDefPtr def, virDomainMemballoonDefPtr dev, @@ -8863,44 +8912,8 @@ qemuBuildCommandLine(virConnectPtr conn, if (qemuBuildSoundCommandLine(cmd, def, qemuCaps) < 0) goto error; - /* Add watchdog hardware */ - if (def->watchdog) { - virDomainWatchdogDefPtr watchdog = def->watchdog; - char *optstr; - - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { - virCommandAddArg(cmd, "-device"); - - optstr = qemuBuildWatchdogDevStr(def, watchdog, qemuCaps); - if (!optstr) - goto error; - } else { - virCommandAddArg(cmd, "-watchdog"); - - const char *model = virDomainWatchdogModelTypeToString(watchdog->model); - if (!model) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("missing watchdog model")); - goto error; - } - - if (VIR_STRDUP(optstr, model) < 0) - goto error; - } - virCommandAddArg(cmd, optstr); - VIR_FREE(optstr); - - int act = watchdog->action; - if (act == VIR_DOMAIN_WATCHDOG_ACTION_DUMP) - act = VIR_DOMAIN_WATCHDOG_ACTION_PAUSE; - const char *action = virDomainWatchdogActionTypeToString(act); - if (!action) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("invalid watchdog action")); - goto error; - } - virCommandAddArgList(cmd, "-watchdog-action", action, NULL); - } + if (qemuBuildWatchdogCommandLine(cmd, def, qemuCaps) < 0) + goto error; /* Add redirected devices */ for (i = 0; i < def->nredirdevs; i++) { diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index d7f13448b23c406bfc5bdb6aa6d49aa0d6e001fa..e5b4445eee6b56e7c02e5bc9271f8e3b6e3c2b7a 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -130,10 +130,6 @@ char *qemuBuildControllerDevStr(const virDomainDef *domainDef, virQEMUCapsPtr qemuCaps, int *nusbcontroller); -char *qemuBuildWatchdogDevStr(virDomainDefPtr domainDef, - virDomainWatchdogDefPtr dev, - virQEMUCapsPtr qemuCaps); - char *qemuBuildMemballoonDevStr(virDomainDefPtr domainDef, virDomainMemballoonDefPtr dev, virQEMUCapsPtr qemuCaps);