On Fri, Oct 02, 2026 at 10:25:14AM -0400, Stefan Berger wrote:
> Implement tpm_ppi_uninit and use it for proper teardown of the PPI in
> tpm_crb_unrealize.
> 
> Signed-off-by: Stefan Berger <[email protected]>
> ---
>  hw/tpm/tpm_crb.c |  3 +++
>  hw/tpm/tpm_ppi.c | 10 ++++++++++
>  hw/tpm/tpm_ppi.h | 10 ++++++++++
>  3 files changed, 23 insertions(+)
> 
> diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c
> index cd46b2e888..5c50a79936 100644
> --- a/hw/tpm/tpm_crb.c
> +++ b/hw/tpm/tpm_crb.c
> @@ -16,6 +16,7 @@
>  
>  #include "qemu/osdep.h"
>  
> +#include "qemu/memalign.h"
>  #include "qemu/module.h"
>  #include "qemu/error-report.h"
>  #include "qapi/error.h"
> @@ -527,6 +528,8 @@ static void tpm_crb_unrealize(DeviceState *dev)
>      if (s->migration_blocker) {
>          migrate_del_blocker(&s->migration_blocker);
>      }
> +
> +    tpm_ppi_uninit(&s->ppi, get_system_memory(), OBJECT(s));
>  }
>  
>  static void tpm_crb_class_init(ObjectClass *klass, const void *data)
> diff --git a/hw/tpm/tpm_ppi.c b/hw/tpm/tpm_ppi.c
> index f0c34291dc..35baa083f2 100644
> --- a/hw/tpm/tpm_ppi.c
> +++ b/hw/tpm/tpm_ppi.c
> @@ -57,3 +57,13 @@ void tpm_ppi_init(TPMPPI *tpmppi, MemoryRegion *m,
>  
>      memory_region_add_subregion(m, addr, &tpmppi->ram);
>  }
> +
> +void tpm_ppi_uninit(TPMPPI *tpmppi, MemoryRegion *m, Object *obj)
> +{
> +    memory_region_del_subregion(m, &tpmppi->ram);
> +
> +    vmstate_unregister_ram(&tpmppi->ram, DEVICE(obj));
> +
> +    qemu_vfree(tpmppi->buf);
> +    tpmppi->buf = NULL;
> +}
> diff --git a/hw/tpm/tpm_ppi.h b/hw/tpm/tpm_ppi.h
> index 88f316ee95..c173889033 100644
> --- a/hw/tpm/tpm_ppi.h
> +++ b/hw/tpm/tpm_ppi.h
> @@ -32,6 +32,16 @@ typedef struct TPMPPI {
>  void tpm_ppi_init(TPMPPI *tpmppi, MemoryRegion *m,
>                    hwaddr addr, Object *obj);
>  
> +/**
> + * tpm_ppi_uninit:
> + * @tpmppi: a TPMPPI
> + * @m: the address-space / MemoryRegion to use
> + * @obj: the owner object
> + *
> + * Function to unregister the TPM PPI region.
> + */
> +void tpm_ppi_uninit(TPMPPI *tpmppi, MemoryRegion *m, Object *obj);
> +
>  /**
>   * tpm_ppi_reset:
>   * @tpmppi: a TPMPPI
> -- 
> 2.55.0
> 

Reviewed-by: Arun Menon <[email protected]>


Reply via email to