aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Kardashevskiy <aik@ozlabs.ru>2017-03-22 00:21:53 -0400
committerPaul Mackerras <paulus@ozlabs.org>2017-04-19 21:39:12 -0400
commit503bfcbe18576a79be0bc5173b23b530845e704a (patch)
treeff93a4bed3d1317168d72734b1db9ceb413c0ec6
parente91aa8e6ecd5e8193df6dec109f9d5deda5c7317 (diff)
KVM: PPC: Pass kvm* to kvmppc_find_table()
The guest view TCE tables are per KVM anyway (not per VCPU) so pass kvm* there. This will be used in the following patches where we will be attaching VFIO containers to LIOBNs via ioctl() to KVM (rather than to VCPU). Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
-rw-r--r--arch/powerpc/include/asm/kvm_ppc.h2
-rw-r--r--arch/powerpc/kvm/book3s_64_vio.c7
-rw-r--r--arch/powerpc/kvm/book3s_64_vio_hv.c13
3 files changed, 12 insertions, 10 deletions
diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
index bbecec4e753a..2e66800a870b 100644
--- a/arch/powerpc/include/asm/kvm_ppc.h
+++ b/arch/powerpc/include/asm/kvm_ppc.h
@@ -177,7 +177,7 @@ extern int kvmppc_pseries_do_hcall(struct kvm_vcpu *vcpu);
177extern long kvm_vm_ioctl_create_spapr_tce(struct kvm *kvm, 177extern long kvm_vm_ioctl_create_spapr_tce(struct kvm *kvm,
178 struct kvm_create_spapr_tce_64 *args); 178 struct kvm_create_spapr_tce_64 *args);
179extern struct kvmppc_spapr_tce_table *kvmppc_find_table( 179extern struct kvmppc_spapr_tce_table *kvmppc_find_table(
180 struct kvm_vcpu *vcpu, unsigned long liobn); 180 struct kvm *kvm, unsigned long liobn);
181extern long kvmppc_ioba_validate(struct kvmppc_spapr_tce_table *stt, 181extern long kvmppc_ioba_validate(struct kvmppc_spapr_tce_table *stt,
182 unsigned long ioba, unsigned long npages); 182 unsigned long ioba, unsigned long npages);
183extern long kvmppc_tce_validate(struct kvmppc_spapr_tce_table *tt, 183extern long kvmppc_tce_validate(struct kvmppc_spapr_tce_table *tt,
diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c
index ab20a47a8821..d507d94e020c 100644
--- a/arch/powerpc/kvm/book3s_64_vio.c
+++ b/arch/powerpc/kvm/book3s_64_vio.c
@@ -214,12 +214,13 @@ fail:
214long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn, 214long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
215 unsigned long ioba, unsigned long tce) 215 unsigned long ioba, unsigned long tce)
216{ 216{
217 struct kvmppc_spapr_tce_table *stt = kvmppc_find_table(vcpu, liobn); 217 struct kvmppc_spapr_tce_table *stt;
218 long ret; 218 long ret;
219 219
220 /* udbg_printf("H_PUT_TCE(): liobn=0x%lx ioba=0x%lx, tce=0x%lx\n", */ 220 /* udbg_printf("H_PUT_TCE(): liobn=0x%lx ioba=0x%lx, tce=0x%lx\n", */
221 /* liobn, ioba, tce); */ 221 /* liobn, ioba, tce); */
222 222
223 stt = kvmppc_find_table(vcpu->kvm, liobn);
223 if (!stt) 224 if (!stt)
224 return H_TOO_HARD; 225 return H_TOO_HARD;
225 226
@@ -247,7 +248,7 @@ long kvmppc_h_put_tce_indirect(struct kvm_vcpu *vcpu,
247 u64 __user *tces; 248 u64 __user *tces;
248 u64 tce; 249 u64 tce;
249 250
250 stt = kvmppc_find_table(vcpu, liobn); 251 stt = kvmppc_find_table(vcpu->kvm, liobn);
251 if (!stt) 252 if (!stt)
252 return H_TOO_HARD; 253 return H_TOO_HARD;
253 254
@@ -301,7 +302,7 @@ long kvmppc_h_stuff_tce(struct kvm_vcpu *vcpu,
301 struct kvmppc_spapr_tce_table *stt; 302 struct kvmppc_spapr_tce_table *stt;
302 long i, ret; 303 long i, ret;
303 304
304 stt = kvmppc_find_table(vcpu, liobn); 305 stt = kvmppc_find_table(vcpu->kvm, liobn);
305 if (!stt) 306 if (!stt)
306 return H_TOO_HARD; 307 return H_TOO_HARD;
307 308
diff --git a/arch/powerpc/kvm/book3s_64_vio_hv.c b/arch/powerpc/kvm/book3s_64_vio_hv.c
index e4c4ea973e57..918af76ab2b6 100644
--- a/arch/powerpc/kvm/book3s_64_vio_hv.c
+++ b/arch/powerpc/kvm/book3s_64_vio_hv.c
@@ -48,10 +48,9 @@
48 * WARNING: This will be called in real or virtual mode on HV KVM and virtual 48 * WARNING: This will be called in real or virtual mode on HV KVM and virtual
49 * mode on PR KVM 49 * mode on PR KVM
50 */ 50 */
51struct kvmppc_spapr_tce_table *kvmppc_find_table(struct kvm_vcpu *vcpu, 51struct kvmppc_spapr_tce_table *kvmppc_find_table(struct kvm *kvm,
52 unsigned long liobn) 52 unsigned long liobn)
53{ 53{
54 struct kvm *kvm = vcpu->kvm;
55 struct kvmppc_spapr_tce_table *stt; 54 struct kvmppc_spapr_tce_table *stt;
56 55
57 list_for_each_entry_lockless(stt, &kvm->arch.spapr_tce_tables, list) 56 list_for_each_entry_lockless(stt, &kvm->arch.spapr_tce_tables, list)
@@ -182,12 +181,13 @@ EXPORT_SYMBOL_GPL(kvmppc_gpa_to_ua);
182long kvmppc_rm_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn, 181long kvmppc_rm_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
183 unsigned long ioba, unsigned long tce) 182 unsigned long ioba, unsigned long tce)
184{ 183{
185 struct kvmppc_spapr_tce_table *stt = kvmppc_find_table(vcpu, liobn); 184 struct kvmppc_spapr_tce_table *stt;
186 long ret; 185 long ret;
187 186
188 /* udbg_printf("H_PUT_TCE(): liobn=0x%lx ioba=0x%lx, tce=0x%lx\n", */ 187 /* udbg_printf("H_PUT_TCE(): liobn=0x%lx ioba=0x%lx, tce=0x%lx\n", */
189 /* liobn, ioba, tce); */ 188 /* liobn, ioba, tce); */
190 189
190 stt = kvmppc_find_table(vcpu->kvm, liobn);
191 if (!stt) 191 if (!stt)
192 return H_TOO_HARD; 192 return H_TOO_HARD;
193 193
@@ -240,7 +240,7 @@ long kvmppc_rm_h_put_tce_indirect(struct kvm_vcpu *vcpu,
240 unsigned long tces, entry, ua = 0; 240 unsigned long tces, entry, ua = 0;
241 unsigned long *rmap = NULL; 241 unsigned long *rmap = NULL;
242 242
243 stt = kvmppc_find_table(vcpu, liobn); 243 stt = kvmppc_find_table(vcpu->kvm, liobn);
244 if (!stt) 244 if (!stt)
245 return H_TOO_HARD; 245 return H_TOO_HARD;
246 246
@@ -301,7 +301,7 @@ long kvmppc_rm_h_stuff_tce(struct kvm_vcpu *vcpu,
301 struct kvmppc_spapr_tce_table *stt; 301 struct kvmppc_spapr_tce_table *stt;
302 long i, ret; 302 long i, ret;
303 303
304 stt = kvmppc_find_table(vcpu, liobn); 304 stt = kvmppc_find_table(vcpu->kvm, liobn);
305 if (!stt) 305 if (!stt)
306 return H_TOO_HARD; 306 return H_TOO_HARD;
307 307
@@ -322,12 +322,13 @@ long kvmppc_rm_h_stuff_tce(struct kvm_vcpu *vcpu,
322long kvmppc_h_get_tce(struct kvm_vcpu *vcpu, unsigned long liobn, 322long kvmppc_h_get_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
323 unsigned long ioba) 323 unsigned long ioba)
324{ 324{
325 struct kvmppc_spapr_tce_table *stt = kvmppc_find_table(vcpu, liobn); 325 struct kvmppc_spapr_tce_table *stt;
326 long ret; 326 long ret;
327 unsigned long idx; 327 unsigned long idx;
328 struct page *page; 328 struct page *page;
329 u64 *tbl; 329 u64 *tbl;
330 330
331 stt = kvmppc_find_table(vcpu->kvm, liobn);
331 if (!stt) 332 if (!stt)
332 return H_TOO_HARD; 333 return H_TOO_HARD;
333 334