diff options
author | Jan Beulich <jbeulich@novell.com> | 2011-04-05 13:02:57 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@novell.com> | 2011-04-05 13:02:57 +0100 |
commit | 1dd3a56b4338962b953545ed16f4de1d1a394189 (patch) | |
tree | 5af2df0c8c1ae58f372f88dac6f19ff1a41f2b29 /xen/arch/x86/hvm/i8254.c | |
parent | 6b063a4a6f44245a727aa04ef76408b2e00af9c7 (diff) | |
download | xen-1dd3a56b4338962b953545ed16f4de1d1a394189.tar.gz xen-1dd3a56b4338962b953545ed16f4de1d1a394189.tar.bz2 xen-1dd3a56b4338962b953545ed16f4de1d1a394189.zip |
x86: split struct domain
This is accomplished by converting a couple of embedded arrays (in one
case a structure containing an array) into separately allocated
pointers, and (just as for struct arch_vcpu in a prior patch)
overlaying some PV-only fields with HVM-only ones.
One particularly noteworthy change in the opposite direction is that
of PITState - this field so far lived in the HVM-only portion, but is
being used by PV guests too, and hence needed to be moved out of
struct hvm_domain.
The change to XENMEM_set_memory_map (and hence libxl__build_pre() and
the movement of the E820 related pieces to struct pv_domain) are
subject to a positive response to a query sent to xen-devel regarding
the need for this to happen for HVM guests (see
http://lists.xensource.com/archives/html/xen-devel/2011-03/msg01848.html).
The protection of arch.hvm_domain.irq.dpci accesses by is_hvm_domain()
is subject to confirmation that the field is used for HVM guests only
(see
http://lists.xensource.com/archives/html/xen-devel/2011-03/msg02004.html).
In the absence of any reply to these queries, and given the early
state of 4.2 development, I think it should be acceptable to take the
risk of having to later undo/redo some of this.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Diffstat (limited to 'xen/arch/x86/hvm/i8254.c')
-rw-r--r-- | xen/arch/x86/hvm/i8254.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/xen/arch/x86/hvm/i8254.c b/xen/arch/x86/hvm/i8254.c index 702a843640..c0d6bc29b6 100644 --- a/xen/arch/x86/hvm/i8254.c +++ b/xen/arch/x86/hvm/i8254.c @@ -38,10 +38,9 @@ #include <asm/hvm/vpt.h> #include <asm/current.h> -#define domain_vpit(x) (&(x)->arch.hvm_domain.pl_time.vpit) +#define domain_vpit(x) (&(x)->arch.vpit) #define vcpu_vpit(x) (domain_vpit((x)->domain)) -#define vpit_domain(x) (container_of((x), struct domain, \ - arch.hvm_domain.pl_time.vpit)) +#define vpit_domain(x) (container_of((x), struct domain, arch.vpit)) #define vpit_vcpu(x) (pt_global_vcpu_target(vpit_domain(x))) #define RW_STATE_LSB 1 @@ -450,14 +449,18 @@ void pit_reset(struct domain *d) void pit_init(struct vcpu *v, unsigned long cpu_khz) { - PITState *pit = vcpu_vpit(v); + struct domain *d = v->domain; + PITState *pit = domain_vpit(d); spin_lock_init(&pit->lock); - register_portio_handler(v->domain, PIT_BASE, 4, handle_pit_io); - register_portio_handler(v->domain, 0x61, 1, handle_speaker_io); + if ( is_hvm_domain(d) ) + { + register_portio_handler(d, PIT_BASE, 4, handle_pit_io); + register_portio_handler(d, 0x61, 1, handle_speaker_io); + } - pit_reset(v->domain); + pit_reset(d); } void pit_deinit(struct domain *d) |