From: George Dunlap <george.dunlap@eu.citrix.com>
To: xen-devel@lists.xen.org
Cc: Keir Fraser <keir@xen.org>, Jan Beulich <jbeulich@suse.com>,
George Dunlap <george.dunlap@eu.citrix.com>,
Eddie Dong <eddie.dong@intel.com>, Tim Deegan <tim@xen.org>,
Jun Nakajima <jun.nakajima@intel.com>
Subject: [PATCH v15 14/19] pvh: Use PV handlers for PIO
Date: Mon, 11 Nov 2013 14:57:16 +0000 [thread overview]
Message-ID: <1384181841-22739-15-git-send-email-george.dunlap@eu.citrix.com> (raw)
In-Reply-To: <1384181841-22739-1-git-send-email-george.dunlap@eu.citrix.com>
Register an IO handler for the entire PIO range, and have it call the
PV PIO handlers.
NB at this point this won't do the full "copy and execute on the stack
with full GPRs" work-around; this may need to be sorted out for dom0 to allow
these instructions to happen in guest context.
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
---
Note: PVH seems to work just fine without this patch (i.e., all PIOs
are noops). Presumably something like this will be needed for dom0 at
some point.
CC: Mukesh Rathor <mukesh.rathor@oracle.com>
CC: Jan Beulich <jbeulich@suse.com>
CC: Tim Deegan <tim@xen.org>
CC: Keir Fraser <keir@xen.org>
CC: Jun Nakajima <jun.nakajima@intel.com>
CC: Eddie Dong <eddie.dong@intel.com>
---
xen/arch/x86/hvm/hvm.c | 18 ++++++++++++++++++
xen/arch/x86/traps.c | 4 ++--
xen/include/asm-x86/traps.h | 8 ++++++++
3 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 3f245ba..fedbcde 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -519,6 +519,21 @@ static int hvm_print_line(
return X86EMUL_OKAY;
}
+static int handle_pvh_io(
+ int dir, uint32_t port, uint32_t bytes, uint32_t *val)
+{
+ struct vcpu *curr = current;
+ struct cpu_user_regs *regs = guest_cpu_user_regs();
+
+ if ( dir == IOREQ_WRITE )
+ guest_io_write(port, bytes, *val, curr, regs);
+ else
+ *val = guest_io_read(port, bytes, curr, regs);
+
+ return X86EMUL_OKAY;
+}
+
+
int hvm_domain_initialise(struct domain *d)
{
int rc;
@@ -566,7 +581,10 @@ int hvm_domain_initialise(struct domain *d)
d->arch.hvm_domain.io_handler->num_slot = 0;
if ( is_pvh_domain(d) )
+ {
+ register_portio_handler(d, 0, 0xffffffff, handle_pvh_io);
return 0;
+ }
hvm_init_guest_time(d);
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index 852b8e6..6c278bc 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -1681,7 +1681,7 @@ static int pci_cfg_ok(struct domain *d, int write, int size)
return 1;
}
-static uint32_t guest_io_read(
+uint32_t guest_io_read(
unsigned int port, unsigned int bytes,
struct vcpu *v, struct cpu_user_regs *regs)
{
@@ -1748,7 +1748,7 @@ static uint32_t guest_io_read(
return data;
}
-static void guest_io_write(
+void guest_io_write(
unsigned int port, unsigned int bytes, uint32_t data,
struct vcpu *v, struct cpu_user_regs *regs)
{
diff --git a/xen/include/asm-x86/traps.h b/xen/include/asm-x86/traps.h
index 82cbcee..a26b318 100644
--- a/xen/include/asm-x86/traps.h
+++ b/xen/include/asm-x86/traps.h
@@ -49,4 +49,12 @@ extern int guest_has_trap_callback(struct domain *d, uint16_t vcpuid,
extern int send_guest_trap(struct domain *d, uint16_t vcpuid,
unsigned int trap_nr);
+uint32_t guest_io_read(
+ unsigned int port, unsigned int bytes,
+ struct vcpu *v, struct cpu_user_regs *regs);
+void guest_io_write(
+ unsigned int port, unsigned int bytes, uint32_t data,
+ struct vcpu *v, struct cpu_user_regs *regs);
+
+
#endif /* ASM_TRAP_H */
--
1.7.9.5
next prev parent reply other threads:[~2013-11-11 14:57 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-11 14:57 [PATCH v15 00/18] Introduce PVH domU support George Dunlap
2013-11-11 14:57 ` [PATCH v15 01/19] Allow vmx_update_debug_state to be called when v!=current George Dunlap
2013-11-11 14:57 ` [PATCH v15 02/19] libxc: Move temporary grant table mapping to end of memory George Dunlap
2013-11-11 14:57 ` [PATCH v15 03/19] pvh prep: code motion George Dunlap
2013-11-11 14:57 ` [PATCH v15 04/19] pvh: Tolerate HVM guests having no ioreq page George Dunlap
2013-11-11 14:57 ` [PATCH v15 05/19] pvh prep: Introduce pv guest type and has_hvm_container macros George Dunlap
2013-11-12 13:34 ` Jan Beulich
2013-11-12 15:12 ` George Dunlap
2013-11-11 14:57 ` [PATCH v15 06/19] pvh: Introduce PVH guest type George Dunlap
2013-11-11 14:57 ` [PATCH v15 07/19] pvh: Disable unneeded features of HVM containers George Dunlap
2013-11-12 13:51 ` Jan Beulich
2013-11-12 14:56 ` George Dunlap
2013-11-12 15:03 ` Jan Beulich
2013-11-12 15:08 ` George Dunlap
2013-11-11 14:57 ` [PATCH v15 08/19] pvh: vmx-specific changes George Dunlap
2013-11-12 14:03 ` Jan Beulich
2013-11-12 15:06 ` George Dunlap
2013-11-12 15:24 ` Jan Beulich
2013-11-11 14:57 ` [PATCH v15 09/19] pvh: Do not allow PVH guests to change paging modes George Dunlap
2013-11-11 14:57 ` [PATCH v15 10/19] pvh: PVH access to hypercalls George Dunlap
2013-11-11 14:57 ` [PATCH v15 11/19] pvh: Use PV e820 George Dunlap
2013-11-11 14:57 ` [PATCH v15 12/19] pvh: Set up more PV stuff in set_info_guest George Dunlap
2013-11-11 14:57 ` [PATCH v15 13/19] pvh: PV cpuid George Dunlap
2013-11-11 14:57 ` George Dunlap [this message]
2013-11-12 14:33 ` [PATCH v15 14/19] pvh: Use PV handlers for PIO Jan Beulich
2013-11-12 16:54 ` George Dunlap
2013-11-12 17:00 ` Jan Beulich
2013-11-11 14:57 ` [PATCH v15 15/19] pvh: Disable 32-bit guest support for now George Dunlap
2013-11-11 14:57 ` [PATCH v15 16/19] pvh: Restrict tsc_mode to NEVER_EMULATE " George Dunlap
2013-11-11 14:57 ` [PATCH v15 17/19] pvh: Documentation George Dunlap
2013-11-11 14:57 ` [PATCH v15 18/19] pvh tools: libxc changes to build a PVH guest George Dunlap
2013-11-12 11:33 ` Ian Jackson
2013-11-11 14:57 ` [PATCH v15 19/19] pvh tools: libxl changes to create " George Dunlap
2013-11-12 11:38 ` Ian Jackson
2013-11-11 15:30 ` [PATCH v15 00/18] Introduce PVH domU support George Dunlap
2013-11-11 17:17 ` Keir Fraser
2013-11-12 7:19 ` Dong, Eddie
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=1384181841-22739-15-git-send-email-george.dunlap@eu.citrix.com \
--to=george.dunlap@eu.citrix.com \
--cc=eddie.dong@intel.com \
--cc=jbeulich@suse.com \
--cc=jun.nakajima@intel.com \
--cc=keir@xen.org \
--cc=tim@xen.org \
--cc=xen-devel@lists.xen.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).