Re: [PATCH v2 3/3] KVM: x86 emulator: fix REPZ/REPNZ termination condition

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




>  On 08/19/2010 07:55 AM, Wei Yongjun wrote:
>   
>> Hi Avi Kivity:
>>
>>     
>>> EFLAGS.ZF needs to be checked after each iteration, not before.
>>>
>>> Signed-off-by: Avi Kivity <avi@xxxxxxxxxx>
>>> ---
>>>  arch/x86/kvm/emulate.c |   38 ++++++++++++++++++--------------------
>>>  1 files changed, 18 insertions(+), 20 deletions(-)
>>>
>>> diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
>>> index 729853a..d15a746 100644
>>> --- a/arch/x86/kvm/emulate.c
>>> +++ b/arch/x86/kvm/emulate.c
>>> @@ -2782,28 +2782,10 @@ x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
>>>  		ctxt->restart = true;
>>>  		/* All REP prefixes have the same first termination condition */
>>>  		if (address_mask(c, c->regs[VCPU_REGS_RCX]) == 0) {
>>> -		string_done:
>>>  			ctxt->restart = false;
>>>  			ctxt->eip = c->eip;
>>>  			goto done;
>>>  		}
>>> -		/* The second termination condition only applies for REPE
>>> -		 * and REPNE. Test if the repeat string operation prefix is
>>> -		 * REPE/REPZ or REPNE/REPNZ and if it's the case it tests the
>>> -		 * corresponding termination condition according to:
>>> -		 * 	- if REPE/REPZ and ZF = 0 then done
>>> -		 * 	- if REPNE/REPNZ and ZF = 1 then done
>>> -		 */
>>> -		if ((c->b == 0xa6) || (c->b == 0xa7) ||
>>> -		    (c->b == 0xae) || (c->b == 0xaf)) {
>>> -			if ((c->rep_prefix == REPE_PREFIX) &&
>>> -			    ((ctxt->eflags & EFLG_ZF) == 0))
>>> -				goto string_done;
>>> -			if ((c->rep_prefix == REPNE_PREFIX) &&
>>> -			    ((ctxt->eflags & EFLG_ZF) == EFLG_ZF))
>>> -				goto string_done;
>>> -		}
>>> -		c->eip = ctxt->eip;
>>>   
>>>       
>> It seems that you cannot remove the above line, the assign for eip is need.
>> remove it will break FreeDOS livecd. Not sure why need this.
>>     
> I'll try it out. Are you running FreeDOS with
> emulate_invalid_guest_state=0 or 1?
>   

I try it with emulate_invalid_guest_state=1.


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux