Commit 91834e68 authored by Isaku Yamahata's avatar Isaku Yamahata Committed by Tony Luck
Browse files

ia64/xen: preliminary support for save/restore.



preliminary support for save/restore.
Although Save/restore isn't fully working yet, this patch is necessary
to compile.

Signed-off-by: default avatarIsaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent a0df655c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
#

obj-y := hypercall.o xenivt.o xensetup.o xen_pv_ops.o irq_xen.o \
	 hypervisor.o xencomm.o xcom_hcall.o grant-table.o time.o
	 hypervisor.o xencomm.o xcom_hcall.o grant-table.o time.o suspend.o

obj-$(CONFIG_IA64_GENERIC) += machvec.o

+64 −0
Original line number Diff line number Diff line
/******************************************************************************
 * arch/ia64/xen/suspend.c
 *
 * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
 *                    VA Linux Systems Japan K.K.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * suspend/resume
 */

#include <xen/xen-ops.h>
#include <asm/xen/hypervisor.h>
#include "time.h"

void
xen_mm_pin_all(void)
{
	/* nothing */
}

void
xen_mm_unpin_all(void)
{
	/* nothing */
}

void xen_pre_device_suspend(void)
{
	/* nothing */
}

void
xen_pre_suspend()
{
	/* nothing */
}

void
xen_post_suspend(int suspend_cancelled)
{
	if (suspend_cancelled)
		return;

	xen_ia64_enable_opt_feature();
	/* add more if necessary */
}

void xen_arch_resume(void)
{
	xen_timer_resume_on_aps();
}
+33 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@
#include <linux/irq.h>
#include <linux/clocksource.h>

#include <asm/timex.h>

#include <asm/xen/hypervisor.h>

#include <xen/interface/vcpu.h>
@@ -178,3 +180,34 @@ struct pv_time_ops xen_time_ops __initdata = {
	.do_steal_accounting		= xen_do_steal_accounting,
	.clocksource_resume		= xen_itc_jitter_data_reset,
};

/* Called after suspend, to resume time.  */
static void xen_local_tick_resume(void)
{
	/* Just trigger a tick.  */
	ia64_cpu_local_tick();
	touch_softlockup_watchdog();
}

void
xen_timer_resume(void)
{
	unsigned int cpu;

	xen_local_tick_resume();

	for_each_online_cpu(cpu)
		xen_init_missing_ticks_accounting(cpu);
}

static void ia64_cpu_local_tick_fn(void *unused)
{
	xen_local_tick_resume();
	xen_init_missing_ticks_accounting(smp_processor_id());
}

void
xen_timer_resume_on_aps(void)
{
	smp_call_function(&ia64_cpu_local_tick_fn, NULL, 1);
}
+1 −0
Original line number Diff line number Diff line
@@ -21,3 +21,4 @@
 */

extern struct pv_time_ops xen_time_ops __initdata;
void xen_timer_resume_on_aps(void);