Re: [RFC PATCH v3 0/4] Real mode interrupt injection

Avi Kivity
2010-08-16T13:19:11Z

On 08/16/2010 02:37 AM, Mohammed Gamal wrote:
> On Mon, Aug 16, 2010 at 12:46 AM, Mohammed Gamal<m.gamal005@gmail.com> wrote:
>> This patch introduces real mode interrupt injection for VMX.
>> It currently invokes the x86 emulator to emulate interrupts
>> instead of manually setting VMX controls.
>>
>> Needless to say, this is not meant for merging in its current state.
>> The emulator still needs some more work to get this completely operational.
>>
>> Mohammed Gamal (4):
>> x86 emulator: Expose emulate_int_real()
>> x86: Separate emulation context initialization in a separate function
>> x86: Add kvm_inject_realmode_interrupt() wrapper
>> VMX: Emulated real mode interrupt injection
>>
>> arch/x86/include/asm/kvm_emulate.h | 3 +-
>> arch/x86/kvm/vmx.c | 65 +++----------------------------
>> arch/x86/kvm/x86.c | 75 ++++++++++++++++++++++--------------
>> arch/x86/kvm/x86.h | 1 +
>> 4 files changed, 55 insertions(+), 89 deletions(-)
>> ---
>> Changes since v2:
>> - Refactored emulation context initialization code
>> - Commit eip value from the decode cache to the emulation context in x86.c rather than the emulator
>> - Add kvm_* prefix to inject_realmode_interrupt() global symbol for consistency
>>
> Here is a full trace of a MINIX guest since bootup. Looks like we get
> stuck somewhere in the BIOS.
> https://docs.google.com/leaf?id=0B9UodZT1IuENMzJhNWQxM2YtYzE3YS00YWY4LTk2YTgtZWY3ODNhMWUxMDkx&sort=name&layout=list&num=50

I debugged this for a bit - emulate_int_real() is completely broken.
emulate_push() doesn't push anything, it only schedules a push; running
these back-to-back will result in only the last push to be executed.

With that fixed, I get the boot splash. Not 100% perfect but much closer.

--
error compiling committee.c: too many arguments to function