mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
x86/hvm: separate ioreq server code from generic hvm code
The code in hvm/hvm.c related to handling I/O emulation using the ioreq server framework is large and mostly self-contained. This patch separates the ioreq server code into a new hvm/ioreq.c source module and accompanying asm-x86/hvm/ioreq.h header file. There is no intended functional change, only code movement. Signed-off-by: Paul Durrant <paul.durrant@citrix.com> Acked-by: Kevin Tian <kevin.tian@intel.com> Acked-by: Jan Beulich <jbeulich@suse.com> Acked-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
1 parent
f7b87b0745
commit
108788e817
9 files changed
+1453
-1325
No files matched your search
@@ -9,6 +9,7 @@ obj-y += hvm.o
|
||||
obj-y += i8254.o
|
||||
obj-y += intercept.o
|
||||
obj-y += io.o
|
||||
obj-y += ioreq.o
|
||||
obj-y += irq.o
|
||||
obj-y += mtrr.o
|
||||
obj-y += nestedhvm.o
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <asm/xstate.h>
|
||||
#include <asm/hvm/emulate.h>
|
||||
#include <asm/hvm/hvm.h>
|
||||
#include <asm/hvm/ioreq.h>
|
||||
#include <asm/hvm/trace.h>
|
||||
#include <asm/hvm/support.h>
|
||||
#include <asm/hvm/svm/svm.h>
|
||||
|
||||
+7
-1318
File diff suppressed because it is too large.
Load diff
@@ -35,6 +35,7 @@
|
||||
#include <asm/shadow.h>
|
||||
#include <asm/p2m.h>
|
||||
#include <asm/hvm/hvm.h>
|
||||
#include <asm/hvm/ioreq.h>
|
||||
#include <asm/hvm/support.h>
|
||||
#include <asm/hvm/vpt.h>
|
||||
#include <asm/hvm/vpic.h>
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -31,6 +31,7 @@
|
||||
#include <xen/types.h>
|
||||
#include <xen/sched.h>
|
||||
#include <xen/domain_page.h>
|
||||
#include <asm/hvm/ioreq.h>
|
||||
#include <asm/hvm/support.h>
|
||||
#include <xen/numa.h>
|
||||
#include <xen/paging.h>
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <asm/types.h>
|
||||
#include <asm/mtrr.h>
|
||||
#include <asm/p2m.h>
|
||||
#include <asm/hvm/ioreq.h>
|
||||
#include <asm/hvm/vmx/vmx.h>
|
||||
#include <asm/hvm/vmx/vvmx.h>
|
||||
#include <asm/hvm/nestedhvm.h>
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include <asm/hvm/asid.h>
|
||||
#include <public/domctl.h>
|
||||
#include <public/hvm/save.h>
|
||||
#include <public/hvm/ioreq.h>
|
||||
#include <xen/mm.h>
|
||||
|
||||
#ifndef NDEBUG
|
||||
@@ -257,11 +256,6 @@ int hvm_vcpu_cacheattr_init(struct vcpu *v);
|
||||
void hvm_vcpu_cacheattr_destroy(struct vcpu *v);
|
||||
void hvm_vcpu_reset_state(struct vcpu *v, uint16_t cs, uint16_t ip);
|
||||
|
||||
struct hvm_ioreq_server *hvm_select_ioreq_server(struct domain *d,
|
||||
ioreq_t *p);
|
||||
int hvm_send_ioreq(struct hvm_ioreq_server *s, ioreq_t *p, bool_t buffered);
|
||||
unsigned int hvm_broadcast_ioreq(ioreq_t *p, bool_t buffered);
|
||||
|
||||
void hvm_get_guest_pat(struct vcpu *v, u64 *guest_pat);
|
||||
int hvm_set_guest_pat(struct vcpu *v, u64 guest_pat);
|
||||
|
||||
@@ -411,7 +405,6 @@ void hvm_hypervisor_cpuid_leaf(uint32_t sub_idx,
|
||||
void hvm_cpuid(unsigned int input, unsigned int *eax, unsigned int *ebx,
|
||||
unsigned int *ecx, unsigned int *edx);
|
||||
void hvm_migrate_timers(struct vcpu *v);
|
||||
bool_t hvm_io_pending(struct vcpu *v);
|
||||
void hvm_do_resume(struct vcpu *v);
|
||||
void hvm_migrate_pirqs(struct vcpu *v);
|
||||
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* hvm.h: Hardware virtual machine assist interface definitions.
|
||||
*
|
||||
* Copyright (c) 2016 Citrix Systems Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_X86_HVM_IOREQ_H__
|
||||
#define __ASM_X86_HVM_IOREQ_H__
|
||||
|
||||
bool_t hvm_io_pending(struct vcpu *v);
|
||||
bool_t handle_hvm_io_completion(struct vcpu *v);
|
||||
|
||||
int hvm_create_ioreq_server(struct domain *d, domid_t domid,
|
||||
bool_t is_default, int bufioreq_handling,
|
||||
ioservid_t *id);
|
||||
int hvm_destroy_ioreq_server(struct domain *d, ioservid_t id);
|
||||
int hvm_get_ioreq_server_info(struct domain *d, ioservid_t id,
|
||||
unsigned long *ioreq_pfn,
|
||||
unsigned long *bufioreq_pfn,
|
||||
evtchn_port_t *bufioreq_port);
|
||||
int hvm_map_io_range_to_ioreq_server(struct domain *d, ioservid_t id,
|
||||
uint32_t type, uint64_t start,
|
||||
uint64_t end);
|
||||
int hvm_unmap_io_range_from_ioreq_server(struct domain *d, ioservid_t id,
|
||||
uint32_t type, uint64_t start,
|
||||
uint64_t end);
|
||||
int hvm_set_ioreq_server_state(struct domain *d, ioservid_t id,
|
||||
bool_t enabled);
|
||||
|
||||
int hvm_all_ioreq_servers_add_vcpu(struct domain *d, struct vcpu *v);
|
||||
void hvm_all_ioreq_servers_remove_vcpu(struct domain *d, struct vcpu *v);
|
||||
void hvm_destroy_all_ioreq_servers(struct domain *d);
|
||||
|
||||
int hvm_set_dm_domain(struct domain *d, domid_t domid);
|
||||
|
||||
struct hvm_ioreq_server *hvm_select_ioreq_server(struct domain *d,
|
||||
ioreq_t *p);
|
||||
int hvm_send_ioreq(struct hvm_ioreq_server *s, ioreq_t *proto_p,
|
||||
bool_t buffered);
|
||||
unsigned int hvm_broadcast_ioreq(ioreq_t *p, bool_t buffered);
|
||||
|
||||
void hvm_ioreq_init(struct domain *d);
|
||||
|
||||
#endif /* __ASM_X86_HVM_IOREQ_H__ */
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* mode: C
|
||||
* c-file-style: "BSD"
|
||||
* c-basic-offset: 4
|
||||
* tab-width: 4
|
||||
* indent-tabs-mode: nil
|
||||
* End:
|
||||
*/
|
||||