diff options
author | Christian Borntraeger <borntraeger@de.ibm.com> | 2009-05-12 11:21:49 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2009-06-10 04:48:55 -0400 |
commit | ca8723023f25c9a70d76cbd6101f8fb4ffec2fa0 (patch) | |
tree | ef753d244a55271279b5b2cf29b28db5b35b454c /arch/s390/include/asm | |
parent | 2668dab794272f0898491acaf1e77e9a005abc0f (diff) |
KVM: s390: use hrtimer for clock wakeup from idle - v2
This patch reworks the s390 clock comparator wakeup to hrtimer. The clock
comparator is a per-cpu value that is compared against the TOD clock. If
ckc <= TOD an external interrupt 1004 is triggered. Since the clock comparator
and the TOD clock have a much higher resolution than jiffies we should use
hrtimers to trigger the wakeup. This speeds up guest nanosleep for small
values.
Since hrtimers callbacks run in hard-irq context, I added a tasklet to do
the actual work with enabled interrupts.
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Carsten Otte <cotte@de.ibm.com>
Signed-off-by: Christian Ehrhardt <ehrhardt@de.ibm.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/s390/include/asm')
-rw-r--r-- | arch/s390/include/asm/kvm_host.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h index 54ea39f96ecd..a27d0d5a6f86 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h | |||
@@ -13,6 +13,8 @@ | |||
13 | 13 | ||
14 | #ifndef ASM_KVM_HOST_H | 14 | #ifndef ASM_KVM_HOST_H |
15 | #define ASM_KVM_HOST_H | 15 | #define ASM_KVM_HOST_H |
16 | #include <linux/hrtimer.h> | ||
17 | #include <linux/interrupt.h> | ||
16 | #include <linux/kvm_host.h> | 18 | #include <linux/kvm_host.h> |
17 | #include <asm/debug.h> | 19 | #include <asm/debug.h> |
18 | #include <asm/cpuid.h> | 20 | #include <asm/cpuid.h> |
@@ -210,7 +212,8 @@ struct kvm_vcpu_arch { | |||
210 | s390_fp_regs guest_fpregs; | 212 | s390_fp_regs guest_fpregs; |
211 | unsigned int guest_acrs[NUM_ACRS]; | 213 | unsigned int guest_acrs[NUM_ACRS]; |
212 | struct kvm_s390_local_interrupt local_int; | 214 | struct kvm_s390_local_interrupt local_int; |
213 | struct timer_list ckc_timer; | 215 | struct hrtimer ckc_timer; |
216 | struct tasklet_struct tasklet; | ||
214 | union { | 217 | union { |
215 | cpuid_t cpu_id; | 218 | cpuid_t cpu_id; |
216 | u64 stidp_data; | 219 | u64 stidp_data; |