mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
qemu: Introduce qemuBuildSerialCommandLine
Add new function to manage adding the serial device options to the command line removing that task from the mainline qemuBuildCommandLine. Using const virDomainDef causes collateral damage in other called APIs which need to make the similar adjustment Signed-off-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
858bafebbf
commit
5ab86400bf
@ -3839,7 +3839,7 @@ virQEMUCapsCacheFree(virQEMUCapsCachePtr cache)
|
|||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
virQEMUCapsSupportsChardev(virDomainDefPtr def,
|
virQEMUCapsSupportsChardev(const virDomainDef *def,
|
||||||
virQEMUCapsPtr qemuCaps,
|
virQEMUCapsPtr qemuCaps,
|
||||||
virDomainChrDefPtr chr)
|
virDomainChrDefPtr chr)
|
||||||
{
|
{
|
||||||
|
@ -450,7 +450,7 @@ int virQEMUCapsParseDeviceStr(virQEMUCapsPtr qemuCaps, const char *str);
|
|||||||
|
|
||||||
VIR_ENUM_DECL(virQEMUCaps);
|
VIR_ENUM_DECL(virQEMUCaps);
|
||||||
|
|
||||||
bool virQEMUCapsSupportsChardev(virDomainDefPtr def,
|
bool virQEMUCapsSupportsChardev(const virDomainDef *def,
|
||||||
virQEMUCapsPtr qemuCaps,
|
virQEMUCapsPtr qemuCaps,
|
||||||
virDomainChrDefPtr chr);
|
virDomainChrDefPtr chr);
|
||||||
|
|
||||||
|
@ -4586,7 +4586,7 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager,
|
|||||||
|
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
qemuBuildVirtioSerialPortDevStr(virDomainDefPtr def,
|
qemuBuildVirtioSerialPortDevStr(const virDomainDef *def,
|
||||||
virDomainChrDefPtr dev,
|
virDomainChrDefPtr dev,
|
||||||
virQEMUCapsPtr qemuCaps)
|
virQEMUCapsPtr qemuCaps)
|
||||||
{
|
{
|
||||||
@ -7743,7 +7743,7 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
qemuBuildChrDeviceCommandLine(virCommandPtr cmd,
|
qemuBuildChrDeviceCommandLine(virCommandPtr cmd,
|
||||||
virDomainDefPtr def,
|
const virDomainDef *def,
|
||||||
virDomainChrDefPtr chr,
|
virDomainChrDefPtr chr,
|
||||||
virQEMUCapsPtr qemuCaps)
|
virQEMUCapsPtr qemuCaps)
|
||||||
{
|
{
|
||||||
@ -7757,6 +7757,62 @@ qemuBuildChrDeviceCommandLine(virCommandPtr cmd,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemuBuildSerialCommandLine(virLogManagerPtr logManager,
|
||||||
|
virCommandPtr cmd,
|
||||||
|
const virDomainDef *def,
|
||||||
|
virQEMUCapsPtr qemuCaps)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
int actualSerials = 0;
|
||||||
|
bool havespice = false;
|
||||||
|
|
||||||
|
if (def->nserials) {
|
||||||
|
for (i = 0; i < def->ngraphics && !havespice; i++) {
|
||||||
|
if (def->graphics[i]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE)
|
||||||
|
havespice = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < def->nserials; i++) {
|
||||||
|
virDomainChrDefPtr serial = def->serials[i];
|
||||||
|
char *devstr;
|
||||||
|
|
||||||
|
if (serial->source.type == VIR_DOMAIN_CHR_TYPE_SPICEPORT && !havespice)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Use -chardev with -device if they are available */
|
||||||
|
if (virQEMUCapsSupportsChardev(def, qemuCaps, serial)) {
|
||||||
|
virCommandAddArg(cmd, "-chardev");
|
||||||
|
if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
|
||||||
|
&serial->source,
|
||||||
|
serial->info.alias,
|
||||||
|
qemuCaps)))
|
||||||
|
return -1;
|
||||||
|
virCommandAddArg(cmd, devstr);
|
||||||
|
VIR_FREE(devstr);
|
||||||
|
|
||||||
|
if (qemuBuildChrDeviceCommandLine(cmd, def, serial, qemuCaps) < 0)
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
virCommandAddArg(cmd, "-serial");
|
||||||
|
if (!(devstr = qemuBuildChrArgStr(&serial->source, NULL)))
|
||||||
|
return -1;
|
||||||
|
virCommandAddArg(cmd, devstr);
|
||||||
|
VIR_FREE(devstr);
|
||||||
|
}
|
||||||
|
actualSerials++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we have -device, then we set -nodefaults already */
|
||||||
|
if (!actualSerials && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE))
|
||||||
|
virCommandAddArgList(cmd, "-serial", "none", NULL);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
|
qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
|
||||||
virDomainDefPtr def,
|
virDomainDefPtr def,
|
||||||
@ -8122,10 +8178,8 @@ qemuBuildCommandLine(virConnectPtr conn,
|
|||||||
virErrorPtr originalError = NULL;
|
virErrorPtr originalError = NULL;
|
||||||
size_t i, j;
|
size_t i, j;
|
||||||
char uuid[VIR_UUID_STRING_BUFLEN];
|
char uuid[VIR_UUID_STRING_BUFLEN];
|
||||||
bool havespice = false;
|
|
||||||
virCommandPtr cmd = NULL;
|
virCommandPtr cmd = NULL;
|
||||||
bool emitBootindex = false;
|
bool emitBootindex = false;
|
||||||
int actualSerials = 0;
|
|
||||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||||
int bootHostdevNet = 0;
|
int bootHostdevNet = 0;
|
||||||
|
|
||||||
@ -8255,48 +8309,8 @@ qemuBuildCommandLine(virConnectPtr conn,
|
|||||||
if (qemuBuildSmartcardCommandLine(logManager, cmd, def, qemuCaps) < 0)
|
if (qemuBuildSmartcardCommandLine(logManager, cmd, def, qemuCaps) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (def->nserials) {
|
if (qemuBuildSerialCommandLine(logManager, cmd, def, qemuCaps) < 0)
|
||||||
for (i = 0; i < def->ngraphics; i++) {
|
goto error;
|
||||||
if (def->graphics[i]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
|
|
||||||
havespice = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < def->nserials; i++) {
|
|
||||||
virDomainChrDefPtr serial = def->serials[i];
|
|
||||||
char *devstr;
|
|
||||||
|
|
||||||
if (serial->source.type == VIR_DOMAIN_CHR_TYPE_SPICEPORT && !havespice)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* Use -chardev with -device if they are available */
|
|
||||||
if (virQEMUCapsSupportsChardev(def, qemuCaps, serial)) {
|
|
||||||
if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
|
|
||||||
&serial->source,
|
|
||||||
serial->info.alias,
|
|
||||||
qemuCaps)))
|
|
||||||
goto error;
|
|
||||||
virCommandAddArg(cmd, "-chardev");
|
|
||||||
virCommandAddArg(cmd, devstr);
|
|
||||||
VIR_FREE(devstr);
|
|
||||||
|
|
||||||
if (qemuBuildChrDeviceCommandLine(cmd, def, serial, qemuCaps) < 0)
|
|
||||||
goto error;
|
|
||||||
} else {
|
|
||||||
virCommandAddArg(cmd, "-serial");
|
|
||||||
if (!(devstr = qemuBuildChrArgStr(&serial->source, NULL)))
|
|
||||||
goto error;
|
|
||||||
virCommandAddArg(cmd, devstr);
|
|
||||||
VIR_FREE(devstr);
|
|
||||||
}
|
|
||||||
actualSerials++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If we have -device, then we set -nodefault already */
|
|
||||||
if (!actualSerials && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE))
|
|
||||||
virCommandAddArgList(cmd, "-serial", "none", NULL);
|
|
||||||
|
|
||||||
if (!def->nparallels) {
|
if (!def->nparallels) {
|
||||||
/* If we have -device, then we set -nodefault already */
|
/* If we have -device, then we set -nodefault already */
|
||||||
@ -9204,7 +9218,7 @@ qemuBuildCommandLine(virConnectPtr conn,
|
|||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
qemuBuildSerialChrDeviceStr(char **deviceStr,
|
qemuBuildSerialChrDeviceStr(char **deviceStr,
|
||||||
virDomainDefPtr def,
|
const virDomainDef *def,
|
||||||
virDomainChrDefPtr serial,
|
virDomainChrDefPtr serial,
|
||||||
virQEMUCapsPtr qemuCaps,
|
virQEMUCapsPtr qemuCaps,
|
||||||
virArch arch,
|
virArch arch,
|
||||||
@ -9299,7 +9313,7 @@ qemuBuildParallelChrDeviceStr(char **deviceStr,
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
qemuBuildChannelChrDeviceStr(char **deviceStr,
|
qemuBuildChannelChrDeviceStr(char **deviceStr,
|
||||||
virDomainDefPtr def,
|
const virDomainDef *def,
|
||||||
virDomainChrDefPtr chr,
|
virDomainChrDefPtr chr,
|
||||||
virQEMUCapsPtr qemuCaps)
|
virQEMUCapsPtr qemuCaps)
|
||||||
{
|
{
|
||||||
@ -9339,7 +9353,7 @@ qemuBuildChannelChrDeviceStr(char **deviceStr,
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
qemuBuildConsoleChrDeviceStr(char **deviceStr,
|
qemuBuildConsoleChrDeviceStr(char **deviceStr,
|
||||||
virDomainDefPtr def,
|
const virDomainDef *def,
|
||||||
virDomainChrDefPtr chr,
|
virDomainChrDefPtr chr,
|
||||||
virQEMUCapsPtr qemuCaps)
|
virQEMUCapsPtr qemuCaps)
|
||||||
{
|
{
|
||||||
@ -9379,7 +9393,7 @@ qemuBuildConsoleChrDeviceStr(char **deviceStr,
|
|||||||
|
|
||||||
int
|
int
|
||||||
qemuBuildChrDeviceStr(char **deviceStr,
|
qemuBuildChrDeviceStr(char **deviceStr,
|
||||||
virDomainDefPtr vmdef,
|
const virDomainDef *vmdef,
|
||||||
virDomainChrDefPtr chr,
|
virDomainChrDefPtr chr,
|
||||||
virQEMUCapsPtr qemuCaps)
|
virQEMUCapsPtr qemuCaps)
|
||||||
{
|
{
|
||||||
|
@ -82,7 +82,7 @@ virCommandPtr qemuBuildCommandLine(virConnectPtr conn,
|
|||||||
/* Generate '-device' string for chardev device */
|
/* Generate '-device' string for chardev device */
|
||||||
int
|
int
|
||||||
qemuBuildChrDeviceStr(char **deviceStr,
|
qemuBuildChrDeviceStr(char **deviceStr,
|
||||||
virDomainDefPtr vmdef,
|
const virDomainDef *vmdef,
|
||||||
virDomainChrDefPtr chr,
|
virDomainChrDefPtr chr,
|
||||||
virQEMUCapsPtr qemuCaps);
|
virQEMUCapsPtr qemuCaps);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user