diff options
Diffstat (limited to 'arch/powerpc/kvm/powerpc.c')
-rw-r--r-- | arch/powerpc/kvm/powerpc.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index 5902bbc2411e..f06cf93b178e 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/kvm_host.h> | 23 | #include <linux/kvm_host.h> |
24 | #include <linux/module.h> | 24 | #include <linux/module.h> |
25 | #include <linux/vmalloc.h> | 25 | #include <linux/vmalloc.h> |
26 | #include <linux/hrtimer.h> | ||
26 | #include <linux/fs.h> | 27 | #include <linux/fs.h> |
27 | #include <asm/cputable.h> | 28 | #include <asm/cputable.h> |
28 | #include <asm/uaccess.h> | 29 | #include <asm/uaccess.h> |
@@ -144,6 +145,9 @@ int kvm_dev_ioctl_check_extension(long ext) | |||
144 | int r; | 145 | int r; |
145 | 146 | ||
146 | switch (ext) { | 147 | switch (ext) { |
148 | case KVM_CAP_PPC_SEGSTATE: | ||
149 | r = 1; | ||
150 | break; | ||
147 | case KVM_CAP_COALESCED_MMIO: | 151 | case KVM_CAP_COALESCED_MMIO: |
148 | r = KVM_COALESCED_MMIO_PAGE_OFFSET; | 152 | r = KVM_COALESCED_MMIO_PAGE_OFFSET; |
149 | break; | 153 | break; |
@@ -209,10 +213,25 @@ static void kvmppc_decrementer_func(unsigned long data) | |||
209 | } | 213 | } |
210 | } | 214 | } |
211 | 215 | ||
216 | /* | ||
217 | * low level hrtimer wake routine. Because this runs in hardirq context | ||
218 | * we schedule a tasklet to do the real work. | ||
219 | */ | ||
220 | enum hrtimer_restart kvmppc_decrementer_wakeup(struct hrtimer *timer) | ||
221 | { | ||
222 | struct kvm_vcpu *vcpu; | ||
223 | |||
224 | vcpu = container_of(timer, struct kvm_vcpu, arch.dec_timer); | ||
225 | tasklet_schedule(&vcpu->arch.tasklet); | ||
226 | |||
227 | return HRTIMER_NORESTART; | ||
228 | } | ||
229 | |||
212 | int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) | 230 | int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) |
213 | { | 231 | { |
214 | setup_timer(&vcpu->arch.dec_timer, kvmppc_decrementer_func, | 232 | hrtimer_init(&vcpu->arch.dec_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS); |
215 | (unsigned long)vcpu); | 233 | tasklet_init(&vcpu->arch.tasklet, kvmppc_decrementer_func, (ulong)vcpu); |
234 | vcpu->arch.dec_timer.function = kvmppc_decrementer_wakeup; | ||
216 | 235 | ||
217 | return 0; | 236 | return 0; |
218 | } | 237 | } |
@@ -410,11 +429,6 @@ out: | |||
410 | return r; | 429 | return r; |
411 | } | 430 | } |
412 | 431 | ||
413 | int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log) | ||
414 | { | ||
415 | return -ENOTSUPP; | ||
416 | } | ||
417 | |||
418 | long kvm_arch_vm_ioctl(struct file *filp, | 432 | long kvm_arch_vm_ioctl(struct file *filp, |
419 | unsigned int ioctl, unsigned long arg) | 433 | unsigned int ioctl, unsigned long arg) |
420 | { | 434 | { |