On Tue, Jan 22, 2008 at 01:12:12PM +0100, Jan Kiszka wrote:
> Guido Guenther wrote:
> > On Tue, Jan 22, 2008 at 11:11:00AM +0100, Jan Kiszka wrote:
> >>  #if defined(TARGET_I386)
> >>  void qemu_system_powerdown(void)
> >>  {
> >> +    if (!pm_state)
> >> +        exit(0);
> >>      if(pm_state->pmen & PWRBTN_EN) {
> >>          pm_state->pmsts |= PWRBTN_EN;
> >>    pm_update_sci(pm_state);
> > This totally defeats the "clean shutdown" purpose of system_powerdown.
> > Think of it like: 
> >     system_powerdown: hint the system to shutdown cleanly
> >     SIGTERM: kill the vm
> > This is how things are wired up in libvirt at the moment.
> 
> So how to signal a "clean shutdown" to the guest if there is no channel
> for this?
It isn't. It's about what system_powerdown should mean. IMHO it should
be "signal the guest to shut down cleanly". 

If the guest can't do that, it simply can't. You can then SIGTERM the
guest after a timeout. Note that even an acpi system might not be able
to shut down since it hangs on a network unmount or it ignores the ACPI
interrupt via kernel commandline or whatever. You can't ever expect a
system to shutdown cleanly, so you need the SIGTERM failsave anyway.
Have a look at e.g. domainShutdown() vs. domainDestroy() in libvirt.
Cheers,
 -- Guido

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to