* [PATCH v2] x86emul: add "unblock NMI" retire flag
@ 2017-04-11 15:36 Jan Beulich
2017-04-11 16:09 ` Andrew Cooper
0 siblings, 1 reply; 5+ messages in thread
From: Jan Beulich @ 2017-04-11 15:36 UTC (permalink / raw)
To: xen-devel; +Cc: Andrew Cooper, Julien Grall, Paul Durrant
[-- Attachment #1: Type: text/plain, Size: 4233 bytes --]
No matter that we emulate IRET for (guest) real more only right now, we
should get its effect on (virtual) NMI delivery right.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: Adjust x86_emulate_wrapper() accordingly.
--- a/xen/arch/x86/hvm/emulate.c
+++ b/xen/arch/x86/hvm/emulate.c
@@ -1955,25 +1955,32 @@ static int _hvm_emulate_one(struct hvm_e
memcpy(vio->mmio_insn, hvmemul_ctxt->insn_buf, vio->mmio_insn_bytes);
}
- if ( rc != X86EMUL_OKAY )
- return rc;
+ new_intr_shadow = hvmemul_ctxt->intr_shadow;
- if ( hvmemul_ctxt->ctxt.retire.singlestep )
- hvm_inject_hw_exception(TRAP_debug, X86_EVENT_NO_EC);
+ /*
+ * IRET, if valid in the given context, clears NMI blocking
+ * (irrespective of rc).
+ */
+ if ( hvmemul_ctxt->ctxt.retire.unblock_nmi )
+ new_intr_shadow &= ~HVM_INTR_SHADOW_NMI;
- new_intr_shadow = hvmemul_ctxt->intr_shadow;
+ if ( rc == X86EMUL_OKAY )
+ {
+ if ( hvmemul_ctxt->ctxt.retire.singlestep )
+ hvm_inject_hw_exception(TRAP_debug, X86_EVENT_NO_EC);
- /* MOV-SS instruction toggles MOV-SS shadow, else we just clear it. */
- if ( hvmemul_ctxt->ctxt.retire.mov_ss )
- new_intr_shadow ^= HVM_INTR_SHADOW_MOV_SS;
- else
- new_intr_shadow &= ~HVM_INTR_SHADOW_MOV_SS;
-
- /* STI instruction toggles STI shadow, else we just clear it. */
- if ( hvmemul_ctxt->ctxt.retire.sti )
- new_intr_shadow ^= HVM_INTR_SHADOW_STI;
- else
- new_intr_shadow &= ~HVM_INTR_SHADOW_STI;
+ /* MOV-SS instruction toggles MOV-SS shadow, else we just clear it. */
+ if ( hvmemul_ctxt->ctxt.retire.mov_ss )
+ new_intr_shadow ^= HVM_INTR_SHADOW_MOV_SS;
+ else
+ new_intr_shadow &= ~HVM_INTR_SHADOW_MOV_SS;
+
+ /* STI instruction toggles STI shadow, else we just clear it. */
+ if ( hvmemul_ctxt->ctxt.retire.sti )
+ new_intr_shadow ^= HVM_INTR_SHADOW_STI;
+ else
+ new_intr_shadow &= ~HVM_INTR_SHADOW_STI;
+ }
if ( hvmemul_ctxt->intr_shadow != new_intr_shadow )
{
@@ -1981,13 +1988,11 @@ static int _hvm_emulate_one(struct hvm_e
hvm_funcs.set_interrupt_shadow(curr, new_intr_shadow);
}
- if ( hvmemul_ctxt->ctxt.retire.hlt &&
+ if ( rc == X86EMUL_OKAY && hvmemul_ctxt->ctxt.retire.hlt &&
!hvm_local_events_need_delivery(curr) )
- {
hvm_hlt(regs->eflags);
- }
- return X86EMUL_OKAY;
+ return rc;
}
int hvm_emulate_one(
--- a/xen/arch/x86/x86_emulate/x86_emulate.c
+++ b/xen/arch/x86/x86_emulate/x86_emulate.c
@@ -4002,6 +4002,7 @@ x86_emulate(
uint32_t mask = X86_EFLAGS_VIP | X86_EFLAGS_VIF | X86_EFLAGS_VM;
fail_if(!in_realmode(ctxt, ops));
+ ctxt->retire.unblock_nmi = true;
if ( (rc = read_ulong(x86_seg_ss, sp_post_inc(op_bytes),
&eip, op_bytes, ctxt, ops)) ||
(rc = read_ulong(x86_seg_ss, sp_post_inc(op_bytes),
@@ -7918,9 +7919,17 @@ int x86_emulate_wrapper(
rc = x86_emulate(ctxt, ops);
- /* Retire flags should only be set for successful instruction emulation. */
+ /*
+ * Most retire flags should only be set for successful instruction
+ * emulation.
+ */
if ( rc != X86EMUL_OKAY )
- ASSERT(ctxt->retire.raw == 0);
+ {
+ typeof(ctxt->retire) retire = ctxt->retire;
+
+ retire.unblock_nmi = false;
+ ASSERT(!retire.raw);
+ }
/* All cases returning X86EMUL_EXCEPTION should have fault semantics. */
if ( rc == X86EMUL_EXCEPTION )
--- a/xen/arch/x86/x86_emulate/x86_emulate.h
+++ b/xen/arch/x86/x86_emulate/x86_emulate.h
@@ -490,6 +490,7 @@ struct x86_emulate_ctxt
bool hlt:1; /* Instruction HLTed. */
bool mov_ss:1; /* Instruction sets MOV-SS irq shadow. */
bool sti:1; /* Instruction sets STI irq shadow. */
+ bool unblock_nmi:1; /* Instruction clears NMI blocking. */
bool singlestep:1; /* Singlestepping was active. */
};
} retire;
[-- Attachment #2: x86emul-unblock-NMI.patch --]
[-- Type: text/plain, Size: 4271 bytes --]
x86emul: add "unblock NMI" retire flag
No matter that we emulate IRET for (guest) real more only right now, we
should get its effect on (virtual) NMI delivery right.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: Adjust x86_emulate_wrapper() accordingly.
--- a/xen/arch/x86/hvm/emulate.c
+++ b/xen/arch/x86/hvm/emulate.c
@@ -1955,25 +1955,32 @@ static int _hvm_emulate_one(struct hvm_e
memcpy(vio->mmio_insn, hvmemul_ctxt->insn_buf, vio->mmio_insn_bytes);
}
- if ( rc != X86EMUL_OKAY )
- return rc;
+ new_intr_shadow = hvmemul_ctxt->intr_shadow;
- if ( hvmemul_ctxt->ctxt.retire.singlestep )
- hvm_inject_hw_exception(TRAP_debug, X86_EVENT_NO_EC);
+ /*
+ * IRET, if valid in the given context, clears NMI blocking
+ * (irrespective of rc).
+ */
+ if ( hvmemul_ctxt->ctxt.retire.unblock_nmi )
+ new_intr_shadow &= ~HVM_INTR_SHADOW_NMI;
- new_intr_shadow = hvmemul_ctxt->intr_shadow;
+ if ( rc == X86EMUL_OKAY )
+ {
+ if ( hvmemul_ctxt->ctxt.retire.singlestep )
+ hvm_inject_hw_exception(TRAP_debug, X86_EVENT_NO_EC);
- /* MOV-SS instruction toggles MOV-SS shadow, else we just clear it. */
- if ( hvmemul_ctxt->ctxt.retire.mov_ss )
- new_intr_shadow ^= HVM_INTR_SHADOW_MOV_SS;
- else
- new_intr_shadow &= ~HVM_INTR_SHADOW_MOV_SS;
-
- /* STI instruction toggles STI shadow, else we just clear it. */
- if ( hvmemul_ctxt->ctxt.retire.sti )
- new_intr_shadow ^= HVM_INTR_SHADOW_STI;
- else
- new_intr_shadow &= ~HVM_INTR_SHADOW_STI;
+ /* MOV-SS instruction toggles MOV-SS shadow, else we just clear it. */
+ if ( hvmemul_ctxt->ctxt.retire.mov_ss )
+ new_intr_shadow ^= HVM_INTR_SHADOW_MOV_SS;
+ else
+ new_intr_shadow &= ~HVM_INTR_SHADOW_MOV_SS;
+
+ /* STI instruction toggles STI shadow, else we just clear it. */
+ if ( hvmemul_ctxt->ctxt.retire.sti )
+ new_intr_shadow ^= HVM_INTR_SHADOW_STI;
+ else
+ new_intr_shadow &= ~HVM_INTR_SHADOW_STI;
+ }
if ( hvmemul_ctxt->intr_shadow != new_intr_shadow )
{
@@ -1981,13 +1988,11 @@ static int _hvm_emulate_one(struct hvm_e
hvm_funcs.set_interrupt_shadow(curr, new_intr_shadow);
}
- if ( hvmemul_ctxt->ctxt.retire.hlt &&
+ if ( rc == X86EMUL_OKAY && hvmemul_ctxt->ctxt.retire.hlt &&
!hvm_local_events_need_delivery(curr) )
- {
hvm_hlt(regs->eflags);
- }
- return X86EMUL_OKAY;
+ return rc;
}
int hvm_emulate_one(
--- a/xen/arch/x86/x86_emulate/x86_emulate.c
+++ b/xen/arch/x86/x86_emulate/x86_emulate.c
@@ -4002,6 +4002,7 @@ x86_emulate(
uint32_t mask = X86_EFLAGS_VIP | X86_EFLAGS_VIF | X86_EFLAGS_VM;
fail_if(!in_realmode(ctxt, ops));
+ ctxt->retire.unblock_nmi = true;
if ( (rc = read_ulong(x86_seg_ss, sp_post_inc(op_bytes),
&eip, op_bytes, ctxt, ops)) ||
(rc = read_ulong(x86_seg_ss, sp_post_inc(op_bytes),
@@ -7918,9 +7919,17 @@ int x86_emulate_wrapper(
rc = x86_emulate(ctxt, ops);
- /* Retire flags should only be set for successful instruction emulation. */
+ /*
+ * Most retire flags should only be set for successful instruction
+ * emulation.
+ */
if ( rc != X86EMUL_OKAY )
- ASSERT(ctxt->retire.raw == 0);
+ {
+ typeof(ctxt->retire) retire = ctxt->retire;
+
+ retire.unblock_nmi = false;
+ ASSERT(!retire.raw);
+ }
/* All cases returning X86EMUL_EXCEPTION should have fault semantics. */
if ( rc == X86EMUL_EXCEPTION )
--- a/xen/arch/x86/x86_emulate/x86_emulate.h
+++ b/xen/arch/x86/x86_emulate/x86_emulate.h
@@ -490,6 +490,7 @@ struct x86_emulate_ctxt
bool hlt:1; /* Instruction HLTed. */
bool mov_ss:1; /* Instruction sets MOV-SS irq shadow. */
bool sti:1; /* Instruction sets STI irq shadow. */
+ bool unblock_nmi:1; /* Instruction clears NMI blocking. */
bool singlestep:1; /* Singlestepping was active. */
};
} retire;
[-- Attachment #3: Type: text/plain, Size: 127 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] x86emul: add "unblock NMI" retire flag
2017-04-11 15:36 [PATCH v2] x86emul: add "unblock NMI" retire flag Jan Beulich
@ 2017-04-11 16:09 ` Andrew Cooper
2017-04-12 7:43 ` Jan Beulich
0 siblings, 1 reply; 5+ messages in thread
From: Andrew Cooper @ 2017-04-11 16:09 UTC (permalink / raw)
To: Jan Beulich, xen-devel; +Cc: Julien Grall, Paul Durrant
On 11/04/17 16:36, Jan Beulich wrote:
> No matter that we emulate IRET for (guest) real more only right now, we
> should get its effect on (virtual) NMI delivery right.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> ---
> v2: Adjust x86_emulate_wrapper() accordingly.
>
> --- a/xen/arch/x86/hvm/emulate.c
> +++ b/xen/arch/x86/hvm/emulate.c
> @@ -1955,25 +1955,32 @@ static int _hvm_emulate_one(struct hvm_e
> memcpy(vio->mmio_insn, hvmemul_ctxt->insn_buf, vio->mmio_insn_bytes);
> }
>
> - if ( rc != X86EMUL_OKAY )
> - return rc;
> + new_intr_shadow = hvmemul_ctxt->intr_shadow;
>
> - if ( hvmemul_ctxt->ctxt.retire.singlestep )
> - hvm_inject_hw_exception(TRAP_debug, X86_EVENT_NO_EC);
> + /*
> + * IRET, if valid in the given context, clears NMI blocking
> + * (irrespective of rc).
> + */
> + if ( hvmemul_ctxt->ctxt.retire.unblock_nmi )
> + new_intr_shadow &= ~HVM_INTR_SHADOW_NMI;
>
> - new_intr_shadow = hvmemul_ctxt->intr_shadow;
> + if ( rc == X86EMUL_OKAY )
> + {
On further thought, given the assertion, you don't need to introduce
this check, and can avoid the block indentation. It should make the
patch rather smaller.
> + if ( hvmemul_ctxt->ctxt.retire.singlestep )
> + hvm_inject_hw_exception(TRAP_debug, X86_EVENT_NO_EC);
>
> - /* MOV-SS instruction toggles MOV-SS shadow, else we just clear it. */
> - if ( hvmemul_ctxt->ctxt.retire.mov_ss )
> - new_intr_shadow ^= HVM_INTR_SHADOW_MOV_SS;
> - else
> - new_intr_shadow &= ~HVM_INTR_SHADOW_MOV_SS;
> -
> - /* STI instruction toggles STI shadow, else we just clear it. */
> - if ( hvmemul_ctxt->ctxt.retire.sti )
> - new_intr_shadow ^= HVM_INTR_SHADOW_STI;
> - else
> - new_intr_shadow &= ~HVM_INTR_SHADOW_STI;
> + /* MOV-SS instruction toggles MOV-SS shadow, else we just clear it. */
> + if ( hvmemul_ctxt->ctxt.retire.mov_ss )
> + new_intr_shadow ^= HVM_INTR_SHADOW_MOV_SS;
> + else
> + new_intr_shadow &= ~HVM_INTR_SHADOW_MOV_SS;
> +
> + /* STI instruction toggles STI shadow, else we just clear it. */
> + if ( hvmemul_ctxt->ctxt.retire.sti )
> + new_intr_shadow ^= HVM_INTR_SHADOW_STI;
> + else
> + new_intr_shadow &= ~HVM_INTR_SHADOW_STI;
> + }
>
> if ( hvmemul_ctxt->intr_shadow != new_intr_shadow )
> {
> @@ -1981,13 +1988,11 @@ static int _hvm_emulate_one(struct hvm_e
> hvm_funcs.set_interrupt_shadow(curr, new_intr_shadow);
> }
>
> - if ( hvmemul_ctxt->ctxt.retire.hlt &&
> + if ( rc == X86EMUL_OKAY && hvmemul_ctxt->ctxt.retire.hlt &&
> !hvm_local_events_need_delivery(curr) )
Similarly, you don't need the OKAY check here.
Otherwise, Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
> - {
> hvm_hlt(regs->eflags);
> - }
>
> - return X86EMUL_OKAY;
> + return rc;
> }
>
> int hvm_emulate_one(
> --- a/xen/arch/x86/x86_emulate/x86_emulate.c
> +++ b/xen/arch/x86/x86_emulate/x86_emulate.c
> @@ -4002,6 +4002,7 @@ x86_emulate(
> uint32_t mask = X86_EFLAGS_VIP | X86_EFLAGS_VIF | X86_EFLAGS_VM;
>
> fail_if(!in_realmode(ctxt, ops));
> + ctxt->retire.unblock_nmi = true;
> if ( (rc = read_ulong(x86_seg_ss, sp_post_inc(op_bytes),
> &eip, op_bytes, ctxt, ops)) ||
> (rc = read_ulong(x86_seg_ss, sp_post_inc(op_bytes),
> @@ -7918,9 +7919,17 @@ int x86_emulate_wrapper(
>
> rc = x86_emulate(ctxt, ops);
>
> - /* Retire flags should only be set for successful instruction emulation. */
> + /*
> + * Most retire flags should only be set for successful instruction
> + * emulation.
> + */
> if ( rc != X86EMUL_OKAY )
> - ASSERT(ctxt->retire.raw == 0);
> + {
> + typeof(ctxt->retire) retire = ctxt->retire;
> +
> + retire.unblock_nmi = false;
> + ASSERT(!retire.raw);
> + }
>
> /* All cases returning X86EMUL_EXCEPTION should have fault semantics. */
> if ( rc == X86EMUL_EXCEPTION )
> --- a/xen/arch/x86/x86_emulate/x86_emulate.h
> +++ b/xen/arch/x86/x86_emulate/x86_emulate.h
> @@ -490,6 +490,7 @@ struct x86_emulate_ctxt
> bool hlt:1; /* Instruction HLTed. */
> bool mov_ss:1; /* Instruction sets MOV-SS irq shadow. */
> bool sti:1; /* Instruction sets STI irq shadow. */
> + bool unblock_nmi:1; /* Instruction clears NMI blocking. */
> bool singlestep:1; /* Singlestepping was active. */
> };
> } retire;
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] x86emul: add "unblock NMI" retire flag
2017-04-11 16:09 ` Andrew Cooper
@ 2017-04-12 7:43 ` Jan Beulich
2017-04-12 8:06 ` Andrew Cooper
0 siblings, 1 reply; 5+ messages in thread
From: Jan Beulich @ 2017-04-12 7:43 UTC (permalink / raw)
To: Andrew Cooper, Paul Durrant; +Cc: xen-devel, Julien Grall
>>> On 11.04.17 at 18:09, <andrew.cooper3@citrix.com> wrote:
> On 11/04/17 16:36, Jan Beulich wrote:
>> --- a/xen/arch/x86/hvm/emulate.c
>> +++ b/xen/arch/x86/hvm/emulate.c
>> @@ -1955,25 +1955,32 @@ static int _hvm_emulate_one(struct hvm_e
>> memcpy(vio->mmio_insn, hvmemul_ctxt->insn_buf, vio->mmio_insn_bytes);
>> }
>>
>> - if ( rc != X86EMUL_OKAY )
>> - return rc;
>> + new_intr_shadow = hvmemul_ctxt->intr_shadow;
>>
>> - if ( hvmemul_ctxt->ctxt.retire.singlestep )
>> - hvm_inject_hw_exception(TRAP_debug, X86_EVENT_NO_EC);
>> + /*
>> + * IRET, if valid in the given context, clears NMI blocking
>> + * (irrespective of rc).
>> + */
>> + if ( hvmemul_ctxt->ctxt.retire.unblock_nmi )
>> + new_intr_shadow &= ~HVM_INTR_SHADOW_NMI;
>>
>> - new_intr_shadow = hvmemul_ctxt->intr_shadow;
>> + if ( rc == X86EMUL_OKAY )
>> + {
>
> On further thought, given the assertion, you don't need to introduce
> this check, and can avoid the block indentation. It should make the
> patch rather smaller.
Hmm, I did consider this, but I feel uneasy doing so, as it leaves
production builds in potentially bad shape (in case we have a path
we don't ever execute in any of the routine testing done, but
which someone nevertheless ends up coming down in a released
product). Paul, you're the maintainer of the code, do you have an
opinion either way?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] x86emul: add "unblock NMI" retire flag
2017-04-12 7:43 ` Jan Beulich
@ 2017-04-12 8:06 ` Andrew Cooper
2017-04-12 8:42 ` Jan Beulich
0 siblings, 1 reply; 5+ messages in thread
From: Andrew Cooper @ 2017-04-12 8:06 UTC (permalink / raw)
To: Jan Beulich, Paul Durrant; +Cc: xen-devel, Julien Grall
On 12/04/2017 08:43, Jan Beulich wrote:
>>>> On 11.04.17 at 18:09, <andrew.cooper3@citrix.com> wrote:
>> On 11/04/17 16:36, Jan Beulich wrote:
>>> --- a/xen/arch/x86/hvm/emulate.c
>>> +++ b/xen/arch/x86/hvm/emulate.c
>>> @@ -1955,25 +1955,32 @@ static int _hvm_emulate_one(struct hvm_e
>>> memcpy(vio->mmio_insn, hvmemul_ctxt->insn_buf, vio->mmio_insn_bytes);
>>> }
>>>
>>> - if ( rc != X86EMUL_OKAY )
>>> - return rc;
>>> + new_intr_shadow = hvmemul_ctxt->intr_shadow;
>>>
>>> - if ( hvmemul_ctxt->ctxt.retire.singlestep )
>>> - hvm_inject_hw_exception(TRAP_debug, X86_EVENT_NO_EC);
>>> + /*
>>> + * IRET, if valid in the given context, clears NMI blocking
>>> + * (irrespective of rc).
>>> + */
>>> + if ( hvmemul_ctxt->ctxt.retire.unblock_nmi )
>>> + new_intr_shadow &= ~HVM_INTR_SHADOW_NMI;
>>>
>>> - new_intr_shadow = hvmemul_ctxt->intr_shadow;
>>> + if ( rc == X86EMUL_OKAY )
>>> + {
>> On further thought, given the assertion, you don't need to introduce
>> this check, and can avoid the block indentation. It should make the
>> patch rather smaller.
> Hmm, I did consider this, but I feel uneasy doing so, as it leaves
> production builds in potentially bad shape (in case we have a path
> we don't ever execute in any of the routine testing done, but
> which someone nevertheless ends up coming down in a released
> product). Paul, you're the maintainer of the code, do you have an
> opinion either way?
Actually, on yet further thought, the reset nature of these conditions
are actually necessary on the != OKAY path.
Consider "mov %eax, %ss; ud2a". Even on raising an exception for the
ud2a, the SS shadow needs dropping.
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] x86emul: add "unblock NMI" retire flag
2017-04-12 8:06 ` Andrew Cooper
@ 2017-04-12 8:42 ` Jan Beulich
0 siblings, 0 replies; 5+ messages in thread
From: Jan Beulich @ 2017-04-12 8:42 UTC (permalink / raw)
To: Andrew Cooper, Paul Durrant; +Cc: xen-devel, Julien Grall
>>> On 12.04.17 at 10:06, <andrew.cooper3@citrix.com> wrote:
> On 12/04/2017 08:43, Jan Beulich wrote:
>>>>> On 11.04.17 at 18:09, <andrew.cooper3@citrix.com> wrote:
>>> On 11/04/17 16:36, Jan Beulich wrote:
>>>> --- a/xen/arch/x86/hvm/emulate.c
>>>> +++ b/xen/arch/x86/hvm/emulate.c
>>>> @@ -1955,25 +1955,32 @@ static int _hvm_emulate_one(struct hvm_e
>>>> memcpy(vio->mmio_insn, hvmemul_ctxt->insn_buf, vio->mmio_insn_bytes);
>>>> }
>>>>
>>>> - if ( rc != X86EMUL_OKAY )
>>>> - return rc;
>>>> + new_intr_shadow = hvmemul_ctxt->intr_shadow;
>>>>
>>>> - if ( hvmemul_ctxt->ctxt.retire.singlestep )
>>>> - hvm_inject_hw_exception(TRAP_debug, X86_EVENT_NO_EC);
>>>> + /*
>>>> + * IRET, if valid in the given context, clears NMI blocking
>>>> + * (irrespective of rc).
>>>> + */
>>>> + if ( hvmemul_ctxt->ctxt.retire.unblock_nmi )
>>>> + new_intr_shadow &= ~HVM_INTR_SHADOW_NMI;
>>>>
>>>> - new_intr_shadow = hvmemul_ctxt->intr_shadow;
>>>> + if ( rc == X86EMUL_OKAY )
>>>> + {
>>> On further thought, given the assertion, you don't need to introduce
>>> this check, and can avoid the block indentation. It should make the
>>> patch rather smaller.
>> Hmm, I did consider this, but I feel uneasy doing so, as it leaves
>> production builds in potentially bad shape (in case we have a path
>> we don't ever execute in any of the routine testing done, but
>> which someone nevertheless ends up coming down in a released
>> product). Paul, you're the maintainer of the code, do you have an
>> opinion either way?
>
> Actually, on yet further thought, the reset nature of these conditions
> are actually necessary on the != OKAY path.
>
> Consider "mov %eax, %ss; ud2a". Even on raising an exception for the
> ud2a, the SS shadow needs dropping.
Hmm, indeed (for EXCEPTION at least, not so sure about the others;
quite certainly not for RETRY). Along the lines of the above this would
then call for an "else" to the newly added "if ( rc == X86EMUL_OKAY )"
though.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-04-12 8:42 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-11 15:36 [PATCH v2] x86emul: add "unblock NMI" retire flag Jan Beulich
2017-04-11 16:09 ` Andrew Cooper
2017-04-12 7:43 ` Jan Beulich
2017-04-12 8:06 ` Andrew Cooper
2017-04-12 8:42 ` Jan Beulich
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.