]> bbs.cooldavid.org Git - net-next-2.6.git/blame - arch/x86/xen/suspend.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[net-next-2.6.git] / arch / x86 / xen / suspend.c
CommitLineData
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
15void 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
29void 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
50static 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
61void xen_arch_resume(void)
62{
cd52e17e
IC
63 on_each_cpu(xen_vcpu_notify_restore,
64 (void *)CLOCK_EVT_NOTIFY_RESUME, 1);
ad55db9f 65}