From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
To: Andy Lutomirski <luto@amacapital.net>,
"Luis R. Rodriguez" <mcgrof@suse.com>
Cc: "Luis R. Rodriguez" <mcgrof@kernel.org>,
cocci@systeme.lip6.fr, Juergen Gross <jgross@suse.com>,
mcb30@ipxe.org, Thomas Gleixner <tglx@linutronix.de>,
Andrey Ryabinin <aryabinin@virtuozzo.com>,
Joerg Roedel <joro@8bytes.org>,
Robert Moore <robert.moore@intel.com>,
Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
Xen Devel <xen-devel@lists.xensource.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Rusty Russell <rusty@rustcorp.com.au>,
Jan Beulich <JBeulich@suse.com>, Lv Zheng <lv.zheng@intel.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
long.wanglong@huawei.com, Fengguang Wu <fengguang.wu@intel.com>,
qiuxishi@huawei.com, Borislav Petkov <bp@alien8.de>,
Andrey Ryabinin <ryabinin.a.a@gmail.com>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
david.e.box@intel.com, X86 ML <x86@kernel.org>, Ingo Molnar <mi>
Subject: Re: [PATCH v2 3/3] paravirt: rename paravirt_enabled to paravirt_legacy
Date: Mon, 8 Feb 2016 10:31:36 -0500 [thread overview]
Message-ID: <56B8B4D8.7050208@oracle.com> (raw)
In-Reply-To: <CALCETrWSiN+te_0aYH0NH9oBzGALLhKqxkupiGwbAm2GdCNyVQ@mail.gmail.com>
On 02/06/2016 03:05 PM, Andy Lutomirski wrote:
>
> Anyway, this is all ridiculous. I propose that rather than trying to
> clean up paravirt_enabled, you just delete it. Here are its users:
>
> static inline bool is_hypervisor_range(int idx)
> {
> /*
> * ffff800000000000 - ffff87ffffffffff is reserved for
> * the hypervisor.
> */
> return paravirt_enabled() &&
> (idx >= pgd_index(__PAGE_OFFSET) - 16) &&
> (idx < pgd_index(__PAGE_OFFSET));
> }
>
> Nope, wrong. I don't really know what this code is trying to do, but
> I'm pretty sure it's wrong. Did this mean to check "is Xen PV"? Or
> was it "is Xen PV or lgeust"? Or what?
This range is reserved for hypervisors but the only hypervisor that uses
it is Xen PV (lguest doesn't run in 64-bit mode).
The check is intended to catch mappings on baremetal kernels that
shouldn't be there. In other words it's not Xen PV that needs it, it's
baremetal that wants to catch errors.
>
> if (apm_info.bios.version == 0 || paravirt_enabled() ||
> machine_is_olpc()) {
> printk(KERN_INFO "apm: BIOS not found.\n");
> return -ENODEV;
> }
>
> I assume that is trying to avoid checking for APM on systems that are
> known to be too new. How about cleanup up the condition to check
> something sensible?
The check here I suspect is unnecessary since version is taken from
boot_params and thus should be zero for Xen PV (don't know about lguest
but if it's not then we could just set it there).
>
> if (!paravirt_enabled() && c->x86 == 5 && c->x86_model < 9) {
> static int f00f_workaround_enabled;
> [...]
>
> This is asking "are we the natively booted kernel?". This has nothing
> to do with paravirt in particular. How about just deleting that code?
> It seems pointless. Sure, it's the responsibility of the real root
> kernel, but nothing will break if a guest kernel also does the fixup.
Yes, I also think so.
>
> int __init microcode_init(void)
> {
> [...]
> if (paravirt_enabled() || dis_ucode_ldr)
> return -EINVAL;
>
> This is also asking "are we the natively booted kernel?" This is
> plausibly useful for real. (Borislav, is this actually necessary?)
> Seems to me there should be a function is_native_root_kernel() or
> similar. Obviously it could have false positives and code will have
> to deal with that. (This also could be entirely wrong. What code is
> responsible for CPU microcode updates on Xen? For all I know, dom0 is
> *supposed* to apply microcode updates, in which case that check really
> should be deleted.
>
> void __init reserve_ebda_region(void)
> {
> [...]
> if (paravirt_enabled())
> return;
>
> I don't know what the point of this one is.
Not sure about this one neither.
>
> pnpbios turns itself off if paravirt_enabled(). I'm not convinced
> that's correct.
>
> /* only a natively booted kernel should be using TXT */
> if (paravirt_enabled()) {
> pr_warning("non-0 tboot_addr but pv_ops is enabled\n");
> return;
> }
>
> Er, what's wrong with trying to talk to tboot on paravirt? It won't
> be there unless something is rather wrong. In any case, this could
> use is_native_root_kernel().
As in apm_info case, I don't think this check is necessary.
>
> if (paravirt_enabled() && !paravirt_has(RTC))
> return -ENODEV;
>
> This actually seems legit. But how about reversing it: if
> paravirt_has(NO_RTC) return -ENODEV? Problem solved.
>
> paravirt_enabled is also used in entry_32.S:
>
> cmpl $0, pv_info+PARAVIRT_enabled
>
> This is actually trying to check whether pv_cpu_ops.iret ==
> native_iret. I sincerely hope that no additional support is *ever*
> added to x86 Linux for systems on which this is not the case.
I think we can use ALTERNATIVE(... X86_FEATURE_XENPV) here.
-boris
>
> So yeah, I think the right solution is to delete paravirt_enabled.
>
> --Andy
next prev parent reply other threads:[~2016-02-08 15:31 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-06 4:30 [PATCH v2 0/3] paravirt: rebrand paravirt_enabled as paravirt_legacy Luis R. Rodriguez
2016-02-06 4:30 ` [PATCH v2 1/3] paravirt: use bool for paravirt_enabled() and paravirt_has_feature() Luis R. Rodriguez
2016-02-06 4:30 ` [PATCH v2 2/3] paravirt: replace direct access to pv_info.paravirt_enabled Luis R. Rodriguez
2016-02-06 4:30 ` [PATCH v2 3/3] paravirt: rename paravirt_enabled to paravirt_legacy Luis R. Rodriguez
2016-02-06 7:11 ` Andy Lutomirski
2016-02-06 8:59 ` Luis R. Rodriguez
2016-02-06 20:05 ` Andy Lutomirski
2016-02-06 22:04 ` Borislav Petkov
2016-02-08 15:39 ` Boris Ostrovsky
2016-02-08 15:55 ` Borislav Petkov
2016-02-08 16:05 ` [Xen-devel] " Andrew Cooper
2016-02-08 16:12 ` Boris Ostrovsky
2016-02-08 16:26 ` Andrew Cooper
2016-02-08 16:31 ` Boris Ostrovsky
2016-02-08 16:32 ` Andrew Cooper
2016-02-08 16:35 ` Borislav Petkov
2016-02-08 16:38 ` Andrew Cooper
2016-02-08 16:45 ` Borislav Petkov
2016-02-08 16:52 ` Boris Ostrovsky
2016-02-08 20:45 ` Boris Ostrovsky
2016-02-08 21:06 ` Borislav Petkov
2016-02-08 16:53 ` Andrew Cooper
2016-02-08 17:13 ` Borislav Petkov
2016-02-09 6:22 ` Luis R. Rodriguez
2016-02-08 16:41 ` Boris Ostrovsky
2016-02-08 16:52 ` Borislav Petkov
2016-02-08 15:31 ` Boris Ostrovsky [this message]
2016-02-08 15:46 ` Borislav Petkov
2016-02-09 6:59 ` Luis R. Rodriguez
2016-02-08 21:04 ` Andy Lutomirski
2016-02-09 7:06 ` Luis R. Rodriguez
2016-02-17 20:07 ` Luis R. Rodriguez
2016-02-17 20:49 ` Borislav Petkov
2016-02-17 21:12 ` Luis R. Rodriguez
2016-02-17 21:21 ` Boris Ostrovsky
2016-02-17 22:03 ` Borislav Petkov
2016-02-17 22:18 ` Andy Lutomirski
2016-02-17 22:39 ` Boris Ostrovsky
2016-02-17 23:39 ` Borislav Petkov
2016-02-17 22:19 ` Boris Ostrovsky
2016-02-17 22:35 ` Luis R. Rodriguez
2016-02-09 6:41 ` Luis R. Rodriguez
2016-02-08 21:49 ` Boris Ostrovsky
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=56B8B4D8.7050208@oracle.com \
--to=boris.ostrovsky@oracle.com \
--cc=JBeulich@suse.com \
--cc=aryabinin@virtuozzo.com \
--cc=bp@alien8.de \
--cc=cocci@systeme.lip6.fr \
--cc=david.e.box@intel.com \
--cc=fengguang.wu@intel.com \
--cc=hpa@zytor.com \
--cc=jgross@suse.com \
--cc=joro@8bytes.org \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=long.wanglong@huawei.com \
--cc=luto@amacapital.net \
--cc=lv.zheng@intel.com \
--cc=mcb30@ipxe.org \
--cc=mcgrof@kernel.org \
--cc=mcgrof@suse.com \
--cc=mchehab@osg.samsung.com \
--cc=qiuxishi@huawei.com \
--cc=rafael.j.wysocki@intel.com \
--cc=robert.moore@intel.com \
--cc=rusty@rustcorp.com.au \
--cc=ryabinin.a.a@gmail.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--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).