From: Ross Lagerwall <ross.lagerwall@citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
Keir Fraser <keir@xen.org>,
xen-devel@lists.xen.org
Subject: Re: [PATCH] x86: Don't crash when mapping a page using EFI runtime page tables
Date: Wed, 27 May 2015 11:23:38 +0100 [thread overview]
Message-ID: <55659B2A.4020605@citrix.com> (raw)
In-Reply-To: <555A1A33020000780007B3EC@mail.emea.novell.com>
On 05/18/2015 03:58 PM, Jan Beulich wrote:
>>>> On 15.05.15 at 18:08, <ross.lagerwall@citrix.com> wrote:
>> --- a/xen/arch/x86/domain_page.c
>> +++ b/xen/arch/x86/domain_page.c
>> @@ -32,20 +32,25 @@ static inline struct vcpu *mapcache_current_vcpu(void)
>> return NULL;
>>
>> /*
>> + * When using efi runtime page tables, we have the equivalent of the idle
>> + * domain's page tables but current may point at another domain's VCPU.
>> + * Return NULL as though current is not properly set up yet.
>> + */
>> + if ( efi_enabled && read_cr3() == efi_rs_page_table() )
>> + return NULL;
>
> I'm okay with the patch in principle; what worries me is the CR3 read
> that is now going to be necessary even in non-debug builds. With
> this code being the only user of efi_rs_page_table(), I wonder if it
> wouldn't make sense to alter that function to return non-zero only
> when spin_is_locked(&efi_rs_lock), and then alter the code above
> such that the CR3 read would happen only when we got a non-zero
> value back.
mapcache_current_vcpu() appears to be called from IRQ-enabled and
IRQ-disabled callers which prevents us from using the spinlock. Is
reading cr3 that bad, given that this is a slow path anyway?
>
> And with that I would then also like to fold the potential double CR3
> reads in debug builds to at most one.
>
CR3 needs to be re-read after the lazy context switch to the idle domain
is completed.
--
Ross Lagerwall
next prev parent reply other threads:[~2015-05-27 10:23 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-15 16:08 [PATCH] x86: Don't crash when mapping a page using EFI runtime page tables Ross Lagerwall
2015-05-15 17:41 ` Andrew Cooper
2015-05-18 9:02 ` Jan Beulich
2015-05-18 10:55 ` Andrew Cooper
2015-05-18 9:12 ` Jan Beulich
2015-05-18 14:58 ` Jan Beulich
2015-05-27 10:23 ` Ross Lagerwall [this message]
2015-05-27 11:59 ` Jan Beulich
2015-05-27 12:03 ` Ross Lagerwall
2015-05-27 12:17 ` Jan Beulich
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=55659B2A.4020605@citrix.com \
--to=ross.lagerwall@citrix.com \
--cc=JBeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=keir@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.