From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org,
boris.ostrovsky@oracle.com, david.vrabel@citrix.com,
mukesh.rathor@oracle.com, jbeulich@suse.com
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Subject: [PATCH v11 09/12] xen/pvh: Piggyback on PVHVM XenBus and event channels for PVH.
Date: Tue, 17 Dec 2013 15:51:40 -0500 [thread overview]
Message-ID: <1387313503-31362-10-git-send-email-konrad.wilk@oracle.com> (raw)
In-Reply-To: <1387313503-31362-1-git-send-email-konrad.wilk@oracle.com>
From: Mukesh Rathor <mukesh.rathor@oracle.com>
PVH is a PV guest with a twist - there are certain things
that work in it like HVM and some like PV. There is
a similar mode - PVHVM where we run in HVM mode with
PV code enabled - and this patch explores that.
The most notable PV interfaces are the XenBus and event channels.
For PVH, we will use XenBus and event channels.
For the XenBus mechanism we piggyback on how it is done for
PVHVM guests.
Ditto for the event channel mechanism - we piggyback on PVHVM -
by setting up a specific vector callback and that
vector ends up calling the event channel mechanism to
dispatch the events as needed.
This means that from a pvops perspective, we can use
native_irq_ops instead of the Xen PV specific. Albeit in the
future we could support pirq_eoi_map. But that is
a feature request that can be shared with PVHVM.
Signed-off-by: Mukesh Rathor <mukesh.rathor@oracle.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
arch/x86/xen/enlighten.c | 6 ++++++
arch/x86/xen/irq.c | 5 ++++-
drivers/xen/events.c | 5 +++++
drivers/xen/xenbus/xenbus_client.c | 3 ++-
4 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index e420613..7fceb51 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1134,6 +1134,8 @@ void xen_setup_shared_info(void)
/* In UP this is as good a place as any to set up shared info */
xen_setup_vcpu_info_placement();
#endif
+ if (xen_pvh_domain())
+ return;
xen_setup_mfn_list_list();
}
@@ -1146,6 +1148,10 @@ void xen_setup_vcpu_info_placement(void)
for_each_possible_cpu(cpu)
xen_vcpu_setup(cpu);
+ /* PVH always uses native IRQ ops */
+ if (xen_pvh_domain())
+ return;
+
/* xen_vcpu_setup managed to place the vcpu_info within the
percpu area for all cpus, so make use of it */
if (have_vcpu_info_placement) {
diff --git a/arch/x86/xen/irq.c b/arch/x86/xen/irq.c
index 0da7f86..4f7f351 100644
--- a/arch/x86/xen/irq.c
+++ b/arch/x86/xen/irq.c
@@ -5,6 +5,7 @@
#include <xen/interface/xen.h>
#include <xen/interface/sched.h>
#include <xen/interface/vcpu.h>
+#include <xen/features.h>
#include <xen/events.h>
#include <asm/xen/hypercall.h>
@@ -128,6 +129,8 @@ static const struct pv_irq_ops xen_irq_ops __initconst = {
void __init xen_init_irq_ops(void)
{
- pv_irq_ops = xen_irq_ops;
+ /* For PVH we use default pv_irq_ops settings */
+ if (!xen_feature(XENFEAT_hvm_callback_vector))
+ pv_irq_ops = xen_irq_ops;
x86_init.irqs.intr_init = xen_init_IRQ;
}
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index 4035e83..627a16a 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -1922,6 +1922,11 @@ void __init xen_init_IRQ(void)
if (xen_initial_domain())
pci_xen_initial_domain();
+ if (xen_feature(XENFEAT_hvm_callback_vector)) {
+ xen_callback_vector();
+ return;
+ }
+
pirq_eoi_map = (void *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
eoi_gmfn.gmfn = virt_to_mfn(pirq_eoi_map);
rc = HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn_v2, &eoi_gmfn);
diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c
index ec097d6..7f7c454 100644
--- a/drivers/xen/xenbus/xenbus_client.c
+++ b/drivers/xen/xenbus/xenbus_client.c
@@ -45,6 +45,7 @@
#include <xen/grant_table.h>
#include <xen/xenbus.h>
#include <xen/xen.h>
+#include <xen/features.h>
#include "xenbus_probe.h"
@@ -743,7 +744,7 @@ static const struct xenbus_ring_ops ring_ops_hvm = {
void __init xenbus_ring_ops_init(void)
{
- if (xen_pv_domain())
+ if (xen_pv_domain() && !xen_feature(XENFEAT_auto_translated_physmap))
ring_ops = &ring_ops_pv;
else
ring_ops = &ring_ops_hvm;
--
1.8.3.1
next prev parent reply other threads:[~2013-12-17 20:51 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1387313503-31362-1-git-send-email-konrad.wilk@oracle.com>
2013-12-17 20:51 ` [PATCH v11 01/12] xen/p2m: Check for auto-xlat when doing mfn_to_local_pfn Konrad Rzeszutek Wilk
2013-12-18 14:10 ` Stefano Stabellini
2013-12-17 20:51 ` [PATCH v11 02/12] xen/pvh: Define what an PVH guest is Konrad Rzeszutek Wilk
2013-12-17 20:51 ` [PATCH v11 03/12] xen/pvh: Early bootup changes in PV code Konrad Rzeszutek Wilk
2013-12-18 14:27 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1312181423380.8667@kaball.uk.xensource.com>
2013-12-18 14:58 ` Konrad Rzeszutek Wilk
[not found] ` <20131218145852.GC4934@phenom.dumpdata.com>
2013-12-18 15:05 ` Stefano Stabellini
2013-12-17 20:51 ` [PATCH v11 04/12] xen/pvh: Don't setup P2M tree Konrad Rzeszutek Wilk
2013-12-18 14:39 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1312181428340.8667@kaball.uk.xensource.com>
2013-12-18 15:05 ` Konrad Rzeszutek Wilk
2013-12-17 20:51 ` [PATCH v11 05/12] xen/pvh: Update E820 to work with PVH Konrad Rzeszutek Wilk
2013-12-17 20:51 ` [PATCH v11 06/12] xen/pvh: Load GDT/GS in early PV bootup code for BSP Konrad Rzeszutek Wilk
2013-12-17 20:51 ` [PATCH v11 07/12] xen/pvh: Secondary VCPU bringup (non-bootup CPUs) Konrad Rzeszutek Wilk
2013-12-17 20:51 ` [PATCH v11 08/12] xen/pvh: MMU changes for PVH Konrad Rzeszutek Wilk
2013-12-17 20:51 ` Konrad Rzeszutek Wilk [this message]
2013-12-18 18:31 ` [PATCH v11 09/12] xen/pvh: Piggyback on PVHVM XenBus and event channels " Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1312181827280.8667@kaball.uk.xensource.com>
2013-12-18 21:17 ` Konrad Rzeszutek Wilk
2013-12-31 18:56 ` Konrad Rzeszutek Wilk
[not found] ` <20131231185656.GB3129@phenom.dumpdata.com>
2014-01-03 15:04 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1401031501180.8667@kaball.uk.xensource.com>
2014-01-04 0:29 ` Mukesh Rathor
[not found] ` <20131218211739.GD11717@phenom.dumpdata.com>
2014-01-04 0:48 ` Mukesh Rathor
[not found] ` <20140103164800.00ef581c@mantra.us.oracle.com>
2014-01-05 17:18 ` Stefano Stabellini
2013-12-17 20:51 ` [PATCH v11 10/12] xen/pvh: Piggyback on PVHVM for grant driver Konrad Rzeszutek Wilk
2013-12-18 18:46 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1312181831560.8667@kaball.uk.xensource.com>
2013-12-18 21:21 ` Konrad Rzeszutek Wilk
[not found] ` <20131218212150.GE11717@phenom.dumpdata.com>
2014-01-03 15:10 ` Stefano Stabellini
2013-12-17 20:51 ` [PATCH v11 11/12] xen/pvh: Disable PV code that does not work with PVH Konrad Rzeszutek Wilk
2013-12-17 20:51 ` [PATCH v11 12/12] xen/pvh: Support ParaVirtualized Hardware extensions Konrad Rzeszutek Wilk
2013-12-18 14:52 ` Stefano Stabellini
[not found] ` <1387313503-31362-12-git-send-email-konrad.wilk@oracle.com>
2013-12-18 14:19 ` [PATCH v11 11/12] xen/pvh: Disable PV code that does not work with PVH Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1312181416230.8667@kaball.uk.xensource.com>
2013-12-18 14:56 ` Konrad Rzeszutek Wilk
[not found] ` <20131218145602.GA4934@phenom.dumpdata.com>
2013-12-18 15:22 ` Stefano Stabellini
[not found] ` <1387313503-31362-3-git-send-email-konrad.wilk@oracle.com>
2013-12-18 14:22 ` [PATCH v11 02/12] xen/pvh: Define what an PVH guest is Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1312181421260.8667@kaball.uk.xensource.com>
2013-12-18 14:55 ` Stefano Stabellini
2013-12-18 14:57 ` Konrad Rzeszutek Wilk
[not found] ` <alpine.DEB.2.02.1312181453110.8667@kaball.uk.xensource.com>
2013-12-18 16:01 ` Ian Campbell
[not found] ` <1387382463.28680.52.camel@kazak.uk.xensource.com>
2013-12-18 16:58 ` Konrad Rzeszutek Wilk
[not found] ` <20131218165807.GB4630@phenom.dumpdata.com>
2013-12-18 17:03 ` Ian Campbell
[not found] ` <1387313503-31362-9-git-send-email-konrad.wilk@oracle.com>
2013-12-18 14:48 ` [PATCH v11 08/12] xen/pvh: MMU changes for PVH Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1312181442050.8667@kaball.uk.xensource.com>
2013-12-18 15:10 ` Konrad Rzeszutek Wilk
[not found] ` <20131218151015.GE4934@phenom.dumpdata.com>
2013-12-18 15:15 ` Stefano Stabellini
[not found] ` <1387313503-31362-6-git-send-email-konrad.wilk@oracle.com>
2013-12-18 18:25 ` [PATCH v11 05/12] xen/pvh: Update E820 to work with PVH Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1312181813260.8667@kaball.uk.xensource.com>
2013-12-18 20:30 ` Konrad Rzeszutek Wilk
2013-12-18 23:44 ` Mukesh Rathor
[not found] ` <20131218154438.364f6d74@mantra.us.oracle.com>
2013-12-19 11:25 ` Stefano Stabellini
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=1387313503-31362-10-git-send-email-konrad.wilk@oracle.com \
--to=konrad.wilk@oracle.com \
--cc=boris.ostrovsky@oracle.com \
--cc=david.vrabel@citrix.com \
--cc=jbeulich@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mukesh.rathor@oracle.com \
--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).