blob: d6b1680693a9b7114e7d87e59b52d871e28a6b27 [file] [log] [blame]
Jeremy Fitzhardinge0e913982008-05-26 23:31:27 +01001#include <linux/types.h>
Thomas Gleixner4ffee522015-03-25 13:09:16 +01002#include <linux/tick.h>
Jeremy Fitzhardinge0e913982008-05-26 23:31:27 +01003
Andrew Mortonfacca612015-12-29 14:54:13 -08004#include <xen/xen.h>
Jeremy Fitzhardinge0e913982008-05-26 23:31:27 +01005#include <xen/interface/xen.h>
6#include <xen/grant_table.h>
7#include <xen/events.h>
8
9#include <asm/xen/hypercall.h>
10#include <asm/xen/page.h>
Ingo Molnar99d00002009-01-23 11:09:15 +010011#include <asm/fixmap.h>
Jeremy Fitzhardinge0e913982008-05-26 23:31:27 +010012
13#include "xen-ops.h"
14#include "mmu.h"
Boris Ostrovsky65d0cf02015-08-10 16:34:34 -040015#include "pmu.h"
Jeremy Fitzhardinge0e913982008-05-26 23:31:27 +010016
David Vrabelaa8532c2014-05-08 11:09:23 +010017void xen_arch_pre_suspend(void)
18{
Boris Ostrovsky65d0cf02015-08-10 16:34:34 -040019 if (xen_pv_domain())
20 xen_pv_pre_suspend();
David Vrabelaa8532c2014-05-08 11:09:23 +010021}
22
23void xen_arch_post_suspend(int cancelled)
24{
Boris Ostrovsky65d0cf02015-08-10 16:34:34 -040025 if (xen_pv_domain())
26 xen_pv_post_suspend(cancelled);
27 else
28 xen_hvm_post_suspend(cancelled);
Jeremy Fitzhardinge0e913982008-05-26 23:31:27 +010029}
30
Ian Campbellf6eafe32009-11-25 14:12:08 +000031static void xen_vcpu_notify_restore(void *data)
32{
Ian Campbellf6eafe32009-11-25 14:12:08 +000033 /* Boot processor notified via generic timekeeping_resume() */
Thomas Gleixner4ffee522015-03-25 13:09:16 +010034 if (smp_processor_id() == 0)
Ian Campbellf6eafe32009-11-25 14:12:08 +000035 return;
36
Thomas Gleixnerf46481d2015-03-25 13:11:04 +010037 tick_resume_local();
Ian Campbellf6eafe32009-11-25 14:12:08 +000038}
39
Boris Ostrovsky2b953a52015-04-28 18:46:20 -040040static void xen_vcpu_notify_suspend(void *data)
41{
42 tick_suspend_local();
43}
44
Isaku Yamahataad55db92008-07-08 15:06:32 -070045void xen_arch_resume(void)
46{
Boris Ostrovskyde0afc92015-12-02 12:10:48 -050047 int cpu;
48
Thomas Gleixner4ffee522015-03-25 13:09:16 +010049 on_each_cpu(xen_vcpu_notify_restore, NULL, 1);
Boris Ostrovskyde0afc92015-12-02 12:10:48 -050050
51 for_each_online_cpu(cpu)
52 xen_pmu_init(cpu);
Isaku Yamahataad55db92008-07-08 15:06:32 -070053}
Boris Ostrovsky2b953a52015-04-28 18:46:20 -040054
55void xen_arch_suspend(void)
56{
Boris Ostrovskyde0afc92015-12-02 12:10:48 -050057 int cpu;
58
59 for_each_online_cpu(cpu)
60 xen_pmu_finish(cpu);
61
Boris Ostrovsky2b953a52015-04-28 18:46:20 -040062 on_each_cpu(xen_vcpu_notify_suspend, NULL, 1);
63}