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