All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Gleb Natapov <gleb@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	j-nomura@ce.jp.nec.com, stable@vger.kernel.org.#.3.9
Subject: Re: [PATCH v2 2/3] KVM: emulator: emulate XLAT
Date: Thu, 09 May 2013 13:40:12 +0200	[thread overview]
Message-ID: <518B8B1C.7030102@redhat.com> (raw)
In-Reply-To: <20130509100314.GD32023@redhat.com>

Il 09/05/2013 12:03, Gleb Natapov ha scritto:
> On Thu, May 09, 2013 at 11:32:50AM +0200, Paolo Bonzini wrote:
>> This is used by SGABIOS, KVM breaks with emulate_invalid_guest_state=1.
>> It is just a MOV in disguise, with a funny source address.
>>
>> Reported-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
>> Cc: stable@vger.kernel.org # 3.9
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>>  arch/x86/kvm/emulate.c | 16 +++++++++++++++-
>>  1 file changed, 15 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
>> index 709ba03..210bb4e 100644
>> --- a/arch/x86/kvm/emulate.c
>> +++ b/arch/x86/kvm/emulate.c
>> @@ -60,6 +60,7 @@
>>  #define OpGS              25ull  /* GS */
>>  #define OpMem8            26ull  /* 8-bit zero extended memory operand */
>>  #define OpImm64           27ull  /* Sign extended 16/32/64-bit immediate */
>> +#define OpXLat            28ull  /* memory at BX/EBX/RBX + zero-extended AL */
>>  
>>  #define OpBits             5  /* Width of operand field */
>>  #define OpMask             ((1ull << OpBits) - 1)
>> @@ -99,6 +100,7 @@
>>  #define SrcImmUByte (OpImmUByte << SrcShift)
>>  #define SrcImmU     (OpImmU << SrcShift)
>>  #define SrcSI       (OpSI << SrcShift)
>> +#define SrcXLat     (OpXLat << SrcShift)
>>  #define SrcImmFAddr (OpImmFAddr << SrcShift)
>>  #define SrcMemFAddr (OpMemFAddr << SrcShift)
>>  #define SrcAcc      (OpAcc << SrcShift)
>> @@ -3949,7 +3951,8 @@ static const struct opcode opcode_table[256] = {
>>  	G(Src2One | ByteOp, group2), G(Src2One, group2),
>>  	G(Src2CL | ByteOp, group2), G(Src2CL, group2),
>>  	I(DstAcc | SrcImmUByte | No64, em_aam),
>> -	I(DstAcc | SrcImmUByte | No64, em_aad), N, N,
>> +	I(DstAcc | SrcImmUByte | No64, em_aad), N,
>> +	I(DstAcc | SrcXLat | ByteOp, em_mov),
>>  	/* 0xD8 - 0xDF */
>>  	N, E(0, &escape_d9), N, E(0, &escape_db), N, E(0, &escape_dd), N, N,
>>  	/* 0xE0 - 0xE7 */
>> @@ -4207,6 +4210,17 @@ static int decode_operand(struct x86_emulate_ctxt *ctxt, struct operand *op,
>>  		op->val = 0;
>>  		op->count = 1;
>>  		break;
>> +	case OpXLat:
> Sigh, obviously this is not reusable by any other instruction. So many
> waisted transistor :(

And a precious op value too, we only have 3 left. :/

>> +		op->type = OP_MEM;
>> +		op->bytes = (ctxt->d & ByteOp) ? 1 : ctxt->op_bytes;
>> +		op->addr.mem.ea =
>> +			register_address(ctxt,
>> +				reg_read(ctxt, VCPU_REGS_RBX) +
>> +				(reg_read(ctxt, VCPU_REGS_RAX) & 0xff));
>> +		op->addr.mem.seg = seg_override(ctxt);
>> +		op->val = 0;
>> +		op->count = 1;
> The count is set only for decoding that is used by string instructions.
> I can drop it while applying.

Thanks!

Paolo

>> +		break;
>>  	case OpImmFAddr:
>>  		op->type = OP_IMM;
>>  		op->addr.mem.ea = ctxt->_eip;
>> -- 
>> 1.8.1.4
>>
> 
> --
> 			Gleb.
> 

  reply	other threads:[~2013-05-09 11:40 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-09  9:32 [PATCH v2 0/3] KVM: emulate AAM, XLAT, SALC Paolo Bonzini
     [not found] ` <1368091971-5071-3-git-send-email-pbonzini@redhat.com>
2013-05-09 10:03   ` [PATCH v2 2/3] KVM: emulator: emulate XLAT Gleb Natapov
2013-05-09 11:40     ` Paolo Bonzini [this message]
2013-05-09 12:01 ` [PATCH v2 0/3] KVM: emulate AAM, XLAT, SALC Gleb Natapov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=518B8B1C.7030102@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=gleb@redhat.com \
    --cc=j-nomura@ce.jp.nec.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org.#.3.9 \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.