From: Zhenzhong Duan <zhenzhong.duan@oracle.com>
To: linux-kernel@vger.kernel.org
Cc: xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com,
jgross@suse.com, sstabellini@kernel.org, tglx@linutronix.de,
mingo@redhat.com, bp@alien8.de,
Zhenzhong Duan <zhenzhong.duan@oracle.com>
Subject: [PATCH v6 4/4] x86/xen: Add "nopv" support for HVM guest
Date: Sun, 7 Jul 2019 17:15:08 +0800 [thread overview]
Message-ID: <1562490908-17882-5-git-send-email-zhenzhong.duan@oracle.com> (raw)
In-Reply-To: <1562490908-17882-1-git-send-email-zhenzhong.duan@oracle.com>
PVH guest needs PV extentions to work, so "nopv" parameter should be
ignored for PVH but not for HVM guest.
If PVH guest boots up via the Xen-PVH boot entry, xen_pvh is set early,
we know it's PVH guest and ignore "nopv" parameter directly.
If PVH guest boots up via the normal boot entry same as HVM guest, it's
hard to distinguish PVH and HVM guest at that time. In this case, we
have to panic early if PVH is detected and nopv is enabled to avoid a
worse situation later.
Move xen_platform_hvm() after xen_hvm_guest_late_init() to avoid compile
error.
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@oracle.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
---
arch/x86/xen/enlighten_hvm.c | 32 ++++++++++++++++++++++++--------
1 file changed, 24 insertions(+), 8 deletions(-)
diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c
index 1756cf7..7e1c75f 100644
--- a/arch/x86/xen/enlighten_hvm.c
+++ b/arch/x86/xen/enlighten_hvm.c
@@ -231,14 +231,6 @@ bool __init xen_hvm_need_lapic(void)
return true;
}
-static uint32_t __init xen_platform_hvm(void)
-{
- if (xen_pv_domain())
- return 0;
-
- return xen_cpuid_base();
-}
-
static __init void xen_hvm_guest_late_init(void)
{
#ifdef CONFIG_XEN_PVH
@@ -250,6 +242,9 @@ static __init void xen_hvm_guest_late_init(void)
/* PVH detected. */
xen_pvh = true;
+ if (nopv)
+ panic("\"nopv\" and \"xen_nopv\" parameters are unsupported in PVH guest.");
+
/* Make sure we don't fall back to (default) ACPI_IRQ_MODEL_PIC. */
if (!nr_ioapics && acpi_irq_model == ACPI_IRQ_MODEL_PIC)
acpi_irq_model = ACPI_IRQ_MODEL_PLATFORM;
@@ -259,6 +254,26 @@ static __init void xen_hvm_guest_late_init(void)
#endif
}
+static uint32_t __init xen_platform_hvm(void)
+{
+ if (xen_pv_domain())
+ return 0;
+
+ if (xen_pvh_domain() && nopv) {
+ /* Guest booting via the Xen-PVH boot entry goes here */
+ pr_info("\"nopv\" parameter is ignored in PVH guest\n");
+ nopv = false;
+ } else if (nopv) {
+ /*
+ * Guest booting via normal boot entry (like via grub2) goes
+ * here.
+ */
+ x86_init.hyper.guest_late_init = xen_hvm_guest_late_init;
+ return 0;
+ }
+ return xen_cpuid_base();
+}
+
const __initconst struct hypervisor_x86 x86_hyper_xen_hvm = {
.name = "Xen HVM",
.detect = xen_platform_hvm,
@@ -268,4 +283,5 @@ static __init void xen_hvm_guest_late_init(void)
.init.init_mem_mapping = xen_hvm_init_mem_mapping,
.init.guest_late_init = xen_hvm_guest_late_init,
.runtime.pin_vcpu = xen_pin_vcpu,
+ .ignore_nopv = true,
};
--
1.8.3.1
next prev parent reply other threads:[~2019-07-08 9:12 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-07 9:15 [PATCH v6 0/4] misc fixes to PV extensions code Zhenzhong Duan
2019-07-07 9:15 ` [PATCH v6 1/4] x86/xen: Mark xen_hvm_need_lapic() and xen_x2apic_para_available() as __init Zhenzhong Duan
2019-07-07 9:15 ` [PATCH v6 2/4] x86: Add "nopv" parameter to disable PV extensions Zhenzhong Duan
2019-07-07 9:15 ` [PATCH v6 3/4] xen: Map "xen_nopv" parameter to "nopv" and mark it obsolete Zhenzhong Duan
2019-07-07 9:15 ` Zhenzhong Duan [this message]
2019-07-08 13:46 ` [PATCH v6 4/4] x86/xen: Add "nopv" support for HVM guest Boris Ostrovsky
2019-07-09 4:20 ` Zhenzhong Duan
2019-07-09 14:54 ` Boris Ostrovsky
2019-07-10 2:07 ` Zhenzhong Duan
2019-07-10 13:21 ` 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=1562490908-17882-5-git-send-email-zhenzhong.duan@oracle.com \
--to=zhenzhong.duan@oracle.com \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=jgross@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=sstabellini@kernel.org \
--cc=tglx@linutronix.de \
--cc=xen-devel@lists.xenproject.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 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).