diff options
author | Luke Shumaker <LukeShu@sbcglobal.net> | 2014-06-14 19:20:46 -0400 |
---|---|---|
committer | Luke Shumaker <LukeShu@sbcglobal.net> | 2014-06-14 19:20:46 -0400 |
commit | f7fd1d99d87f11c41cf09f881b1aeb950a3c8e13 (patch) | |
tree | 95910fb3078e1136e35aaa6d9f0f251cdb4ca1a8 /kernels/xen/pvh_pit_init.patch | |
parent | 09c1bb45d89c78a9fd80c7a500cb29a0908dc668 (diff) | |
parent | cd640e7ca0a8968edf887d03db8224334f663e84 (diff) | |
download | abslibre-f7fd1d99d87f11c41cf09f881b1aeb950a3c8e13.tar.gz abslibre-f7fd1d99d87f11c41cf09f881b1aeb950a3c8e13.tar.bz2 abslibre-f7fd1d99d87f11c41cf09f881b1aeb950a3c8e13.zip |
Merge branch 'master' of git://projects.parabolagnulinux.org/abslibre
Diffstat (limited to 'kernels/xen/pvh_pit_init.patch')
-rw-r--r-- | kernels/xen/pvh_pit_init.patch | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/kernels/xen/pvh_pit_init.patch b/kernels/xen/pvh_pit_init.patch new file mode 100644 index 000000000..4f14e5ddf --- /dev/null +++ b/kernels/xen/pvh_pit_init.patch @@ -0,0 +1,107 @@ +From 3a148e0a7ee0ae56a498be5ba973314ec50cd999 Mon Sep 17 00:00:00 2001 +From: Mukesh Rathor <mukesh.rathor@oracle.com> +Date: Fri, 4 Apr 2014 10:36:29 +0200 +Subject: [PATCH] x86: call pit_init for pvh also + +During halt of a pvh guest, the guest may do speaker shutdown. This +results in call to handle_speaker_io in xen. It will hang on the vpit +spin lock because it has not been initialized. +Since, pit_init is also called for both pv and hvm, the call is +moved to a more generic place. + +Signed-off-by: Mukesh Rathor <mukesh.rathor@oracle.com> +Reviewed-by: Jan Beulich <jbeulich@suse.com> +master commit: c30c544b199f70eada597c7352cdcb44648f6dcd +master date: 2014-03-11 13:56:50 +0100 +--- + xen/arch/x86/domain.c | 9 +++++---- + xen/arch/x86/hvm/hvm.c | 2 -- + xen/arch/x86/hvm/i8254.c | 3 +-- + xen/include/asm-x86/hvm/vpt.h | 2 +- + 4 files changed, 7 insertions(+), 9 deletions(-) + +diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c +index 6618ae6..bc073e5 100644 +--- a/xen/arch/x86/domain.c ++++ b/xen/arch/x86/domain.c +@@ -422,10 +422,6 @@ int vcpu_initialise(struct vcpu *v) + + /* PV guests by default have a 100Hz ticker. */ + v->periodic_period = MILLISECS(10); +- +- /* PV guests get an emulated PIT too for video BIOSes to use. */ +- if ( v->vcpu_id == 0 ) +- pit_init(v, cpu_khz); + } + + v->arch.schedule_tail = continue_nonidle_domain; +@@ -579,6 +575,9 @@ int arch_domain_create(struct domain *d, unsigned int domcr_flags) + tsc_set_info(d, TSC_MODE_DEFAULT, 0UL, 0, 0); + spin_lock_init(&d->arch.vtsc_lock); + ++ /* PV/PVH guests get an emulated PIT too for video BIOSes to use. */ ++ pit_init(d, cpu_khz); ++ + return 0; + + fail: +@@ -1980,6 +1979,8 @@ int domain_relinquish_resources(struct domain *d) + BUG(); + } + ++ pit_deinit(d); ++ + if ( has_hvm_container_domain(d) ) + hvm_domain_relinquish_resources(d); + +diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c +index 6150899..a666471 100644 +--- a/xen/arch/x86/hvm/hvm.c ++++ b/xen/arch/x86/hvm/hvm.c +@@ -643,7 +643,6 @@ void hvm_domain_relinquish_resources(struct domain *d) + rtc_deinit(d); + if ( d->vcpu != NULL && d->vcpu[0] != NULL ) + { +- pit_deinit(d); + pmtimer_deinit(d); + hpet_deinit(d); + } +@@ -1217,7 +1216,6 @@ int hvm_vcpu_initialise(struct vcpu *v) + if ( v->vcpu_id == 0 ) + { + /* NB. All these really belong in hvm_domain_initialise(). */ +- pit_init(v, cpu_khz); + pmtimer_init(v); + hpet_init(v); + +diff --git a/xen/arch/x86/hvm/i8254.c b/xen/arch/x86/hvm/i8254.c +index c0d6bc2..f7493b8 100644 +--- a/xen/arch/x86/hvm/i8254.c ++++ b/xen/arch/x86/hvm/i8254.c +@@ -447,9 +447,8 @@ void pit_reset(struct domain *d) + spin_unlock(&pit->lock); + } + +-void pit_init(struct vcpu *v, unsigned long cpu_khz) ++void pit_init(struct domain *d, unsigned long cpu_khz) + { +- struct domain *d = v->domain; + PITState *pit = domain_vpit(d); + + spin_lock_init(&pit->lock); +diff --git a/xen/include/asm-x86/hvm/vpt.h b/xen/include/asm-x86/hvm/vpt.h +index 87c3a66..9f3ec8d 100644 +--- a/xen/include/asm-x86/hvm/vpt.h ++++ b/xen/include/asm-x86/hvm/vpt.h +@@ -175,7 +175,7 @@ void destroy_periodic_time(struct periodic_time *pt); + int pv_pit_handler(int port, int data, int write); + void pit_reset(struct domain *d); + +-void pit_init(struct vcpu *v, unsigned long cpu_khz); ++void pit_init(struct domain *d, unsigned long cpu_khz); + void pit_stop_channel0_irq(PITState * pit); + void pit_deinit(struct domain *d); + void rtc_init(struct domain *d); +-- +1.7.2.5 + |