1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 29963236dSVitaly Kuznetsov #include <linux/types.h> 39963236dSVitaly Kuznetsov 49963236dSVitaly Kuznetsov #include <asm/xen/hypercall.h> 59963236dSVitaly Kuznetsov #include <asm/xen/page.h> 69963236dSVitaly Kuznetsov 7*0cd39f46SPeter Zijlstra #include <asm/fixmap.h> 8*0cd39f46SPeter Zijlstra 99963236dSVitaly Kuznetsov #include "xen-ops.h" 109963236dSVitaly Kuznetsov xen_pv_pre_suspend(void)119963236dSVitaly Kuznetsovvoid xen_pv_pre_suspend(void) 129963236dSVitaly Kuznetsov { 139963236dSVitaly Kuznetsov xen_mm_pin_all(); 149963236dSVitaly Kuznetsov 159963236dSVitaly Kuznetsov xen_start_info->store_mfn = mfn_to_pfn(xen_start_info->store_mfn); 169963236dSVitaly Kuznetsov xen_start_info->console.domU.mfn = 179963236dSVitaly Kuznetsov mfn_to_pfn(xen_start_info->console.domU.mfn); 189963236dSVitaly Kuznetsov 199963236dSVitaly Kuznetsov BUG_ON(!irqs_disabled()); 209963236dSVitaly Kuznetsov 219963236dSVitaly Kuznetsov HYPERVISOR_shared_info = &xen_dummy_shared_info; 229963236dSVitaly Kuznetsov if (HYPERVISOR_update_va_mapping(fix_to_virt(FIX_PARAVIRT_BOOTMAP), 239963236dSVitaly Kuznetsov __pte_ma(0), 0)) 249963236dSVitaly Kuznetsov BUG(); 259963236dSVitaly Kuznetsov } 269963236dSVitaly Kuznetsov xen_pv_post_suspend(int suspend_cancelled)279963236dSVitaly Kuznetsovvoid xen_pv_post_suspend(int suspend_cancelled) 289963236dSVitaly Kuznetsov { 299963236dSVitaly Kuznetsov xen_build_mfn_list_list(); 307b25b9cbSPavel Tatashin set_fixmap(FIX_PARAVIRT_BOOTMAP, xen_start_info->shared_info); 317b25b9cbSPavel Tatashin HYPERVISOR_shared_info = (void *)fix_to_virt(FIX_PARAVIRT_BOOTMAP); 327b25b9cbSPavel Tatashin xen_setup_mfn_list_list(); 339963236dSVitaly Kuznetsov 349963236dSVitaly Kuznetsov if (suspend_cancelled) { 359963236dSVitaly Kuznetsov xen_start_info->store_mfn = 369963236dSVitaly Kuznetsov pfn_to_mfn(xen_start_info->store_mfn); 379963236dSVitaly Kuznetsov xen_start_info->console.domU.mfn = 389963236dSVitaly Kuznetsov pfn_to_mfn(xen_start_info->console.domU.mfn); 399963236dSVitaly Kuznetsov } else { 409963236dSVitaly Kuznetsov #ifdef CONFIG_SMP 419963236dSVitaly Kuznetsov BUG_ON(xen_cpu_initialized_map == NULL); 429963236dSVitaly Kuznetsov cpumask_copy(xen_cpu_initialized_map, cpu_online_mask); 439963236dSVitaly Kuznetsov #endif 449963236dSVitaly Kuznetsov xen_vcpu_restore(); 459963236dSVitaly Kuznetsov } 469963236dSVitaly Kuznetsov 479963236dSVitaly Kuznetsov xen_mm_unpin_all(); 489963236dSVitaly Kuznetsov } 49