Hi guys,
I found an ASSERT issue in function InstallVbeShim() in QemuVideoDxe driver
during reset. The assert statement is like below.
ASSERT (Int0x10->Segment == 0x0000);
ASSERT (Int0x10->Offset == 0x0000);
This happened after I have enabled NULL pointer access detection feature, in
which page 0 (4K) is disabled. And because of page 0 disabled, I have to skip
the memory clearing for page 0 in DXE core. Otherwise it will cause page fault
exception there. It seems that QEMU may clear all its memory at startup.
Skipping the action of clearing page 0 in core won't cause ASSERT issue in
QemuVideoDxe, for the first time boot. But QemuVideoDxe will write int10 vector
at memory 0x10 and QEMU will not clear all its memory during warm boot. ASSERT
will be triggered after reset.
It's easy to fix this issue but there're some subtle situations which I'm not
quite certain. I'd like your opinions for them.
Here're my thoughts on several solutions:
a) Remove the ASSERT statement in InstallVbeShim(). But I'm sure if it is safe
to do so because I don't quite understand the purpose of the ASSERT.
b) Instead of skipping clearing page 0, enable it, do clearing and then disable
it. The problem here is that CPU arch protocol is not ready at that time. I
have to "manually" do page operation, which might be non-portable and a little
bit odd in DXE core.
c) Move code clearing page 0 from DXE core to another place wherever
appropriate, like DxeIpl or cpu driver. But I think there's a good reason to
put code there before.
Thanks,
Wang, Jian J
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel