|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 02/15] x86/emul: Simplfy emulation state setup
>>> On 24.11.16 at 14:59, <andrew.cooper3@xxxxxxxxxx> wrote:
> On 24/11/16 13:44, Jan Beulich wrote:
>>>>> On 23.11.16 at 16:38, <andrew.cooper3@xxxxxxxxxx> wrote:
>>> --- a/xen/arch/x86/x86_emulate/x86_emulate.c
>>> +++ b/xen/arch/x86/x86_emulate/x86_emulate.c
>>> @@ -1904,6 +1904,8 @@ x86_decode(
>>> state->regs = ctxt->regs;
>>> state->eip = ctxt->regs->eip;
>>>
>>> + /* Initialise output state in x86_emulate_ctxt */
>>> + ctxt->opcode = ~0u;
>> I have to admit that I don't see the point of this.
>
> There are early exit paths which leave it uninitialised. An alternative
> would be explicitly document that it is only valid for X86EMUL_OKAY?
Well, to me that goes without saying, but I'm fine with it being added.
>> So I'd suggest to have three groups: input, input/output, output,
>> even if for your purpose here you only want to tell apart fields which
>> need to be initialized before calling x86_emulate() / x86_decode()
>> (the first two groups) from those which don't (the last group).
>
> Right - proposed net result looks like:
>
> struct x86_emulate_ctxt
> {
> /*
> * Input-only state:
> */
>
> /* Software event injection support. */
> enum x86_swint_emulation swint_emulate;
>
> /* Set this if writes may have side effects. */
> bool force_writeback;
>
> /* Caller data that can be used by x86_emulate_ops' routines. */
> void *data;
>
> /*
> * Input/output state:
> */
>
> /* Register state before/after emulation. */
> struct cpu_user_regs *regs;
>
> /* Default address size in current execution mode (16, 32, or 64). */
> unsigned int addr_size;
>
> /* Stack pointer width in bits (16, 32 or 64). */
> unsigned int sp_size;
>
> /*
> * Output-only state:
> */
>
> /* Canonical opcode (see below) (valid only on X86EMUL_OKAY). */
> unsigned int opcode;
>
> /* Retirement state, set by the emulator (valid only on
> X86EMUL_OKAY). */
> union {
> struct {
> uint8_t hlt:1; /* Instruction HLTed. */
> uint8_t mov_ss:1; /* Instruction sets MOV-SS irq
> shadow. */
> uint8_t sti:1; /* Instruction sets STI irq shadow. */
> } flags;
> uint8_t byte;
> } retire;
> };
>
> If that is ok?
Looks good, thanks. With that
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |