Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8dd38383 authored by Ian Campbell's avatar Ian Campbell
Browse files

xen: suspend and resume system devices when running PVHVM



Otherwise we fail to properly suspend/resume all of the emulated devices.

Something between 2.6.38-rc2 and rc3 appears to have exposed this
issue, but it's always been wrong not to do this.

Signed-off-by: default avatarIan Campbell <ian.campbell@citrix.com>
Acked-by: default avatarStefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: default avatarJeremy Fitzhardinge <jeremy@goop.org>
parent 100b33c8
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -37,11 +37,19 @@ static enum shutdown_state shutting_down = SHUTDOWN_INVALID;
#ifdef CONFIG_PM_SLEEP
static int xen_hvm_suspend(void *data)
{
	int err;
	struct sched_shutdown r = { .reason = SHUTDOWN_suspend };
	int *cancelled = data;

	BUG_ON(!irqs_disabled());

	err = sysdev_suspend(PMSG_SUSPEND);
	if (err) {
		printk(KERN_ERR "xen_hvm_suspend: sysdev_suspend failed: %d\n",
		       err);
		return err;
	}

	*cancelled = HYPERVISOR_sched_op(SCHEDOP_shutdown, &r);

	xen_hvm_post_suspend(*cancelled);
@@ -53,6 +61,8 @@ static int xen_hvm_suspend(void *data)
		xen_timer_resume();
	}

	sysdev_resume();

	return 0;
}