[libvirt] [PATCH 4/4] qemu: Wire up better early error reporting

Ján Tomko jtomko at redhat.com
Tue Sep 24 12:25:32 UTC 2013


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




More information about the libvir-list mailing list