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
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to