From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Tim Deegan <tim@xen.org>
Cc: Malcolm Crossley <malcolm.crossley@citrix.com>,
Jan Beulich <JBeulich@suse.com>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: Re: [PATCH V3] vmx/nmi: Do not use self_nmi() in VMEXIT handler
Date: Thu, 28 Feb 2013 13:12:41 +0000 [thread overview]
Message-ID: <512F57C9.8070805@citrix.com> (raw)
In-Reply-To: <20130228130008.GE27704@ocelot.phlegethon.org>
On 28/02/13 13:00, Tim Deegan wrote:
> At 09:58 +0000 on 28 Feb (1362045494), Jan Beulich wrote:
>>>>> On 22.11.12 at 17:12, Jan Beulich wrote:
>>>>>> On 22.11.12 at 17:05, Andrew Cooper <andrew.cooper3@citrix.com> wrote:
>>>> On 22/11/12 15:55, Jan Beulich wrote:
>>>>>>>> On 22.11.12 at 16:37, Andrew Cooper <andrew.cooper3@citrix.com> wrote:
>>>>>> A quick solution would be to execute a noop function with
>>>>>> run_in_exception_handler(). Alternatively, I can code enable_nmi() or
>>>>>> so which does an inline iret to itself. Which of these would you prefer?
>>>>> I would actually consider avoiding to run softirqs altogether in that
>>>>> case, just like native Linux doesn't do any event or scheduler
>>>>> processing in that case.
>>>> That would probably be the easiest solution.
>>>>
>>>> I was already going to do the same for the rentrant NMI and MCE handling
>>>> case (and also the process pending upcalls checking), due to the
>>>> complexities of fixing the race condition at the end of the handler.
>>>>
>>>> Unfortunately, I don't think I have time to look at this issue
>>>> immediately, but if it is ok to wait till the beginning of next week, I
>>> That's fine of course.
>> So that was 3 months ago, and we're likely going to need to do
>> further unfixed releases if this won't move forward. Can you
>> estimate whether you'll be able to get back to this?
> Let's make a step in the right direction before 4.3, at least:
>
> commit d278beed1df2d226911dce92295411018c9bba2f
> Author: Tim Deegan <tim@xen.org>
> Date: Thu Feb 28 12:42:15 2013 +0000
>
> vmx: handle NMIs before re-enabling interrupts.
>
> Also, switch to calling do_nmi() and explicitly re-enabling NMIs
> rather than raising a fake NMI and relying on the NMI processing to
> IRET, since that handling code is likely to change a fair amount in
> future.
>
> Signed-off-by: Tim Deegan <tim@xen.org>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
As this is functionally equivalent to the patch I was just testing.
>
> diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
> index 5378928..462bb0f 100644
> --- a/xen/arch/x86/hvm/vmx/vmx.c
> +++ b/xen/arch/x86/hvm/vmx/vmx.c
> @@ -2313,6 +2313,13 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
> vector = intr_info & INTR_INFO_VECTOR_MASK;
> if ( vector == TRAP_machine_check )
> do_machine_check(regs);
> + if ( vector == TRAP_machine_check
> + && ((intr_info & INTR_INFO_INTR_TYPE_MASK) ==
> + (X86_EVENTTYPE_NMI << 8)) )
> + {
> + do_nmi(regs);
> + enable_nmis();
> + }
> break;
> case EXIT_REASON_MCE_DURING_VMENTRY:
> do_machine_check(regs);
> @@ -2486,7 +2493,7 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
> (X86_EVENTTYPE_NMI << 8) )
> goto exit_and_crash;
> HVMTRACE_0D(NMI);
> - self_nmi(); /* Real NMI, vector 2: normal processing. */
> + /* Already handled above. */
> break;
> case TRAP_machine_check:
> HVMTRACE_0D(MCE);
next prev parent reply other threads:[~2013-02-28 13:12 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-22 15:00 [PATCH V3] vmx/nmi: Do not use self_nmi() in VMEXIT handler Andrew Cooper
2012-11-22 15:15 ` Jan Beulich
2012-11-22 15:16 ` Andrew Cooper
2012-11-22 15:21 ` Jan Beulich
2012-11-22 15:37 ` Andrew Cooper
2012-11-22 15:55 ` Jan Beulich
2012-11-22 16:05 ` Andrew Cooper
2012-11-22 16:12 ` Jan Beulich
2012-11-22 16:31 ` Andrew Cooper
2013-02-28 9:58 ` Jan Beulich
2013-02-28 12:32 ` Andrew Cooper
2013-02-28 13:00 ` Tim Deegan
2013-02-28 13:12 ` Andrew Cooper [this message]
2013-02-28 13:39 ` Jan Beulich
2013-02-28 14:25 ` Tim Deegan
2013-02-28 14:42 ` Jan Beulich
2013-02-28 14:45 ` Andrew Cooper
2013-02-28 14:49 ` Tim Deegan
2013-02-28 15:01 ` Jan Beulich
2013-02-28 15:41 ` Jan Beulich
2013-02-28 15:52 ` Andrew Cooper
2013-02-28 15:55 ` Tim Deegan
2013-02-28 16:12 ` Jan Beulich
2013-02-28 16:01 ` Keir Fraser
2013-02-28 16:17 ` Jan Beulich
2013-02-28 19:02 ` Keir Fraser
2013-03-01 10:49 ` [PATCH v2 0/2] x86: defer processing events on the NMI exit path Jan Beulich
2013-03-01 10:56 ` [PATCH v2 1/2] " Jan Beulich
2013-03-01 11:37 ` Andrew Cooper
2013-03-01 11:53 ` Jan Beulich
2013-03-01 15:56 ` Keir Fraser
2013-03-01 16:01 ` Andrew Cooper
2013-03-01 16:08 ` Jan Beulich
2013-03-01 10:57 ` [PATCH v2 2/2] x86: don't rely on __softirq_pending to be the first field in irq_cpustat_t Jan Beulich
2013-03-01 15:55 ` [PATCH v2 0/2] x86: defer processing events on the NMI exit path Keir Fraser
2013-02-28 13:42 ` [PATCH V3] vmx/nmi: Do not use self_nmi() in VMEXIT handler Jan Beulich
2013-02-28 14:04 ` Tim Deegan
2013-02-28 14:51 ` Konrad Rzeszutek Wilk
2012-11-22 15:22 ` Mats Petersson
2012-11-22 16:00 ` Jan Beulich
2012-11-22 17:34 ` Tim Deegan
2012-11-26 11:50 ` George Dunlap
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=512F57C9.8070805@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=JBeulich@suse.com \
--cc=malcolm.crossley@citrix.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xen.org \
/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.