>From 225da4bd7b73d48ae54b4bacc7ffd8596ee370fa Mon Sep 17 00:00:00 2001 Message-ID: <225da4bd7b73d48ae54b4bacc7ffd8596ee370fa.1782247458.git.ehem+xen@xxxxxxx> From: Elliott Mitchell Date: Wed, 4 Oct 2023 21:47:17 -0700 Subject: [PATCH] OvmfPkg/XenBusDxe: Unmap shared information page on exit Xen/ARM now requires the shared information page to only be mapped once. This behavior is expected to be copied to Xen/x86 at some future point. --- OvmfPkg/XenBusDxe/XenBusDxe.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.c b/OvmfPkg/XenBusDxe/XenBusDxe.c index 132f43a72b..117a299d10 100644 --- a/OvmfPkg/XenBusDxe/XenBusDxe.c +++ b/OvmfPkg/XenBusDxe/XenBusDxe.c @@ -83,7 +83,34 @@ XenGetSharedInfoPage ( return EFI_SUCCESS; } - + +/** + Map the shared_info_t page into memory. + + @param Dev A XENBUS_DEVICE instance. +**/ +VOID +XenClearSharedInfoPage ( + IN OUT XENBUS_DEVICE *Dev + ) +{ + xen_remove_from_physmap_t Parameter; + + // + // Either never mapped, or else already cleared. No further cleanup + // action required. + // + if (!Dev->SharedInfo) return; + + Parameter.domid = DOMID_SELF; + Parameter.gpfn = (UINTN)Dev->SharedInfo >> EFI_PAGE_SHIFT; + if (XenHypercallMemoryOp (XENMEM_remove_from_physmap, &Parameter) != 0) + return; + + FreePages (Dev->SharedInfo, 1); + Dev->SharedInfo = NULL; +} + /** Unloads an image. @@ -500,7 +527,9 @@ XenBusDxeDriverBindingStop ( gBS->CloseEvent (Dev->ExitBootEvent); XenStoreDeinit (Dev); XenGrantTableDeinit (Dev); - + + XenClearSharedInfoPage(Dev); + gBS->CloseProtocol ( ControllerHandle, &gEfiDevicePathProtocolGuid, -- 2.47.3