diff options
Diffstat (limited to 'arch/powerpc/kvm/powerpc.c')
-rw-r--r-- | arch/powerpc/kvm/powerpc.c | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index f06cf93b178e..51aedd7f16bc 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c | |||
@@ -137,6 +137,7 @@ void kvm_arch_destroy_vm(struct kvm *kvm) | |||
137 | { | 137 | { |
138 | kvmppc_free_vcpus(kvm); | 138 | kvmppc_free_vcpus(kvm); |
139 | kvm_free_physmem(kvm); | 139 | kvm_free_physmem(kvm); |
140 | cleanup_srcu_struct(&kvm->srcu); | ||
140 | kfree(kvm); | 141 | kfree(kvm); |
141 | } | 142 | } |
142 | 143 | ||
@@ -165,14 +166,24 @@ long kvm_arch_dev_ioctl(struct file *filp, | |||
165 | return -EINVAL; | 166 | return -EINVAL; |
166 | } | 167 | } |
167 | 168 | ||
168 | int kvm_arch_set_memory_region(struct kvm *kvm, | 169 | int kvm_arch_prepare_memory_region(struct kvm *kvm, |
169 | struct kvm_userspace_memory_region *mem, | 170 | struct kvm_memory_slot *memslot, |
170 | struct kvm_memory_slot old, | 171 | struct kvm_memory_slot old, |
171 | int user_alloc) | 172 | struct kvm_userspace_memory_region *mem, |
173 | int user_alloc) | ||
172 | { | 174 | { |
173 | return 0; | 175 | return 0; |
174 | } | 176 | } |
175 | 177 | ||
178 | void kvm_arch_commit_memory_region(struct kvm *kvm, | ||
179 | struct kvm_userspace_memory_region *mem, | ||
180 | struct kvm_memory_slot old, | ||
181 | int user_alloc) | ||
182 | { | ||
183 | return; | ||
184 | } | ||
185 | |||
186 | |||
176 | void kvm_arch_flush_shadow(struct kvm *kvm) | 187 | void kvm_arch_flush_shadow(struct kvm *kvm) |
177 | { | 188 | { |
178 | } | 189 | } |
@@ -260,34 +271,35 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, | |||
260 | static void kvmppc_complete_dcr_load(struct kvm_vcpu *vcpu, | 271 | static void kvmppc_complete_dcr_load(struct kvm_vcpu *vcpu, |
261 | struct kvm_run *run) | 272 | struct kvm_run *run) |
262 | { | 273 | { |
263 | ulong *gpr = &vcpu->arch.gpr[vcpu->arch.io_gpr]; | 274 | kvmppc_set_gpr(vcpu, vcpu->arch.io_gpr, run->dcr.data); |
264 | *gpr = run->dcr.data; | ||
265 | } | 275 | } |
266 | 276 | ||
267 | static void kvmppc_complete_mmio_load(struct kvm_vcpu *vcpu, | 277 | static void kvmppc_complete_mmio_load(struct kvm_vcpu *vcpu, |
268 | struct kvm_run *run) | 278 | struct kvm_run *run) |
269 | { | 279 | { |
270 | ulong *gpr = &vcpu->arch.gpr[vcpu->arch.io_gpr]; | 280 | ulong gpr; |
271 | 281 | ||
272 | if (run->mmio.len > sizeof(*gpr)) { | 282 | if (run->mmio.len > sizeof(gpr)) { |
273 | printk(KERN_ERR "bad MMIO length: %d\n", run->mmio.len); | 283 | printk(KERN_ERR "bad MMIO length: %d\n", run->mmio.len); |
274 | return; | 284 | return; |
275 | } | 285 | } |
276 | 286 | ||
277 | if (vcpu->arch.mmio_is_bigendian) { | 287 | if (vcpu->arch.mmio_is_bigendian) { |
278 | switch (run->mmio.len) { | 288 | switch (run->mmio.len) { |
279 | case 4: *gpr = *(u32 *)run->mmio.data; break; | 289 | case 4: gpr = *(u32 *)run->mmio.data; break; |
280 | case 2: *gpr = *(u16 *)run->mmio.data; break; | 290 | case 2: gpr = *(u16 *)run->mmio.data; break; |
281 | case 1: *gpr = *(u8 *)run->mmio.data; break; | 291 | case 1: gpr = *(u8 *)run->mmio.data; break; |
282 | } | 292 | } |
283 | } else { | 293 | } else { |
284 | /* Convert BE data from userland back to LE. */ | 294 | /* Convert BE data from userland back to LE. */ |
285 | switch (run->mmio.len) { | 295 | switch (run->mmio.len) { |
286 | case 4: *gpr = ld_le32((u32 *)run->mmio.data); break; | 296 | case 4: gpr = ld_le32((u32 *)run->mmio.data); break; |
287 | case 2: *gpr = ld_le16((u16 *)run->mmio.data); break; | 297 | case 2: gpr = ld_le16((u16 *)run->mmio.data); break; |
288 | case 1: *gpr = *(u8 *)run->mmio.data; break; | 298 | case 1: gpr = *(u8 *)run->mmio.data; break; |
289 | } | 299 | } |
290 | } | 300 | } |
301 | |||
302 | kvmppc_set_gpr(vcpu, vcpu->arch.io_gpr, gpr); | ||
291 | } | 303 | } |
292 | 304 | ||
293 | int kvmppc_handle_load(struct kvm_run *run, struct kvm_vcpu *vcpu, | 305 | int kvmppc_handle_load(struct kvm_run *run, struct kvm_vcpu *vcpu, |