|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [PATCH v3 16/16] Save/Restore Support: Implement code for arch suspend/resume
Bruno Alvisio, on lun. 12 mars 2018 10:34:38 -0700, wrote:
> Before suspending the domain the shared_info_page is unmapped and for PVs the
> pagetables should be canonicalized. After resume the shared_info_page should
> be
> mapped again.
>
> Signed-off-by: Bruno Alvisio <bruno.alvisio@xxxxxxxxx>
Reviewed-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>
> ---
> Changed since v2:
> * Fixed parameter passed to 'unmap_shared_info' in after_suspend
> Changed since v1:
> * Fixed comment
> ---
> arch/x86/setup.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 51 insertions(+)
>
> diff --git a/arch/x86/setup.c b/arch/x86/setup.c
> index 60e12c0..4fd8e39 100644
> --- a/arch/x86/setup.c
> +++ b/arch/x86/setup.c
> @@ -32,6 +32,7 @@
> #include <xen/xen.h>
> #include <xen/arch-x86/cpuid.h>
> #include <xen/arch-x86/hvm/start_info.h>
> +#include <xen/hvm/params.h>
>
> #ifdef CONFIG_PARAVIRT
> /*
> @@ -42,6 +43,11 @@ union start_info_union start_info_union;
> #endif
>
> /*
> + * This pointer holds a reference to the copy of the start_info struct.
> + */
> +static start_info_t *start_info_ptr;
> +
> +/*
> * Shared page for communicating with the hypervisor.
> * Events flags go here, for example.
> */
> @@ -213,18 +219,63 @@ arch_init(void *par)
> #ifdef CONFIG_PARAVIRT
> memcpy(&start_info, par, sizeof(start_info));
> #endif
> + start_info_ptr = (start_info_t *)par;
>
> start_kernel((start_info_t *)par);
> }
>
> void arch_pre_suspend(void)
> {
> +#ifdef CONFIG_PARAVIRT
> + /* Replace xenstore and console mfns with the correspondent pfns */
> + start_info_ptr->store_mfn =
> + virt_to_pfn(mfn_to_virt(start_info_ptr->store_mfn));
> + start_info_ptr->console.domU.mfn =
> + virt_to_pfn(mfn_to_virt(start_info_ptr->console.domU.mfn));
> +#else
> + uint64_t store_v;
> + uint64_t console_v;
> +
> + if( hvm_get_parameter(HVM_PARAM_STORE_PFN, &store_v) )
> + BUG();
> + start_info_ptr->store_mfn = store_v;
> +
> + if( hvm_get_parameter(HVM_PARAM_CONSOLE_PFN, &console_v) )
> + BUG();
> + start_info_ptr->console.domU.mfn = console_v;
> +#endif
> + unmap_shared_info();
>
> + arch_mm_pre_suspend();
> }
>
> void arch_post_suspend(int canceled)
> {
> +#if CONFIG_PARAVIRT
> + if (canceled) {
> + start_info_ptr->store_mfn = pfn_to_mfn(start_info_ptr->store_mfn);
> + start_info_ptr->console.domU.mfn =
> pfn_to_mfn(start_info_ptr->console.domU.mfn);
> + } else {
> + memcpy(&start_info, start_info_ptr, sizeof(start_info_t));
> + }
> +#else
> + uint64_t store_v;
> + uint64_t console_v;
> +
> + if (hvm_get_parameter(HVM_PARAM_STORE_PFN, &store_v))
> + BUG();
> + start_info_ptr->store_mfn = pfn_to_mfn(store_v);
>
> + if (hvm_get_parameter(HVM_PARAM_CONSOLE_PFN, &console_v))
> + BUG();
> + start_info_ptr->console.domU.mfn = pfn_to_mfn(console_v);
> +#endif
> +
> + HYPERVISOR_shared_info = map_shared_info((void*) start_info_ptr);
> +#ifndef CONFIG_PARAVIRT
> + xen_callback_vector();
> +#endif
> + arch_mm_post_suspend(canceled);
> }
>
> void
> --
> 2.3.2 (Apple Git-55)
>
--
Samuel
<y> muhahaha...
<y> ya un train qui part de Perrache à 14h57
<y> qui passe à Part-Dieu à 15h10
<y> si je le prends à Perrache, je suis en zone bleue
<y> si je le prends à Part-Dieu, je suis en zone blanche
<y> donc je vais le prendre à Perrache *mais* à Part-Dieu ;-)
-+- #ens-mim - vive la SNCF -+-
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |