On 09/19/2013 11:23 AM, Peter Krempa wrote: > The previous patches added infrastructure to report better errors from > monitor in some cases. This patch finalizes this "feature" by enabling > this enhanced error reporting on early phases of VM startup. In these > phases the possibility of qemu producing a useful error message is > really high compared to running it during the whole life cycle. After > the start up is complete, the feature is disabled to provide the usual > error messages so that users are not confused by possibly irrelevant > messages that may be in the domain log. > > The original motivation to do this enhancement is to capture errors when > using VFIO device passthrough, where qemu reports errors after the > monitor is initialized and the existing error catching code couldn't > catch this producing a unhelpful message: > > # virsh start test > error: Failed to start domain test > error: Unable to read from monitor: Connection reset by peer > > With this change, the message is changed to: > > # virsh start test > error: Failed to start domain test > error: internal error: early end of file from monitor: possible problem: > qemu-system-x86_64: -device vfio-pci,host=00:1a.0,id=hostdev0,bus=pci.0,addr=0x5: vfio: error, group 8 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver. > qemu-system-x86_64: -device vfio-pci,host=00:1a.0,id=hostdev0,bus=pci.0,addr=0x5: vfio: failed to get group 8 > qemu-system-x86_64: -device vfio-pci,host=00:1a.0,id=hostdev0,bus=pci.0,addr=0x5: Device 'vfio-pci' could not be initialized > --- > src/qemu/qemu_process.c | 30 +++++++++++++++++++----------- > 1 file changed, 19 insertions(+), 11 deletions(-) > > diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c > index 846cee6..43b5c2b 100644 > --- a/src/qemu/qemu_process.c > +++ b/src/qemu/qemu_process.c > @@ -1389,7 +1389,7 @@ static qemuMonitorCallbacks monitorCallbacks = { > }; > > static int > -qemuConnectMonitor(virQEMUDriverPtr driver, virDomainObjPtr vm) > +qemuConnectMonitor(virQEMUDriverPtr driver, virDomainObjPtr vm, int logfd) > { > qemuDomainObjPrivatePtr priv = vm->privateData; > int ret = -1; > @@ -1415,6 +1415,9 @@ qemuConnectMonitor(virQEMUDriverPtr driver, virDomainObjPtr vm) > &monitorCallbacks, > driver); > > + if (mon && qemuMonitorSetDomainLog(mon, logfd) < 0) > + goto error; > + > virObjectLock(vm); > priv->monStart = 0; > This would leak mon. Jan -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list