On Sun, Jul 6, 2008 at 4:34 PM, Avi Kivity <[EMAIL PROTECTED]> wrote:
> Mohammed Gamal wrote:
>>
>> On Sun, Jul 6, 2008 at 10:51 AM, Avi Kivity <[EMAIL PROTECTED]> wrote:
>>
>>>
>>> Mohammed Gamal wrote:
>>>
>>>>
>>>> This patch resolves the problem encountered with HLT emulation with
>>>> FreeDOS's HIMEM XMS Driver.
>>>> HLT is the only instruction that goes to the done label unconditionally,
>>>> causing the EIP value not to be updated which leads to the guest looping
>>>> forever on the same instruction.
>>>>
>>>> Signed-off-by: Mohammed Gamal <[EMAIL PROTECTED]>
>>>>
>>>> ---
>>>>
>>>>  arch/x86/kvm/x86_emulate.c |    4 +++-
>>>>  1 files changed, 3 insertions(+), 1 deletions(-)
>>>>
>>>> diff --git a/arch/x86/kvm/x86_emulate.c b/arch/x86/kvm/x86_emulate.c
>>>> index dd4efe1..04d7f02 100644
>>>> --- a/arch/x86/kvm/x86_emulate.c
>>>> +++ b/arch/x86/kvm/x86_emulate.c
>>>> @@ -1769,13 +1769,15 @@ writeback:
>>>>         /* Commit shadow register state. */
>>>>       memcpy(ctxt->vcpu->arch.regs, c->regs, sizeof c->regs);
>>>> -       kvm_rip_write(ctxt->vcpu, c->eip);
>>>>  done:
>>>>       if (rc == X86EMUL_UNHANDLEABLE) {
>>>>               c->eip = saved_eip;
>>>>               return -1;
>>>>       }
>>>> +       else
>>>> +               kvm_rip_write(ctxt->vcpu, c->eip);
>>>> +
>>>>       return 0;
>>>>
>>>
>>> Why not change hlt to writeback like all other instructions?
>>>
>>>
>>
>> IIRC hlt doesn't do writebacks. So, instead of changing hlt to go for
>> a bogus writeback, I thought it'd be more logical that since we're
>> going to the done label anyway we check first if the instruction is
>> unhandleable, in which case we write the saved EIP, otherwise we
>> update the EIP value.
>>
>
> It's not bogus, you have to write back the instruction pointer at least.  It
> also helps having less code paths.
>

The instruction pointer would haven been written back anyway as we do
go to the done label anyway. But I am convinced with your agrument.

>> Anyway, here is a patch that changes hlt to writeback.
>>
>
> Does it solve the problem?  If so, please provide an updated changelog entry
> and a signoff.

Yes it does, I'll send the updated patch right now.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to