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 have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.

--
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