Commit | Line | Data |
---|---|---|
0e91398f | 1 | #include <linux/types.h> |
f6eafe36 | 2 | #include <linux/clockchips.h> |
0e91398f JF |
3 | |
4 | #include <xen/interface/xen.h> | |
5 | #include <xen/grant_table.h> | |
6 | #include <xen/events.h> | |
7 | ||
8 | #include <asm/xen/hypercall.h> | |
9 | #include <asm/xen/page.h> | |
99d0000f | 10 | #include <asm/fixmap.h> |
0e91398f JF |
11 | |
12 | #include "xen-ops.h" | |
13 | #include "mmu.h" | |
14 | ||
15 | void xen_pre_suspend(void) | |
16 | { | |
17 | xen_start_info->store_mfn = mfn_to_pfn(xen_start_info->store_mfn); | |
18 | xen_start_info->console.domU.mfn = | |
19 | mfn_to_pfn(xen_start_info->console.domU.mfn); | |
20 | ||
21 | BUG_ON(!irqs_disabled()); | |
22 | ||
23 | HYPERVISOR_shared_info = &xen_dummy_shared_info; | |
24 | if (HYPERVISOR_update_va_mapping(fix_to_virt(FIX_PARAVIRT_BOOTMAP), | |
25 | __pte_ma(0), 0)) | |
26 | BUG(); | |
27 | } | |
28 | ||
29 | void xen_post_suspend(int suspend_cancelled) | |
30 | { | |
fa24ba62 IC |
31 | xen_build_mfn_list_list(); |
32 | ||
9c7a7942 JF |
33 | xen_setup_shared_info(); |
34 | ||
0e91398f JF |
35 | if (suspend_cancelled) { |
36 | xen_start_info->store_mfn = | |
37 | pfn_to_mfn(xen_start_info->store_mfn); | |
38 | xen_start_info->console.domU.mfn = | |
39 | pfn_to_mfn(xen_start_info->console.domU.mfn); | |
40 | } else { | |
41 | #ifdef CONFIG_SMP | |
b78936e1 MT |
42 | BUG_ON(xen_cpu_initialized_map == NULL); |
43 | cpumask_copy(xen_cpu_initialized_map, cpu_online_mask); | |
0e91398f | 44 | #endif |
9c7a7942 | 45 | xen_vcpu_restore(); |
0e91398f JF |
46 | } |
47 | ||
0e91398f JF |
48 | } |
49 | ||
f6eafe36 IC |
50 | static void xen_vcpu_notify_restore(void *data) |
51 | { | |
52 | unsigned long reason = (unsigned long)data; | |
53 | ||
54 | /* Boot processor notified via generic timekeeping_resume() */ | |
55 | if ( smp_processor_id() == 0) | |
56 | return; | |
57 | ||
58 | clockevents_notify(reason, NULL); | |
59 | } | |
60 | ||
ad55db9f IY |
61 | void xen_arch_resume(void) |
62 | { | |
cd52e17e IC |
63 | on_each_cpu(xen_vcpu_notify_restore, |
64 | (void *)CLOCK_EVT_NOTIFY_RESUME, 1); | |
ad55db9f | 65 | } |