# HVM domain shuts itself down only if it has PV drivers
if self.info.is_hvm():
hvm_pvdrv = xc.hvm_get_param(self.domid, HVM_PARAM_CALLBACK_IRQ)
- if not hvm_pvdrv:
+ hvm_s_state = xc.hvm_get_param(self.domid, HVM_PARAM_ACPI_S_STATE)
+ if not hvm_pvdrv or hvm_s_state != 0:
code = REVERSE_DOMAIN_SHUTDOWN_REASONS[reason]
log.info("HVM save:remote shutdown dom %d!", self.domid)
xc.domain_shutdown(self.domid, code)
{
unsigned long sx_state = 0;
- /* Nothing to do if the guest is in an ACPI sleep state. */
+ /* Cannot notify guest to shut itself down if it's in ACPI sleep state. */
if (si.flags & XCFLAGS_HVM)
xc_get_hvm_param(si.xc_fd, si.domid,
HVM_PARAM_ACPI_S_STATE, &sx_state);
- if (sx_state != 0) {
- /* notify xend that it can do device migration */
- printf("suspended\n");
- fflush(stdout);
- return 1;
- }
- if (si.suspend_evtchn >= 0)
+ if ((sx_state == 0) && (si.suspend_evtchn >= 0))
return evtchn_suspend();
return compat_suspend();