cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

suspend_pv.c (1163B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <linux/types.h>
      3
      4#include <asm/xen/hypercall.h>
      5#include <asm/xen/page.h>
      6
      7#include <asm/fixmap.h>
      8
      9#include "xen-ops.h"
     10
     11void xen_pv_pre_suspend(void)
     12{
     13	xen_mm_pin_all();
     14
     15	xen_start_info->store_mfn = mfn_to_pfn(xen_start_info->store_mfn);
     16	xen_start_info->console.domU.mfn =
     17		mfn_to_pfn(xen_start_info->console.domU.mfn);
     18
     19	BUG_ON(!irqs_disabled());
     20
     21	HYPERVISOR_shared_info = &xen_dummy_shared_info;
     22	if (HYPERVISOR_update_va_mapping(fix_to_virt(FIX_PARAVIRT_BOOTMAP),
     23					 __pte_ma(0), 0))
     24		BUG();
     25}
     26
     27void xen_pv_post_suspend(int suspend_cancelled)
     28{
     29	xen_build_mfn_list_list();
     30	set_fixmap(FIX_PARAVIRT_BOOTMAP, xen_start_info->shared_info);
     31	HYPERVISOR_shared_info = (void *)fix_to_virt(FIX_PARAVIRT_BOOTMAP);
     32	xen_setup_mfn_list_list();
     33
     34	if (suspend_cancelled) {
     35		xen_start_info->store_mfn =
     36			pfn_to_mfn(xen_start_info->store_mfn);
     37		xen_start_info->console.domU.mfn =
     38			pfn_to_mfn(xen_start_info->console.domU.mfn);
     39	} else {
     40#ifdef CONFIG_SMP
     41		BUG_ON(xen_cpu_initialized_map == NULL);
     42		cpumask_copy(xen_cpu_initialized_map, cpu_online_mask);
     43#endif
     44		xen_vcpu_restore();
     45	}
     46
     47	xen_mm_unpin_all();
     48}