diff options
author | Radim Krčmář <rkrcmar@redhat.com> | 2017-05-15 08:38:56 -0400 |
---|---|---|
committer | Radim Krčmář <rkrcmar@redhat.com> | 2017-05-15 08:38:56 -0400 |
commit | 65acb891aaeb9294ebd06beb6138278b2331fec0 (patch) | |
tree | 84cf1ec5936284393312e9a5d76c3c8b6b028aca | |
parent | 2ea659a9ef488125eb46da6eb571de5eae5c43f6 (diff) | |
parent | 76d837a4c0f905f98088877d780169d7a14a6b29 (diff) |
Merge branch 'kvm-ppc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
- fix build failures with PR KVM configurations
- fix a host crash that can occur on POWER9 with radix guests
-rw-r--r-- | arch/powerpc/kvm/Kconfig | 2 | ||||
-rw-r--r-- | arch/powerpc/kvm/Makefile | 4 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_64_vio_hv.c | 13 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_hv_builtin.c | 9 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_pr_papr.c | 70 | ||||
-rw-r--r-- | arch/powerpc/kvm/powerpc.c | 4 |
6 files changed, 80 insertions, 22 deletions
diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig index 24de532c1736..0c52cb5d43f5 100644 --- a/arch/powerpc/kvm/Kconfig +++ b/arch/powerpc/kvm/Kconfig | |||
@@ -67,7 +67,7 @@ config KVM_BOOK3S_64 | |||
67 | select KVM_BOOK3S_64_HANDLER | 67 | select KVM_BOOK3S_64_HANDLER |
68 | select KVM | 68 | select KVM |
69 | select KVM_BOOK3S_PR_POSSIBLE if !KVM_BOOK3S_HV_POSSIBLE | 69 | select KVM_BOOK3S_PR_POSSIBLE if !KVM_BOOK3S_HV_POSSIBLE |
70 | select SPAPR_TCE_IOMMU if IOMMU_SUPPORT | 70 | select SPAPR_TCE_IOMMU if IOMMU_SUPPORT && (PPC_SERIES || PPC_POWERNV) |
71 | ---help--- | 71 | ---help--- |
72 | Support running unmodified book3s_64 and book3s_32 guest kernels | 72 | Support running unmodified book3s_64 and book3s_32 guest kernels |
73 | in virtual machines on book3s_64 host processors. | 73 | in virtual machines on book3s_64 host processors. |
diff --git a/arch/powerpc/kvm/Makefile b/arch/powerpc/kvm/Makefile index d91a2604c496..381a6ec0ff3b 100644 --- a/arch/powerpc/kvm/Makefile +++ b/arch/powerpc/kvm/Makefile | |||
@@ -46,7 +46,7 @@ kvm-e500mc-objs := \ | |||
46 | e500_emulate.o | 46 | e500_emulate.o |
47 | kvm-objs-$(CONFIG_KVM_E500MC) := $(kvm-e500mc-objs) | 47 | kvm-objs-$(CONFIG_KVM_E500MC) := $(kvm-e500mc-objs) |
48 | 48 | ||
49 | kvm-book3s_64-builtin-objs-$(CONFIG_KVM_BOOK3S_64_HANDLER) := \ | 49 | kvm-book3s_64-builtin-objs-$(CONFIG_SPAPR_TCE_IOMMU) := \ |
50 | book3s_64_vio_hv.o | 50 | book3s_64_vio_hv.o |
51 | 51 | ||
52 | kvm-pr-y := \ | 52 | kvm-pr-y := \ |
@@ -90,11 +90,11 @@ kvm-book3s_64-objs-$(CONFIG_KVM_XICS) += \ | |||
90 | book3s_xics.o | 90 | book3s_xics.o |
91 | 91 | ||
92 | kvm-book3s_64-objs-$(CONFIG_KVM_XIVE) += book3s_xive.o | 92 | kvm-book3s_64-objs-$(CONFIG_KVM_XIVE) += book3s_xive.o |
93 | kvm-book3s_64-objs-$(CONFIG_SPAPR_TCE_IOMMU) += book3s_64_vio.o | ||
93 | 94 | ||
94 | kvm-book3s_64-module-objs := \ | 95 | kvm-book3s_64-module-objs := \ |
95 | $(common-objs-y) \ | 96 | $(common-objs-y) \ |
96 | book3s.o \ | 97 | book3s.o \ |
97 | book3s_64_vio.o \ | ||
98 | book3s_rtas.o \ | 98 | book3s_rtas.o \ |
99 | $(kvm-book3s_64-objs-y) | 99 | $(kvm-book3s_64-objs-y) |
100 | 100 | ||
diff --git a/arch/powerpc/kvm/book3s_64_vio_hv.c b/arch/powerpc/kvm/book3s_64_vio_hv.c index eda0a8f6fae8..3adfd2f5301c 100644 --- a/arch/powerpc/kvm/book3s_64_vio_hv.c +++ b/arch/powerpc/kvm/book3s_64_vio_hv.c | |||
@@ -301,6 +301,10 @@ long kvmppc_rm_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn, | |||
301 | /* udbg_printf("H_PUT_TCE(): liobn=0x%lx ioba=0x%lx, tce=0x%lx\n", */ | 301 | /* udbg_printf("H_PUT_TCE(): liobn=0x%lx ioba=0x%lx, tce=0x%lx\n", */ |
302 | /* liobn, ioba, tce); */ | 302 | /* liobn, ioba, tce); */ |
303 | 303 | ||
304 | /* For radix, we might be in virtual mode, so punt */ | ||
305 | if (kvm_is_radix(vcpu->kvm)) | ||
306 | return H_TOO_HARD; | ||
307 | |||
304 | stt = kvmppc_find_table(vcpu->kvm, liobn); | 308 | stt = kvmppc_find_table(vcpu->kvm, liobn); |
305 | if (!stt) | 309 | if (!stt) |
306 | return H_TOO_HARD; | 310 | return H_TOO_HARD; |
@@ -381,6 +385,10 @@ long kvmppc_rm_h_put_tce_indirect(struct kvm_vcpu *vcpu, | |||
381 | bool prereg = false; | 385 | bool prereg = false; |
382 | struct kvmppc_spapr_tce_iommu_table *stit; | 386 | struct kvmppc_spapr_tce_iommu_table *stit; |
383 | 387 | ||
388 | /* For radix, we might be in virtual mode, so punt */ | ||
389 | if (kvm_is_radix(vcpu->kvm)) | ||
390 | return H_TOO_HARD; | ||
391 | |||
384 | stt = kvmppc_find_table(vcpu->kvm, liobn); | 392 | stt = kvmppc_find_table(vcpu->kvm, liobn); |
385 | if (!stt) | 393 | if (!stt) |
386 | return H_TOO_HARD; | 394 | return H_TOO_HARD; |
@@ -491,6 +499,10 @@ long kvmppc_rm_h_stuff_tce(struct kvm_vcpu *vcpu, | |||
491 | long i, ret; | 499 | long i, ret; |
492 | struct kvmppc_spapr_tce_iommu_table *stit; | 500 | struct kvmppc_spapr_tce_iommu_table *stit; |
493 | 501 | ||
502 | /* For radix, we might be in virtual mode, so punt */ | ||
503 | if (kvm_is_radix(vcpu->kvm)) | ||
504 | return H_TOO_HARD; | ||
505 | |||
494 | stt = kvmppc_find_table(vcpu->kvm, liobn); | 506 | stt = kvmppc_find_table(vcpu->kvm, liobn); |
495 | if (!stt) | 507 | if (!stt) |
496 | return H_TOO_HARD; | 508 | return H_TOO_HARD; |
@@ -527,6 +539,7 @@ long kvmppc_rm_h_stuff_tce(struct kvm_vcpu *vcpu, | |||
527 | return H_SUCCESS; | 539 | return H_SUCCESS; |
528 | } | 540 | } |
529 | 541 | ||
542 | /* This can be called in either virtual mode or real mode */ | ||
530 | long kvmppc_h_get_tce(struct kvm_vcpu *vcpu, unsigned long liobn, | 543 | long kvmppc_h_get_tce(struct kvm_vcpu *vcpu, unsigned long liobn, |
531 | unsigned long ioba) | 544 | unsigned long ioba) |
532 | { | 545 | { |
diff --git a/arch/powerpc/kvm/book3s_hv_builtin.c b/arch/powerpc/kvm/book3s_hv_builtin.c index 88a65923c649..ee4c2558c305 100644 --- a/arch/powerpc/kvm/book3s_hv_builtin.c +++ b/arch/powerpc/kvm/book3s_hv_builtin.c | |||
@@ -207,7 +207,14 @@ EXPORT_SYMBOL_GPL(kvmppc_hwrng_present); | |||
207 | 207 | ||
208 | long kvmppc_h_random(struct kvm_vcpu *vcpu) | 208 | long kvmppc_h_random(struct kvm_vcpu *vcpu) |
209 | { | 209 | { |
210 | if (powernv_get_random_real_mode(&vcpu->arch.gpr[4])) | 210 | int r; |
211 | |||
212 | /* Only need to do the expensive mfmsr() on radix */ | ||
213 | if (kvm_is_radix(vcpu->kvm) && (mfmsr() & MSR_IR)) | ||
214 | r = powernv_get_random_long(&vcpu->arch.gpr[4]); | ||
215 | else | ||
216 | r = powernv_get_random_real_mode(&vcpu->arch.gpr[4]); | ||
217 | if (r) | ||
211 | return H_SUCCESS; | 218 | return H_SUCCESS; |
212 | 219 | ||
213 | return H_HARDWARE; | 220 | return H_HARDWARE; |
diff --git a/arch/powerpc/kvm/book3s_pr_papr.c b/arch/powerpc/kvm/book3s_pr_papr.c index bcbeeb62dd13..8a4205fa774f 100644 --- a/arch/powerpc/kvm/book3s_pr_papr.c +++ b/arch/powerpc/kvm/book3s_pr_papr.c | |||
@@ -50,7 +50,9 @@ static int kvmppc_h_pr_enter(struct kvm_vcpu *vcpu) | |||
50 | pteg_addr = get_pteg_addr(vcpu, pte_index); | 50 | pteg_addr = get_pteg_addr(vcpu, pte_index); |
51 | 51 | ||
52 | mutex_lock(&vcpu->kvm->arch.hpt_mutex); | 52 | mutex_lock(&vcpu->kvm->arch.hpt_mutex); |
53 | copy_from_user(pteg, (void __user *)pteg_addr, sizeof(pteg)); | 53 | ret = H_FUNCTION; |
54 | if (copy_from_user(pteg, (void __user *)pteg_addr, sizeof(pteg))) | ||
55 | goto done; | ||
54 | hpte = pteg; | 56 | hpte = pteg; |
55 | 57 | ||
56 | ret = H_PTEG_FULL; | 58 | ret = H_PTEG_FULL; |
@@ -71,7 +73,9 @@ static int kvmppc_h_pr_enter(struct kvm_vcpu *vcpu) | |||
71 | hpte[0] = cpu_to_be64(kvmppc_get_gpr(vcpu, 6)); | 73 | hpte[0] = cpu_to_be64(kvmppc_get_gpr(vcpu, 6)); |
72 | hpte[1] = cpu_to_be64(kvmppc_get_gpr(vcpu, 7)); | 74 | hpte[1] = cpu_to_be64(kvmppc_get_gpr(vcpu, 7)); |
73 | pteg_addr += i * HPTE_SIZE; | 75 | pteg_addr += i * HPTE_SIZE; |
74 | copy_to_user((void __user *)pteg_addr, hpte, HPTE_SIZE); | 76 | ret = H_FUNCTION; |
77 | if (copy_to_user((void __user *)pteg_addr, hpte, HPTE_SIZE)) | ||
78 | goto done; | ||
75 | kvmppc_set_gpr(vcpu, 4, pte_index | i); | 79 | kvmppc_set_gpr(vcpu, 4, pte_index | i); |
76 | ret = H_SUCCESS; | 80 | ret = H_SUCCESS; |
77 | 81 | ||
@@ -93,7 +97,9 @@ static int kvmppc_h_pr_remove(struct kvm_vcpu *vcpu) | |||
93 | 97 | ||
94 | pteg = get_pteg_addr(vcpu, pte_index); | 98 | pteg = get_pteg_addr(vcpu, pte_index); |
95 | mutex_lock(&vcpu->kvm->arch.hpt_mutex); | 99 | mutex_lock(&vcpu->kvm->arch.hpt_mutex); |
96 | copy_from_user(pte, (void __user *)pteg, sizeof(pte)); | 100 | ret = H_FUNCTION; |
101 | if (copy_from_user(pte, (void __user *)pteg, sizeof(pte))) | ||
102 | goto done; | ||
97 | pte[0] = be64_to_cpu((__force __be64)pte[0]); | 103 | pte[0] = be64_to_cpu((__force __be64)pte[0]); |
98 | pte[1] = be64_to_cpu((__force __be64)pte[1]); | 104 | pte[1] = be64_to_cpu((__force __be64)pte[1]); |
99 | 105 | ||
@@ -103,7 +109,9 @@ static int kvmppc_h_pr_remove(struct kvm_vcpu *vcpu) | |||
103 | ((flags & H_ANDCOND) && (pte[0] & avpn) != 0)) | 109 | ((flags & H_ANDCOND) && (pte[0] & avpn) != 0)) |
104 | goto done; | 110 | goto done; |
105 | 111 | ||
106 | copy_to_user((void __user *)pteg, &v, sizeof(v)); | 112 | ret = H_FUNCTION; |
113 | if (copy_to_user((void __user *)pteg, &v, sizeof(v))) | ||
114 | goto done; | ||
107 | 115 | ||
108 | rb = compute_tlbie_rb(pte[0], pte[1], pte_index); | 116 | rb = compute_tlbie_rb(pte[0], pte[1], pte_index); |
109 | vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false); | 117 | vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false); |
@@ -171,7 +179,10 @@ static int kvmppc_h_pr_bulk_remove(struct kvm_vcpu *vcpu) | |||
171 | } | 179 | } |
172 | 180 | ||
173 | pteg = get_pteg_addr(vcpu, tsh & H_BULK_REMOVE_PTEX); | 181 | pteg = get_pteg_addr(vcpu, tsh & H_BULK_REMOVE_PTEX); |
174 | copy_from_user(pte, (void __user *)pteg, sizeof(pte)); | 182 | if (copy_from_user(pte, (void __user *)pteg, sizeof(pte))) { |
183 | ret = H_FUNCTION; | ||
184 | break; | ||
185 | } | ||
175 | pte[0] = be64_to_cpu((__force __be64)pte[0]); | 186 | pte[0] = be64_to_cpu((__force __be64)pte[0]); |
176 | pte[1] = be64_to_cpu((__force __be64)pte[1]); | 187 | pte[1] = be64_to_cpu((__force __be64)pte[1]); |
177 | 188 | ||
@@ -184,7 +195,10 @@ static int kvmppc_h_pr_bulk_remove(struct kvm_vcpu *vcpu) | |||
184 | tsh |= H_BULK_REMOVE_NOT_FOUND; | 195 | tsh |= H_BULK_REMOVE_NOT_FOUND; |
185 | } else { | 196 | } else { |
186 | /* Splat the pteg in (userland) hpt */ | 197 | /* Splat the pteg in (userland) hpt */ |
187 | copy_to_user((void __user *)pteg, &v, sizeof(v)); | 198 | if (copy_to_user((void __user *)pteg, &v, sizeof(v))) { |
199 | ret = H_FUNCTION; | ||
200 | break; | ||
201 | } | ||
188 | 202 | ||
189 | rb = compute_tlbie_rb(pte[0], pte[1], | 203 | rb = compute_tlbie_rb(pte[0], pte[1], |
190 | tsh & H_BULK_REMOVE_PTEX); | 204 | tsh & H_BULK_REMOVE_PTEX); |
@@ -211,7 +225,9 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu) | |||
211 | 225 | ||
212 | pteg = get_pteg_addr(vcpu, pte_index); | 226 | pteg = get_pteg_addr(vcpu, pte_index); |
213 | mutex_lock(&vcpu->kvm->arch.hpt_mutex); | 227 | mutex_lock(&vcpu->kvm->arch.hpt_mutex); |
214 | copy_from_user(pte, (void __user *)pteg, sizeof(pte)); | 228 | ret = H_FUNCTION; |
229 | if (copy_from_user(pte, (void __user *)pteg, sizeof(pte))) | ||
230 | goto done; | ||
215 | pte[0] = be64_to_cpu((__force __be64)pte[0]); | 231 | pte[0] = be64_to_cpu((__force __be64)pte[0]); |
216 | pte[1] = be64_to_cpu((__force __be64)pte[1]); | 232 | pte[1] = be64_to_cpu((__force __be64)pte[1]); |
217 | 233 | ||
@@ -234,7 +250,9 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu) | |||
234 | vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false); | 250 | vcpu->arch.mmu.tlbie(vcpu, rb, rb & 1 ? true : false); |
235 | pte[0] = (__force u64)cpu_to_be64(pte[0]); | 251 | pte[0] = (__force u64)cpu_to_be64(pte[0]); |
236 | pte[1] = (__force u64)cpu_to_be64(pte[1]); | 252 | pte[1] = (__force u64)cpu_to_be64(pte[1]); |
237 | copy_to_user((void __user *)pteg, pte, sizeof(pte)); | 253 | ret = H_FUNCTION; |
254 | if (copy_to_user((void __user *)pteg, pte, sizeof(pte))) | ||
255 | goto done; | ||
238 | ret = H_SUCCESS; | 256 | ret = H_SUCCESS; |
239 | 257 | ||
240 | done: | 258 | done: |
@@ -244,36 +262,37 @@ static int kvmppc_h_pr_protect(struct kvm_vcpu *vcpu) | |||
244 | return EMULATE_DONE; | 262 | return EMULATE_DONE; |
245 | } | 263 | } |
246 | 264 | ||
247 | static int kvmppc_h_pr_put_tce(struct kvm_vcpu *vcpu) | 265 | static int kvmppc_h_pr_logical_ci_load(struct kvm_vcpu *vcpu) |
248 | { | 266 | { |
249 | unsigned long liobn = kvmppc_get_gpr(vcpu, 4); | ||
250 | unsigned long ioba = kvmppc_get_gpr(vcpu, 5); | ||
251 | unsigned long tce = kvmppc_get_gpr(vcpu, 6); | ||
252 | long rc; | 267 | long rc; |
253 | 268 | ||
254 | rc = kvmppc_h_put_tce(vcpu, liobn, ioba, tce); | 269 | rc = kvmppc_h_logical_ci_load(vcpu); |
255 | if (rc == H_TOO_HARD) | 270 | if (rc == H_TOO_HARD) |
256 | return EMULATE_FAIL; | 271 | return EMULATE_FAIL; |
257 | kvmppc_set_gpr(vcpu, 3, rc); | 272 | kvmppc_set_gpr(vcpu, 3, rc); |
258 | return EMULATE_DONE; | 273 | return EMULATE_DONE; |
259 | } | 274 | } |
260 | 275 | ||
261 | static int kvmppc_h_pr_logical_ci_load(struct kvm_vcpu *vcpu) | 276 | static int kvmppc_h_pr_logical_ci_store(struct kvm_vcpu *vcpu) |
262 | { | 277 | { |
263 | long rc; | 278 | long rc; |
264 | 279 | ||
265 | rc = kvmppc_h_logical_ci_load(vcpu); | 280 | rc = kvmppc_h_logical_ci_store(vcpu); |
266 | if (rc == H_TOO_HARD) | 281 | if (rc == H_TOO_HARD) |
267 | return EMULATE_FAIL; | 282 | return EMULATE_FAIL; |
268 | kvmppc_set_gpr(vcpu, 3, rc); | 283 | kvmppc_set_gpr(vcpu, 3, rc); |
269 | return EMULATE_DONE; | 284 | return EMULATE_DONE; |
270 | } | 285 | } |
271 | 286 | ||
272 | static int kvmppc_h_pr_logical_ci_store(struct kvm_vcpu *vcpu) | 287 | #ifdef CONFIG_SPAPR_TCE_IOMMU |
288 | static int kvmppc_h_pr_put_tce(struct kvm_vcpu *vcpu) | ||
273 | { | 289 | { |
290 | unsigned long liobn = kvmppc_get_gpr(vcpu, 4); | ||
291 | unsigned long ioba = kvmppc_get_gpr(vcpu, 5); | ||
292 | unsigned long tce = kvmppc_get_gpr(vcpu, 6); | ||
274 | long rc; | 293 | long rc; |
275 | 294 | ||
276 | rc = kvmppc_h_logical_ci_store(vcpu); | 295 | rc = kvmppc_h_put_tce(vcpu, liobn, ioba, tce); |
277 | if (rc == H_TOO_HARD) | 296 | if (rc == H_TOO_HARD) |
278 | return EMULATE_FAIL; | 297 | return EMULATE_FAIL; |
279 | kvmppc_set_gpr(vcpu, 3, rc); | 298 | kvmppc_set_gpr(vcpu, 3, rc); |
@@ -311,6 +330,23 @@ static int kvmppc_h_pr_stuff_tce(struct kvm_vcpu *vcpu) | |||
311 | return EMULATE_DONE; | 330 | return EMULATE_DONE; |
312 | } | 331 | } |
313 | 332 | ||
333 | #else /* CONFIG_SPAPR_TCE_IOMMU */ | ||
334 | static int kvmppc_h_pr_put_tce(struct kvm_vcpu *vcpu) | ||
335 | { | ||
336 | return EMULATE_FAIL; | ||
337 | } | ||
338 | |||
339 | static int kvmppc_h_pr_put_tce_indirect(struct kvm_vcpu *vcpu) | ||
340 | { | ||
341 | return EMULATE_FAIL; | ||
342 | } | ||
343 | |||
344 | static int kvmppc_h_pr_stuff_tce(struct kvm_vcpu *vcpu) | ||
345 | { | ||
346 | return EMULATE_FAIL; | ||
347 | } | ||
348 | #endif /* CONFIG_SPAPR_TCE_IOMMU */ | ||
349 | |||
314 | static int kvmppc_h_pr_xics_hcall(struct kvm_vcpu *vcpu, u32 cmd) | 350 | static int kvmppc_h_pr_xics_hcall(struct kvm_vcpu *vcpu, u32 cmd) |
315 | { | 351 | { |
316 | long rc = kvmppc_xics_hcall(vcpu, cmd); | 352 | long rc = kvmppc_xics_hcall(vcpu, cmd); |
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index f7cf2cd564ef..7f71ab5fcad1 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c | |||
@@ -1749,7 +1749,7 @@ long kvm_arch_vm_ioctl(struct file *filp, | |||
1749 | r = kvm_vm_ioctl_enable_cap(kvm, &cap); | 1749 | r = kvm_vm_ioctl_enable_cap(kvm, &cap); |
1750 | break; | 1750 | break; |
1751 | } | 1751 | } |
1752 | #ifdef CONFIG_PPC_BOOK3S_64 | 1752 | #ifdef CONFIG_SPAPR_TCE_IOMMU |
1753 | case KVM_CREATE_SPAPR_TCE_64: { | 1753 | case KVM_CREATE_SPAPR_TCE_64: { |
1754 | struct kvm_create_spapr_tce_64 create_tce_64; | 1754 | struct kvm_create_spapr_tce_64 create_tce_64; |
1755 | 1755 | ||
@@ -1780,6 +1780,8 @@ long kvm_arch_vm_ioctl(struct file *filp, | |||
1780 | r = kvm_vm_ioctl_create_spapr_tce(kvm, &create_tce_64); | 1780 | r = kvm_vm_ioctl_create_spapr_tce(kvm, &create_tce_64); |
1781 | goto out; | 1781 | goto out; |
1782 | } | 1782 | } |
1783 | #endif | ||
1784 | #ifdef CONFIG_PPC_BOOK3S_64 | ||
1783 | case KVM_PPC_GET_SMMU_INFO: { | 1785 | case KVM_PPC_GET_SMMU_INFO: { |
1784 | struct kvm_ppc_smmu_info info; | 1786 | struct kvm_ppc_smmu_info info; |
1785 | struct kvm *kvm = filp->private_data; | 1787 | struct kvm *kvm = filp->private_data; |