From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Ian Campbell <Ian.Campbell@eu.citrix.com>
Cc: xen devel <xen-devel@lists.xensource.com>,
Jan Beulich <JBeulich@novell.com>
Subject: Re: APIC MSRs query
Date: Tue, 17 May 2011 15:08:10 +0100 [thread overview]
Message-ID: <4DD2814A.3050008@citrix.com> (raw)
In-Reply-To: <1305640796.20907.58.camel@zakaz.uk.xensource.com>
On 17/05/11 14:59, Ian Campbell wrote:
> On Tue, 2011-05-17 at 14:43 +0100, Jan Beulich wrote:
>>>>> On 17.05.11 at 15:25, Andrew Cooper<andrew.cooper3@citrix.com> wrote:
>>> Hello,
>>>
>>> I am currently cleaning up the APIC code for the sake of
>>> shutdown/reboot/crashdump and have a query about the (modified for
>>> brevity) snippet of code:
>>>
>>> uint64_t msr_content;
>>> rdmsrl(MSR_IA32_APICBASE, msr_content);
>>> msr_content |= MSR_IA32_APICBASE_ENABLE | MSR_IA32_APICBASE_EXTD;
>>> msr_content = (uint32_t)msr_content;
>>> wrmsrl(MSR_IA32_APICBASE, msr_content);
>>>
>>> which is added into apic.c in changeset b622e411eef8, and has propagated
>>> elsewhere in the codebase during subsequent cleanups etc.
>>>
>>> The MP spec and x2apic spec states that bits [35:12] of
>>> MSR_IA32_APICBASE is the base APIC MMIO address. Is there reason why
>>> the code (almost always) clears the top 4 bits, or is it just an
>>> overlooked mistake?
>> I think this is a benign mistake. Benign because I don't think there is
>> a meaningful (to Xen at least) number of systems that would not
>> have their LAPIC at the default address (which fits in 32 bits).
> That "msr_content = (uint32_t)msr_content;" seems to be pretty
> deliberate, what else would it be trying to do?
>
> FWIW enable_x2apic in Linux seems to have a similar construct which
> throws away the top half of the MSR:
>
> void enable_x2apic(void)
> {
> int msr, msr2;
>
> rdmsr(MSR_IA32_APICBASE, msr, msr2);
> if (!(msr& X2APIC_ENABLE)) {
> printk("Enabling x2apic\n");
> wrmsr(MSR_IA32_APICBASE, msr | X2APIC_ENABLE, 0);
> }
> }
>
> (FWIW the original Xen code in 17545:9fd00ff95068 looked a lot like this
> too, b622e411eef8 just switched to wrmsrl and preserved the clearing
> behaviour).
>
> Perhaps there is some errata? Google didn't find one, but ...
>
> Ian.
>
I couldn't find any errata which is why I asked here. Bits [63:36] are
reserved so should be WriteAsZero - it is possible that whoever put it
into Linux just wanted to zero the top bits and either missed the top 4
bits or decided that they would never be set.
--
Andrew Cooper - Dom0 Kernel Engineer, Citrix XenServer
T: +44 (0)1223 225 900, http://www.citrix.com
next prev parent reply other threads:[~2011-05-17 14:08 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-17 13:25 APIC MSRs query Andrew Cooper
2011-05-17 13:43 ` Jan Beulich
2011-05-17 13:49 ` Andrew Cooper
2011-05-17 13:59 ` Ian Campbell
2011-05-17 14:08 ` Andrew Cooper [this message]
2011-05-17 14:08 ` Jan Beulich
2011-05-17 14:53 ` Keir Fraser
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=4DD2814A.3050008@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=Ian.Campbell@eu.citrix.com \
--cc=JBeulich@novell.com \
--cc=xen-devel@lists.xensource.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).