[SeaBIOS] [PATCH 00/11] Relocate init code to high memory
kevin at koconnor.net
Fri Sep 17 01:31:46 CEST 2010
On Thu, Sep 16, 2010 at 06:34:04PM +0200, Avi Kivity wrote:
> On 09/16/2010 04:31 AM, Kevin O'Connor wrote:
> >Unfortunately, both qemu and kvm don't appear to have a reliable way
> >to hard-reboot - normal reboots don't reset the 0xc0000-0xfffff
> >memory. I've worked around this on qemu by manually resetting that
> >memory. However, kvm doesn't keep a pristine copy of the bios at
> >0xffff0000. Until this is fixed, this patch series will cause a
> >soft-reboot on kvm to result in a shutdown instead of a reboot.
> Why is there a difference between qemu and kvm here? What patch did
> you use for qemu and why doesn't it work for kvm?
I did not patch qemu or kvm. The issue (and work around) can be seen
in seabios patch 7 of the series:
Basically, SeaBIOS detects a rerun of post (soft reset) when a
variable in the f-segment (HaveRunPost) is set. When that occurs,
seabios triggers a reset (i8042_reboot). Unfortunately, neither qemu
nor kvm reset the f-segment, so on the next boot seabios still sees
HaveRunPost as set, and things get stuck in a loop.
To work around this, patch 7 does a copy from 0xffff0000 to 0xf0000 to
manually clear the f-segment (qemu_prep_reset). This hack works okay
for qemu. Unfortunately, it doesn't work for kvm - even after the
copy HaveRunPost is still set. Normally, 0xffff0000 would have a
pristine copy of the bios - changes to 0xf0000 should not also change
0xffff0000, but it looks like kvm does something different.
More information about the SeaBIOS