162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci#include <linux/types.h> 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include <asm/xen/hypercall.h> 562306a36Sopenharmony_ci#include <asm/xen/page.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <asm/fixmap.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "xen-ops.h" 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_civoid xen_pv_pre_suspend(void) 1262306a36Sopenharmony_ci{ 1362306a36Sopenharmony_ci xen_mm_pin_all(); 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci xen_start_info->store_mfn = mfn_to_pfn(xen_start_info->store_mfn); 1662306a36Sopenharmony_ci xen_start_info->console.domU.mfn = 1762306a36Sopenharmony_ci mfn_to_pfn(xen_start_info->console.domU.mfn); 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci BUG_ON(!irqs_disabled()); 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci HYPERVISOR_shared_info = &xen_dummy_shared_info; 2262306a36Sopenharmony_ci if (HYPERVISOR_update_va_mapping(fix_to_virt(FIX_PARAVIRT_BOOTMAP), 2362306a36Sopenharmony_ci __pte_ma(0), 0)) 2462306a36Sopenharmony_ci BUG(); 2562306a36Sopenharmony_ci} 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_civoid xen_pv_post_suspend(int suspend_cancelled) 2862306a36Sopenharmony_ci{ 2962306a36Sopenharmony_ci xen_build_mfn_list_list(); 3062306a36Sopenharmony_ci set_fixmap(FIX_PARAVIRT_BOOTMAP, xen_start_info->shared_info); 3162306a36Sopenharmony_ci HYPERVISOR_shared_info = (void *)fix_to_virt(FIX_PARAVIRT_BOOTMAP); 3262306a36Sopenharmony_ci xen_setup_mfn_list_list(); 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci if (suspend_cancelled) { 3562306a36Sopenharmony_ci xen_start_info->store_mfn = 3662306a36Sopenharmony_ci pfn_to_mfn(xen_start_info->store_mfn); 3762306a36Sopenharmony_ci xen_start_info->console.domU.mfn = 3862306a36Sopenharmony_ci pfn_to_mfn(xen_start_info->console.domU.mfn); 3962306a36Sopenharmony_ci } else { 4062306a36Sopenharmony_ci#ifdef CONFIG_SMP 4162306a36Sopenharmony_ci BUG_ON(xen_cpu_initialized_map == NULL); 4262306a36Sopenharmony_ci cpumask_copy(xen_cpu_initialized_map, cpu_online_mask); 4362306a36Sopenharmony_ci#endif 4462306a36Sopenharmony_ci xen_vcpu_restore(); 4562306a36Sopenharmony_ci } 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci xen_mm_unpin_all(); 4862306a36Sopenharmony_ci} 49