diff --git a/board/xen/xenguest_arm64/xenguest_arm64.c b/board/xen/xenguest_arm64/xenguest_arm64.c index cd3693892a0..cce54369bb3 100644 --- a/board/xen/xenguest_arm64/xenguest_arm64.c +++ b/board/xen/xenguest_arm64/xenguest_arm64.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -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 58b0865e6a8..178c206f5bf 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 686b7148b5d..a952a2c84b8 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__ */