On 03.07.2013 17:29, Daniel P. Berrange wrote: > On Tue, Jul 02, 2013 at 05:53:05PM +0200, Michal Privoznik wrote: >> The chardev alias assignment is going to be needed in a separate >> places, so it should be moved into a separate function rather >> than copying code randomly around. >> --- >> src/qemu/qemu_command.c | 75 +++++++++++++++++++++++++++++++++++++++++++------ >> src/qemu/qemu_command.h | 3 ++ >> 2 files changed, 70 insertions(+), 8 deletions(-) >> >> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c >> index ba93233..903839f 100644 >> --- a/src/qemu/qemu_command.c >> +++ b/src/qemu/qemu_command.c >> @@ -892,6 +892,65 @@ qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller) >> return 0; >> } >> >> +int >> +qemuAssignDeviceChrAlias(virDomainDefPtr def, >> + virDomainChrDefPtr chr, >> + ssize_t idx) >> +{ >> + const char *prefix = NULL; >> + const char *prefix2 = NULL; >> + >> + switch ((enum virDomainChrDeviceType) chr->deviceType) { >> + case VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL: >> + prefix = "parallel"; >> + break; >> + >> + case VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL: >> + prefix = "serial"; >> + break; >> + >> + case VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE: >> + prefix = "console"; >> + prefix2 = "serial"; >> + break; >> + >> + case VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL: >> + prefix = "channel"; >> + break; >> + >> + case VIR_DOMAIN_CHR_DEVICE_TYPE_LAST: >> + return -1; >> + } >> + >> + if (idx == -1) { >> + virDomainChrDefPtr **arrPtr; >> + size_t *cntPtr; >> + size_t i; >> + idx = 0; >> + >> + virDomainChrGetDomainPtrs(def, chr, &arrPtr, &cntPtr); >> + >> + for (i = 0; i < *cntPtr; i++) { >> + int thisidx; >> + if (((thisidx = qemuDomainDeviceAliasIndex(&(*arrPtr)[i]->info, prefix)) < 0) && >> + (prefix2 && >> + (thisidx = qemuDomainDeviceAliasIndex(&(*arrPtr)[i]->info, prefix2)) < 0)) { >> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", >> + _("Unable to determine device index for character device")); >> + return -1; >> + } >> + if (thisidx >= idx) >> + idx = thisidx + 1; >> + } >> + } > > The commit message describes this as a simple refactoring, but this > if (idx== -1) {...} is all new functionality compared to what is > being replaced. I'm not too sure that this logic is correct > either when dealing with <console> with a 'serialXX' alias. This function just imitates other functions we've already: qemuAssignDeviceRedirdevAlias, qemuAssignDeviceHostdevAlias being examples. One can find even more. And regarding <console> I've sent 2 patches, none of them was accepted. So I had to workaround the problem in my patch. What's the solution you're suggesting? Just to refresh our memory: for <console> the alias can be either 'consoleX' or 'serialX' depending if the daemon was restarted or not. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list