diff options
author | Alexey Kardashevskiy <aik@ozlabs.ru> | 2017-03-22 00:21:53 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@ozlabs.org> | 2017-04-19 21:39:12 -0400 |
commit | 503bfcbe18576a79be0bc5173b23b530845e704a (patch) | |
tree | ff93a4bed3d1317168d72734b1db9ceb413c0ec6 | |
parent | e91aa8e6ecd5e8193df6dec109f9d5deda5c7317 (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.h | 2 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_64_vio.c | 7 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_64_vio_hv.c | 13 |
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); | |||
177 | extern long kvm_vm_ioctl_create_spapr_tce(struct kvm *kvm, | 177 | extern 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); |
179 | extern struct kvmppc_spapr_tce_table *kvmppc_find_table( | 179 | extern struct kvmppc_spapr_tce_table *kvmppc_find_table( |
180 | struct kvm_vcpu *vcpu, unsigned long liobn); | 180 | struct kvm *kvm, unsigned long liobn); |
181 | extern long kvmppc_ioba_validate(struct kvmppc_spapr_tce_table *stt, | 181 | extern long kvmppc_ioba_validate(struct kvmppc_spapr_tce_table *stt, |
182 | unsigned long ioba, unsigned long npages); | 182 | unsigned long ioba, unsigned long npages); |
183 | extern long kvmppc_tce_validate(struct kvmppc_spapr_tce_table *tt, | 183 | extern 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: | |||
214 | long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn, | 214 | long 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 | */ |
51 | struct kvmppc_spapr_tce_table *kvmppc_find_table(struct kvm_vcpu *vcpu, | 51 | struct 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); | |||
182 | long kvmppc_rm_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn, | 181 | long 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, | |||
322 | long kvmppc_h_get_tce(struct kvm_vcpu *vcpu, unsigned long liobn, | 322 | long 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 | ||