qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] tpm_crb: Avoid backend startup just before shutdown under Xe


From: Ross Lagerwall
Subject: Re: [PATCH] tpm_crb: Avoid backend startup just before shutdown under Xen
Date: Tue, 30 Aug 2022 13:51:21 +0000

> From: Stefan Berger <stefanb@linux.ibm.com>
> Sent: Friday, August 26, 2022 5:27 PM
> To: Ross Lagerwall <ross.lagerwall@citrix.com>; Stefan Berger 
> <stefanb@linux.vnet.ibm.com>
> Cc: qemu-devel@nongnu.org <qemu-devel@nongnu.org>
> Subject: Re: [PATCH] tpm_crb: Avoid backend startup just before shutdown 
> under Xen 
>  
> On 8/26/22 12:15, Ross Lagerwall wrote:
> >> From: Stefan Berger <stefanb@linux.ibm.com>
> >> Sent: Friday, August 26, 2022 4:20 PM
> >> To: Ross Lagerwall <ross.lagerwall@citrix.com>; Stefan Berger 
> >> <stefanb@linux.vnet.ibm.com>
> >> Cc: qemu-devel@nongnu.org <qemu-devel@nongnu.org>
> >> Subject: Re: [PATCH] tpm_crb: Avoid backend startup just before shutdown 
> >> under Xen
> >>   
> >> On 8/26/22 10:38, Ross Lagerwall wrote:
> >>> When running under Xen and the guest reboots, it boots into a new domain
> >>> with a new QEMU process (and a new swtpm process if using the emulator
> >>> backend). The existing reset function is triggered just before the old
> >>> QEMU process exists which causes QEMU to startup the TPM backend and
> >>> then immediately shut it down. This is probably harmless but when using
> >>> the emulated backend, it wastes CPU and IO time reloading state, etc.
> >>>
> >>> Fix this by calling the reset function directly from realize() when
> >>> running under Xen. During a reboot, this will be called by the QEMU
> >>> process for the new domain.
> >>>
> >>> Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
> >>> ---
> >>>
> >>> This conditional logic is ugly. Is there a cleaner way of doing this?
> >>>
> >>>     hw/tpm/tpm_crb.c | 7 ++++++-
> >>>     1 file changed, 6 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c
> >>> index 67db594c48..ea930da545 100644
> >>> --- a/hw/tpm/tpm_crb.c
> >>> +++ b/hw/tpm/tpm_crb.c
> >>> @@ -26,6 +26,7 @@
> >>>     #include "sysemu/tpm_backend.h"
> >>>     #include "sysemu/tpm_util.h"
> >>>     #include "sysemu/reset.h"
> >>> +#include "sysemu/xen.h"
> >>>     #include "tpm_prop.h"
> >>>     #include "tpm_ppi.h"
> >>>     #include "trace.h"
> >>> @@ -308,7 +309,11 @@ static void tpm_crb_realize(DeviceState *dev, Error 
> >>> **errp)
> >>>                          TPM_PPI_ADDR_BASE, OBJECT(s));
> >>>         }
> >>>
> >>> -    qemu_register_reset(tpm_crb_reset, dev);
> >>> +    if (xen_enabled()) {
> >>> +        tpm_crb_reset(dev);
> >>> +    } else {
> >>> +        qemu_register_reset(tpm_crb_reset, dev);
> >>> +    }
> >>>     }
> >>>
> >>>     static void tpm_crb_class_init(ObjectClass *klass, void *data)
> >>
> >> This doesn't look right also for Xen. Shouldn't it be something like this?
> >>
> >>       qemu_register_reset(tpm_crb_reset, dev);
> >>       if (xen_enabled()) {
> >>          tpm_crb_reset(dev);
> >>       }
> >>
> >>
> >> We need the reset callback for VM reset.
> > 
> > This patch doesn't change anything for the QEMU/KVM case which works
> > fine as is.
> > 
> > In the Xen architecture, the guest is rebooted into a new domain which
> > has new instances of QEMU and swtpm. The old instances are terminated.
> > So during a guest reboot it doesn't make sense to have the QEMU for the
> > old domain call tpm_crb_reset() just as it is about to exit since it
> > causes swtpm to be sent CMD_INIT which causes it to needlessly
> > reinitialize and reload the state. Instead, the new QEMU instance
> > post-reboot will call tpm_crb_reset() to start the backend directly from
> > the realize() function, just as for the initial guest boot.
> 
> 
> You should probably add this to the commit text because I wouldn't have 
> known that a VM reset in Xen causes a new domain to be created...

Hi Stefan,

This is already included at the start of the commit message:

"""
When running under Xen and the guest reboots, it boots into a new domain
with a new QEMU process (and a new swtpm process if using the emulator
backend).
"""

Ignoring the commit message, is the code change acceptable?

Thanks,
Ross


reply via email to

[Prev in Thread] Current Thread [Next in Thread]