Return-path: <bp@suse.de>
Received: from relay2.suse.de ([149.44.160.134])
by smtp.nue.novell.com with ESMTP (NOT encrypted); Fri, 16 Dec 2016 11:45:10 +0100
Received: from imap.suse.de (imap2-int.suse.de [195.135.220.8])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by relay2.suse.de (Postfix) with ESMTPS id 8AFCD2C2F6;
Fri, 16 Dec 2016 10:45:09 +0000 (UTC)
Received: from pd.tnic (p4FC0A0D4.dip0.t-ipconnect.de [79.192.160.212])
by imap.suse.de (Postfix) with ESMTPSA id 4706011970;
Fri, 16 Dec 2016 10:45:09 +0000 (UTC)
Received: by pd.tnic (Postfix, from userid 1000)
id 3EF2E160EE6; Fri, 16 Dec 2016 11:45:05 +0100 (CET)
Date: Fri, 16 Dec 2016 11:45:05 +0100
From: Borislav Petkov <bp@suse.de>
To: Juergen Gross <jgross@suse.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
xen-devel <xen-devel@lists.xenproject.org>
Subject: Re: Can't boot as Xen dom0 due to commit fe055896
Message-ID: <20161216104505.lk3s7fc7brrnmbq3@pd.tnic>
References: <20161215164635.thm7ruio2ddnxszw@pd.tnic>
<a54a7329-0358-f184-a550-ec4152d48938@oracle.com>
<20161215171755.xpfuax7a6q3jofet@pd.tnic>
<d92fb691-6671-63c9-ba42-f8a2d411cb1e@oracle.com>
<20161215173609.ornfok6lk5oro2pj@pd.tnic>
<e5ebe7f8-62ce-4306-c57f-f5622c05ed2d@suse.com>
<20161216090228.ri4alokiaagqtibt@pd.tnic>
<29d252b8-67ff-bd61-f274-0ed75708cd55@suse.com>
<20161216094326.bnkr5a2k3njmdeyi@pd.tnic>
<7ca8a9b9-e374-8052-6be3-d3eda78c891a@suse.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <7ca8a9b9-e374-8052-6be3-d3eda78c891a@suse.com>
User-Agent: NeoMutt/20161014 (1.7.1)
On Fri, Dec 16, 2016 at 11:00:29AM +0100, Juergen Gross wrote:
> Should work. I'm happy to test any patch. :-)
I'm happy that you're happy to! :-)
Let's try this below.
Thanks!
---
@@ -44,7 +44,7 @@
#define DRIVER_VERSION "2.2"
static struct microcode_ops *microcode_ops;
-static bool dis_ucode_ldr;
+static bool dis_ucode_ldr = true;
LIST_HEAD(microcode_cache);
@@ -76,6 +76,7 @@ struct cpu_info_ctx {
static bool __init check_loader_disabled_bsp(void)
{
static const char *__dis_opt_str = "dis_ucode_ldr";
+ u32 a, b, c, d;
#ifdef CONFIG_X86_32
const char *cmdline = (const char *)__pa_nodebug(boot_command_line);
@@ -88,8 +89,23 @@ static bool __init check_loader_disabled_bsp(void)
bool *res = &dis_ucode_ldr;
#endif
- if (cmdline_find_option_bool(cmdline, option))
- *res = true;
+ if (!have_cpuid_p())
+ return *res;
+
+ a = 1;
+ c = 0;
+ native_cpuid(&a, &b, &c, &d);
+
+ /*
+ * CPUID(1).ECX[31]: reserved for hypervisor use. This is still not
+ * completely accurate as xen pv guests don't see that CPUID bit set but
+ * that's good enough as they don't land on the BSP path anyway.
+ */
+ if (c & BIT(31))
+ return *res;
+
+ if (cmdline_find_option_bool(cmdline, option) <= 0)
+ *res = false;
return *res;
}
@@ -121,9 +137,6 @@ void __init load_ucode_bsp(void)
if (check_loader_disabled_bsp())
return;
- if (!have_cpuid_p())
- return;
-
vendor = x86_cpuid_vendor();
family = x86_cpuid_family();
@@ -157,9 +170,6 @@ void load_ucode_ap(void)
if (check_loader_disabled_ap())
return;
- if (!have_cpuid_p())
- return;
-
vendor = x86_cpuid_vendor();
family = x86_cpuid_family();
--
Regards/Gruss,
Boris.
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg)
--