On Tue, Feb 19, 2013 at 06:35:03PM +0000, David Woodhouse wrote:
On Tue, 2013-02-19 at 20:13 +0200, Gleb Natapov wrote:
I take it you mean copy 0xfffe0000 to 0xe0000? That would not be
fun.
SeaBIOS would need to detect that it's in the state (it's definitely not correct to do that on real-hardware or on "working" kvm instances), then setup a trampoline somewhere outside of 0xe0000-0xfffff to do the memcpy, jump to that trampoline, copy the memory, restore segment registers, and then jump to 0xfffffff0. That's a lot of kvm specific code to add to seabios as a workaround and it seems fragile anyway.
Isn't this exactly what qemu_prep_reset() is doing now?
No. It doesn't do the trampoline thing because it doesn't *have* to; it's copying an identical copy of the code back over itself.
Ah, yes of course. So does CSM takes the whole 0xe0000-0xfffff segment or it leaves OVMF code there somewhere. CSM reset code can jump into OVMF code in 0xe0000-0xfffff range and let it do the copy.
-- Gleb.