summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>2020-08-06 12:43:00 +0300
committerTom Rini <trini@konsulko.com>2020-08-14 22:18:30 +0300
commitd17f6698b8e07b15941dd888a4b2d69aa046ae1e (patch)
tree310aa01f4f023a24c16807e2998d10fe079881f5
parent53d725c74e825cdbca9c278514a44b1aa15513e3 (diff)
downloadu-boot-d17f6698b8e07b15941dd888a4b2d69aa046ae1e.tar.xz
board: xen: De-initialize before jumping to Linux
Free resources used by Xen board before jumping to Linux kernel. Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> Signed-off-by: Anastasiia Lukianenko <anastasiia_lukianenko@epam.com> Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r--board/xen/xenguest_arm64/xenguest_arm64.c6
-rw-r--r--drivers/xen/hypervisor.c8
-rw-r--r--include/xen.h8
3 files changed, 22 insertions, 0 deletions
diff --git a/board/xen/xenguest_arm64/xenguest_arm64.c b/board/xen/xenguest_arm64/xenguest_arm64.c
index cd3693892a..cce54369bb 100644
--- a/board/xen/xenguest_arm64/xenguest_arm64.c
+++ b/board/xen/xenguest_arm64/xenguest_arm64.c
@@ -12,6 +12,7 @@
#include <dm.h>
#include <errno.h>
#include <malloc.h>
+#include <xen.h>
#include <asm/io.h>
#include <asm/armv8/mmu.h>
@@ -194,3 +195,8 @@ int print_cpuinfo(void)
return 0;
}
+void board_cleanup_before_linux(void)
+{
+ xen_fini();
+}
+
diff --git a/drivers/xen/hypervisor.c b/drivers/xen/hypervisor.c
index 58b0865e6a..178c206f5b 100644
--- a/drivers/xen/hypervisor.c
+++ b/drivers/xen/hypervisor.c
@@ -242,3 +242,11 @@ void xen_init(void)
init_gnttab();
}
+void xen_fini(void)
+{
+ debug("%s\n", __func__);
+
+ fini_gnttab();
+ fini_xenbus();
+ fini_events();
+}
diff --git a/include/xen.h b/include/xen.h
index 686b7148b5..a952a2c84b 100644
--- a/include/xen.h
+++ b/include/xen.h
@@ -13,4 +13,12 @@
*/
void xen_init(void);
+/**
+ * xen_fini() - Board cleanup before Linux kernel start
+ *
+ * Unmap Xen memory pages the specified guest's pseudophysical
+ * address space and unbind all event channels.
+ */
+void xen_fini(void);
+
#endif /* __XEN_H__ */