···18181919extern int kvmppc_mmu_init_pr(struct kvm_vcpu *vcpu);2020extern void kvmppc_mmu_destroy_pr(struct kvm_vcpu *vcpu);2121-extern int kvmppc_core_emulate_op_pr(struct kvm_run *run, struct kvm_vcpu *vcpu,2121+extern int kvmppc_core_emulate_op_pr(struct kvm_vcpu *vcpu,2222 unsigned int inst, int *advance);2323extern int kvmppc_core_emulate_mtspr_pr(struct kvm_vcpu *vcpu,2424 int sprn, ulong spr_val);
+6-6
arch/powerpc/kvm/book3s_64_mmu_hv.c
···413413 return (instr & mask) != 0;414414}415415416416-int kvmppc_hv_emulate_mmio(struct kvm_run *run, struct kvm_vcpu *vcpu,416416+int kvmppc_hv_emulate_mmio(struct kvm_vcpu *vcpu,417417 unsigned long gpa, gva_t ea, int is_store)418418{419419 u32 last_inst;···473473474474 vcpu->arch.paddr_accessed = gpa;475475 vcpu->arch.vaddr_accessed = ea;476476- return kvmppc_emulate_mmio(run, vcpu);476476+ return kvmppc_emulate_mmio(vcpu);477477}478478479479-int kvmppc_book3s_hv_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu,479479+int kvmppc_book3s_hv_page_fault(struct kvm_vcpu *vcpu,480480 unsigned long ea, unsigned long dsisr)481481{482482 struct kvm *kvm = vcpu->kvm;···499499 pte_t pte, *ptep;500500501501 if (kvm_is_radix(kvm))502502- return kvmppc_book3s_radix_page_fault(run, vcpu, ea, dsisr);502502+ return kvmppc_book3s_radix_page_fault(vcpu, ea, dsisr);503503504504 /*505505 * Real-mode code has already searched the HPT and found the···519519 gpa_base = r & HPTE_R_RPN & ~(psize - 1);520520 gfn_base = gpa_base >> PAGE_SHIFT;521521 gpa = gpa_base | (ea & (psize - 1));522522- return kvmppc_hv_emulate_mmio(run, vcpu, gpa, ea,522522+ return kvmppc_hv_emulate_mmio(vcpu, gpa, ea,523523 dsisr & DSISR_ISSTORE);524524 }525525 }···555555556556 /* No memslot means it's an emulated MMIO region */557557 if (!memslot || (memslot->flags & KVM_MEMSLOT_INVALID))558558- return kvmppc_hv_emulate_mmio(run, vcpu, gpa, ea,558558+ return kvmppc_hv_emulate_mmio(vcpu, gpa, ea,559559 dsisr & DSISR_ISSTORE);560560561561 /*
+28-8
arch/powerpc/kvm/book3s_64_mmu_radix.c
···353353354354static pte_t *kvmppc_pte_alloc(void)355355{356356- return kmem_cache_alloc(kvm_pte_cache, GFP_KERNEL);356356+ pte_t *pte;357357+358358+ pte = kmem_cache_alloc(kvm_pte_cache, GFP_KERNEL);359359+ /* pmd_populate() will only reference _pa(pte). */360360+ kmemleak_ignore(pte);361361+362362+ return pte;357363}358364359365static void kvmppc_pte_free(pte_t *ptep)···369363370364static pmd_t *kvmppc_pmd_alloc(void)371365{372372- return kmem_cache_alloc(kvm_pmd_cache, GFP_KERNEL);366366+ pmd_t *pmd;367367+368368+ pmd = kmem_cache_alloc(kvm_pmd_cache, GFP_KERNEL);369369+ /* pud_populate() will only reference _pa(pmd). */370370+ kmemleak_ignore(pmd);371371+372372+ return pmd;373373}374374375375static void kvmppc_pmd_free(pmd_t *pmdp)···429417 * Callers are responsible for flushing the PWC.430418 *431419 * When page tables are being unmapped/freed as part of page fault path432432- * (full == false), ptes are not expected. There is code to unmap them433433- * and emit a warning if encountered, but there may already be data434434- * corruption due to the unexpected mappings.420420+ * (full == false), valid ptes are generally not expected; however, there421421+ * is one situation where they arise, which is when dirty page logging is422422+ * turned off for a memslot while the VM is running. The new memslot423423+ * becomes visible to page faults before the memslot commit function424424+ * gets to flush the memslot, which can lead to a 2MB page mapping being425425+ * installed for a guest physical address where there are already 64kB426426+ * (or 4kB) mappings (of sub-pages of the same 2MB page).435427 */436428static void kvmppc_unmap_free_pte(struct kvm *kvm, pte_t *pte, bool full,437429 unsigned int lpid)···449433 for (it = 0; it < PTRS_PER_PTE; ++it, ++p) {450434 if (pte_val(*p) == 0)451435 continue;452452- WARN_ON_ONCE(1);453436 kvmppc_unmap_pte(kvm, p,454437 pte_pfn(*p) << PAGE_SHIFT,455438 PAGE_SHIFT, NULL, lpid);···902887 return ret;903888}904889905905-int kvmppc_book3s_radix_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu,890890+int kvmppc_book3s_radix_page_fault(struct kvm_vcpu *vcpu,906891 unsigned long ea, unsigned long dsisr)907892{908893 struct kvm *kvm = vcpu->kvm;···948933 kvmppc_core_queue_data_storage(vcpu, ea, dsisr);949934 return RESUME_GUEST;950935 }951951- return kvmppc_hv_emulate_mmio(run, vcpu, gpa, ea, writing);936936+ return kvmppc_hv_emulate_mmio(vcpu, gpa, ea, writing);952937 }953938954939 if (memslot->flags & KVM_MEM_READONLY) {···11301115 kvm->arch.lpid);11311116 gpa += PAGE_SIZE;11321117 }11181118+ /*11191119+ * Increase the mmu notifier sequence number to prevent any page11201120+ * fault that read the memslot earlier from writing a PTE.11211121+ */11221122+ kvm->mmu_notifier_seq++;11331123 spin_unlock(&kvm->mmu_lock);11341124}11351125
+14-4
arch/powerpc/kvm/book3s_64_vio.c
···7373 struct kvmppc_spapr_tce_iommu_table *stit, *tmp;7474 struct iommu_table_group *table_group = NULL;75757676+ rcu_read_lock();7677 list_for_each_entry_rcu(stt, &kvm->arch.spapr_tce_tables, list) {77787879 table_group = iommu_group_get_iommudata(grp);···8887 kref_put(&stit->kref, kvm_spapr_tce_liobn_put);8988 }9089 }9090+ cond_resched_rcu();9191 }9292+ rcu_read_unlock();9293}93949495extern long kvm_spapr_tce_attach_iommu_group(struct kvm *kvm, int tablefd,···108105 if (!f.file)109106 return -EBADF;110107108108+ rcu_read_lock();111109 list_for_each_entry_rcu(stt, &kvm->arch.spapr_tce_tables, list) {112110 if (stt == f.file->private_data) {113111 found = true;114112 break;115113 }116114 }115115+ rcu_read_unlock();117116118117 fdput(f);119118···148143 if (!tbl)149144 return -EINVAL;150145146146+ rcu_read_lock();151147 list_for_each_entry_rcu(stit, &stt->iommu_tables, next) {152148 if (tbl != stit->tbl)153149 continue;···156150 if (!kref_get_unless_zero(&stit->kref)) {157151 /* stit is being destroyed */158152 iommu_tce_table_put(tbl);153153+ rcu_read_unlock();159154 return -ENOTTY;160155 }161156 /*162157 * The table is already known to this KVM, we just increased163158 * its KVM reference counter and can return.164159 */160160+ rcu_read_unlock();165161 return 0;166162 }163163+ rcu_read_unlock();167164168165 stit = kzalloc(sizeof(*stit), GFP_KERNEL);169166 if (!stit) {···374365 if (kvmppc_tce_to_ua(stt->kvm, tce, &ua))375366 return H_TOO_HARD;376367368368+ rcu_read_lock();377369 list_for_each_entry_rcu(stit, &stt->iommu_tables, next) {378370 unsigned long hpa = 0;379371 struct mm_iommu_table_group_mem_t *mem;380372 long shift = stit->tbl->it_page_shift;381373382374 mem = mm_iommu_lookup(stt->kvm->mm, ua, 1ULL << shift);383383- if (!mem)375375+ if (!mem || mm_iommu_ua_to_hpa(mem, ua, shift, &hpa)) {376376+ rcu_read_unlock();384377 return H_TOO_HARD;385385-386386- if (mm_iommu_ua_to_hpa(mem, ua, shift, &hpa))387387- return H_TOO_HARD;378378+ }388379 }380380+ rcu_read_unlock();389381390382 return H_SUCCESS;391383}
···10971097 ret = kvmppc_h_svm_init_done(vcpu->kvm);10981098 break;10991099 case H_SVM_INIT_ABORT:11001100- ret = H_UNSUPPORTED;11011101- if (kvmppc_get_srr1(vcpu) & MSR_S)11021102- ret = kvmppc_h_svm_init_abort(vcpu->kvm);11001100+ /*11011101+ * Even if that call is made by the Ultravisor, the SSR1 value11021102+ * is the guest context one, with the secure bit clear as it has11031103+ * not yet been secured. So we can't check it here.11041104+ * Instead the kvm->arch.secure_guest flag is checked inside11051105+ * kvmppc_h_svm_init_abort().11061106+ */11071107+ ret = kvmppc_h_svm_init_abort(vcpu->kvm);11031108 break;1104110911051110 default:···11591154 return kvmppc_hcall_impl_hv_realmode(cmd);11601155}1161115611621162-static int kvmppc_emulate_debug_inst(struct kvm_run *run,11631163- struct kvm_vcpu *vcpu)11571157+static int kvmppc_emulate_debug_inst(struct kvm_vcpu *vcpu)11641158{11651159 u32 last_inst;11661160···11731169 }1174117011751171 if (last_inst == KVMPPC_INST_SW_BREAKPOINT) {11761176- run->exit_reason = KVM_EXIT_DEBUG;11771177- run->debug.arch.address = kvmppc_get_pc(vcpu);11721172+ vcpu->run->exit_reason = KVM_EXIT_DEBUG;11731173+ vcpu->run->debug.arch.address = kvmppc_get_pc(vcpu);11781174 return RESUME_HOST;11791175 } else {11801176 kvmppc_core_queue_program(vcpu, SRR1_PROGILL);···12751271 return RESUME_GUEST;12761272}1277127312781278-static int kvmppc_handle_exit_hv(struct kvm_run *run, struct kvm_vcpu *vcpu,12741274+static int kvmppc_handle_exit_hv(struct kvm_vcpu *vcpu,12791275 struct task_struct *tsk)12801276{12771277+ struct kvm_run *run = vcpu->run;12811278 int r = RESUME_HOST;1282127912831280 vcpu->stat.sum_exits++;···14131408 swab32(vcpu->arch.emul_inst) :14141409 vcpu->arch.emul_inst;14151410 if (vcpu->guest_debug & KVM_GUESTDBG_USE_SW_BP) {14161416- r = kvmppc_emulate_debug_inst(run, vcpu);14111411+ r = kvmppc_emulate_debug_inst(vcpu);14171412 } else {14181413 kvmppc_core_queue_program(vcpu, SRR1_PROGILL);14191414 r = RESUME_GUEST;···14651460 return r;14661461}1467146214681468-static int kvmppc_handle_nested_exit(struct kvm_run *run, struct kvm_vcpu *vcpu)14631463+static int kvmppc_handle_nested_exit(struct kvm_vcpu *vcpu)14691464{14701465 int r;14711466 int srcu_idx;···15231518 */15241519 case BOOK3S_INTERRUPT_H_DATA_STORAGE:15251520 srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);15261526- r = kvmhv_nested_page_fault(run, vcpu);15211521+ r = kvmhv_nested_page_fault(vcpu);15271522 srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx);15281523 break;15291524 case BOOK3S_INTERRUPT_H_INST_STORAGE:···15331528 if (vcpu->arch.shregs.msr & HSRR1_HISI_WRITE)15341529 vcpu->arch.fault_dsisr |= DSISR_ISSTORE;15351530 srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);15361536- r = kvmhv_nested_page_fault(run, vcpu);15311531+ r = kvmhv_nested_page_fault(vcpu);15371532 srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx);15381533 break;15391534···2937293229382933 ret = RESUME_GUEST;29392934 if (vcpu->arch.trap)29402940- ret = kvmppc_handle_exit_hv(vcpu->arch.kvm_run, vcpu,29352935+ ret = kvmppc_handle_exit_hv(vcpu,29412936 vcpu->arch.run_task);2942293729432938 vcpu->arch.ret = ret;···39023897 return r;39033898}3904389939053905-static int kvmppc_run_vcpu(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)39003900+static int kvmppc_run_vcpu(struct kvm_vcpu *vcpu)39063901{39023902+ struct kvm_run *run = vcpu->run;39073903 int n_ceded, i, r;39083904 struct kvmppc_vcore *vc;39093905 struct kvm_vcpu *v;3910390639113907 trace_kvmppc_run_vcpu_enter(vcpu);3912390839133913- kvm_run->exit_reason = 0;39093909+ run->exit_reason = 0;39143910 vcpu->arch.ret = RESUME_GUEST;39153911 vcpu->arch.trap = 0;39163912 kvmppc_update_vpas(vcpu);···39233917 spin_lock(&vc->lock);39243918 vcpu->arch.ceded = 0;39253919 vcpu->arch.run_task = current;39263926- vcpu->arch.kvm_run = kvm_run;39273920 vcpu->arch.stolen_logged = vcore_stolen_time(vc, mftb());39283921 vcpu->arch.state = KVMPPC_VCPU_RUNNABLE;39293922 vcpu->arch.busy_preempt = TB_NIL;···39553950 r = kvmhv_setup_mmu(vcpu);39563951 spin_lock(&vc->lock);39573952 if (r) {39583958- kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY;39593959- kvm_run->fail_entry.39533953+ run->exit_reason = KVM_EXIT_FAIL_ENTRY;39543954+ run->fail_entry.39603955 hardware_entry_failure_reason = 0;39613956 vcpu->arch.ret = r;39623957 break;···39753970 if (signal_pending(v->arch.run_task)) {39763971 kvmppc_remove_runnable(vc, v);39773972 v->stat.signal_exits++;39783978- v->arch.kvm_run->exit_reason = KVM_EXIT_INTR;39733973+ v->run->exit_reason = KVM_EXIT_INTR;39793974 v->arch.ret = -EINTR;39803975 wake_up(&v->arch.cpu_run);39813976 }···40164011 if (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE) {40174012 kvmppc_remove_runnable(vc, vcpu);40184013 vcpu->stat.signal_exits++;40194019- kvm_run->exit_reason = KVM_EXIT_INTR;40144014+ run->exit_reason = KVM_EXIT_INTR;40204015 vcpu->arch.ret = -EINTR;40214016 }40224017···40274022 wake_up(&v->arch.cpu_run);40284023 }4029402440304030- trace_kvmppc_run_vcpu_exit(vcpu, kvm_run);40254025+ trace_kvmppc_run_vcpu_exit(vcpu);40314026 spin_unlock(&vc->lock);40324027 return vcpu->arch.ret;40334028}4034402940354035-int kvmhv_run_single_vcpu(struct kvm_run *kvm_run,40364036- struct kvm_vcpu *vcpu, u64 time_limit,40304030+int kvmhv_run_single_vcpu(struct kvm_vcpu *vcpu, u64 time_limit,40374031 unsigned long lpcr)40384032{40334033+ struct kvm_run *run = vcpu->run;40394034 int trap, r, pcpu;40404035 int srcu_idx, lpid;40414036 struct kvmppc_vcore *vc;···4044403940454040 trace_kvmppc_run_vcpu_enter(vcpu);4046404140474047- kvm_run->exit_reason = 0;40424042+ run->exit_reason = 0;40484043 vcpu->arch.ret = RESUME_GUEST;40494044 vcpu->arch.trap = 0;4050404540514046 vc = vcpu->arch.vcore;40524047 vcpu->arch.ceded = 0;40534048 vcpu->arch.run_task = current;40544054- vcpu->arch.kvm_run = kvm_run;40554049 vcpu->arch.stolen_logged = vcore_stolen_time(vc, mftb());40564050 vcpu->arch.state = KVMPPC_VCPU_RUNNABLE;40574051 vcpu->arch.busy_preempt = TB_NIL;···41684164 r = RESUME_GUEST;41694165 if (trap) {41704166 if (!nested)41714171- r = kvmppc_handle_exit_hv(kvm_run, vcpu, current);41674167+ r = kvmppc_handle_exit_hv(vcpu, current);41724168 else41734173- r = kvmppc_handle_nested_exit(kvm_run, vcpu);41694169+ r = kvmppc_handle_nested_exit(vcpu);41744170 }41754171 vcpu->arch.ret = r;41764172···41804176 while (vcpu->arch.ceded && !kvmppc_vcpu_woken(vcpu)) {41814177 if (signal_pending(current)) {41824178 vcpu->stat.signal_exits++;41834183- kvm_run->exit_reason = KVM_EXIT_INTR;41794179+ run->exit_reason = KVM_EXIT_INTR;41844180 vcpu->arch.ret = -EINTR;41854181 break;41864182 }···4196419241974193 done:41984194 kvmppc_remove_runnable(vc, vcpu);41994199- trace_kvmppc_run_vcpu_exit(vcpu, kvm_run);41954195+ trace_kvmppc_run_vcpu_exit(vcpu);4200419642014197 return vcpu->arch.ret;4202419842034199 sigpend:42044200 vcpu->stat.signal_exits++;42054205- kvm_run->exit_reason = KVM_EXIT_INTR;42014201+ run->exit_reason = KVM_EXIT_INTR;42064202 vcpu->arch.ret = -EINTR;42074203 out:42084204 local_irq_enable();···42104206 goto done;42114207}4212420842134213-static int kvmppc_vcpu_run_hv(struct kvm_run *run, struct kvm_vcpu *vcpu)42094209+static int kvmppc_vcpu_run_hv(struct kvm_vcpu *vcpu)42144210{42114211+ struct kvm_run *run = vcpu->run;42154212 int r;42164213 int srcu_idx;42174214 unsigned long ebb_regs[3] = {}; /* shut up GCC */···42964291 */42974292 if (kvm->arch.threads_indep && kvm_is_radix(kvm) &&42984293 !no_mixing_hpt_and_radix)42994299- r = kvmhv_run_single_vcpu(run, vcpu, ~(u64)0,42944294+ r = kvmhv_run_single_vcpu(vcpu, ~(u64)0,43004295 vcpu->arch.vcore->lpcr);43014296 else43024302- r = kvmppc_run_vcpu(run, vcpu);42974297+ r = kvmppc_run_vcpu(vcpu);4303429843044299 if (run->exit_reason == KVM_EXIT_PAPR_HCALL &&43054300 !(vcpu->arch.shregs.msr & MSR_PR)) {···43094304 kvmppc_core_prepare_to_enter(vcpu);43104305 } else if (r == RESUME_PAGE_FAULT) {43114306 srcu_idx = srcu_read_lock(&kvm->srcu);43124312- r = kvmppc_book3s_hv_page_fault(run, vcpu,43074307+ r = kvmppc_book3s_hv_page_fault(vcpu,43134308 vcpu->arch.fault_dar, vcpu->arch.fault_dsisr);43144309 srcu_read_unlock(&kvm->srcu, srcu_idx);43154310 } else if (r == RESUME_PASSTHROUGH) {···49834978}4984497949854980/* We don't need to emulate any privileged instructions or dcbz */49864986-static int kvmppc_core_emulate_op_hv(struct kvm_run *run, struct kvm_vcpu *vcpu,49814981+static int kvmppc_core_emulate_op_hv(struct kvm_vcpu *vcpu,49874982 unsigned int inst, int *advance)49884983{49894984 return EMULATE_FAIL;
+6-9
arch/powerpc/kvm/book3s_hv_nested.c
···290290 r = RESUME_HOST;291291 break;292292 }293293- r = kvmhv_run_single_vcpu(vcpu->arch.kvm_run, vcpu, hdec_exp,294294- lpcr);293293+ r = kvmhv_run_single_vcpu(vcpu, hdec_exp, lpcr);295294 } while (is_kvmppc_resume_guest(r));296295297296 /* save L2 state for return */···12561257}1257125812581259/* called with gp->tlb_lock held */12591259-static long int __kvmhv_nested_page_fault(struct kvm_run *run,12601260- struct kvm_vcpu *vcpu,12601260+static long int __kvmhv_nested_page_fault(struct kvm_vcpu *vcpu,12611261 struct kvm_nested_guest *gp)12621262{12631263 struct kvm *kvm = vcpu->kvm;···13391341 }1340134213411343 /* passthrough of emulated MMIO case */13421342- return kvmppc_hv_emulate_mmio(run, vcpu, gpa, ea, writing);13441344+ return kvmppc_hv_emulate_mmio(vcpu, gpa, ea, writing);13431345 }13441346 if (memslot->flags & KVM_MEM_READONLY) {13451347 if (writing) {···14141416 rmapp = &memslot->arch.rmap[gfn - memslot->base_gfn];14151417 ret = kvmppc_create_pte(kvm, gp->shadow_pgtable, pte, n_gpa, level,14161418 mmu_seq, gp->shadow_lpid, rmapp, &n_rmap);14171417- if (n_rmap)14181418- kfree(n_rmap);14191419+ kfree(n_rmap);14191420 if (ret == -EAGAIN)14201421 ret = RESUME_GUEST; /* Let the guest try again */14211422···14251428 return RESUME_GUEST;14261429}1427143014281428-long int kvmhv_nested_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu)14311431+long int kvmhv_nested_page_fault(struct kvm_vcpu *vcpu)14291432{14301433 struct kvm_nested_guest *gp = vcpu->arch.nested;14311434 long int ret;1432143514331436 mutex_lock(&gp->tlb_lock);14341434- ret = __kvmhv_nested_page_fault(run, vcpu, gp);14371437+ ret = __kvmhv_nested_page_fault(vcpu, gp);14351438 mutex_unlock(&gp->tlb_lock);14361439 return ret;14371440}
+14
arch/powerpc/kvm/book3s_hv_uvmem.c
···749749 const __be32 *prop;750750 u64 size = 0;751751752752+ /*753753+ * First try the new ibm,secure-memory nodes which supersede the754754+ * secure-memory-ranges property.755755+ * If we found some, no need to read the deprecated ones.756756+ */757757+ for_each_compatible_node(np, NULL, "ibm,secure-memory") {758758+ prop = of_get_property(np, "reg", &len);759759+ if (!prop)760760+ continue;761761+ size += of_read_number(prop + 2, 2);762762+ }763763+ if (size)764764+ return size;765765+752766 np = of_find_compatible_node(NULL, NULL, "ibm,uv-firmware");753767 if (!np)754768 goto out;
···700700 return kvm_is_visible_gfn(vcpu->kvm, gpa >> PAGE_SHIFT);701701}702702703703-int kvmppc_handle_pagefault(struct kvm_run *run, struct kvm_vcpu *vcpu,703703+static int kvmppc_handle_pagefault(struct kvm_vcpu *vcpu,704704 ulong eaddr, int vec)705705{706706 bool data = (vec == BOOK3S_INTERRUPT_DATA_STORAGE);···795795 /* The guest's PTE is not mapped yet. Map on the host */796796 if (kvmppc_mmu_map_page(vcpu, &pte, iswrite) == -EIO) {797797 /* Exit KVM if mapping failed */798798- run->exit_reason = KVM_EXIT_INTERNAL_ERROR;798798+ vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;799799 return RESUME_HOST;800800 }801801 if (data)···808808 vcpu->stat.mmio_exits++;809809 vcpu->arch.paddr_accessed = pte.raddr;810810 vcpu->arch.vaddr_accessed = pte.eaddr;811811- r = kvmppc_emulate_mmio(run, vcpu);811811+ r = kvmppc_emulate_mmio(vcpu);812812 if ( r == RESUME_HOST_NV )813813 r = RESUME_HOST;814814 }···992992 enum emulation_result er = EMULATE_FAIL;993993994994 if (!(kvmppc_get_msr(vcpu) & MSR_PR))995995- er = kvmppc_emulate_instruction(vcpu->run, vcpu);995995+ er = kvmppc_emulate_instruction(vcpu);996996997997 if ((er != EMULATE_DONE) && (er != EMULATE_AGAIN)) {998998 /* Couldn't emulate, trigger interrupt in guest */···10891089 }10901090}1091109110921092-static int kvmppc_exit_pr_progint(struct kvm_run *run, struct kvm_vcpu *vcpu,10931093- unsigned int exit_nr)10921092+static int kvmppc_exit_pr_progint(struct kvm_vcpu *vcpu, unsigned int exit_nr)10941093{10951094 enum emulation_result er;10961095 ulong flags;···11231124 }1124112511251126 vcpu->stat.emulated_inst_exits++;11261126- er = kvmppc_emulate_instruction(run, vcpu);11271127+ er = kvmppc_emulate_instruction(vcpu);11271128 switch (er) {11281129 case EMULATE_DONE:11291130 r = RESUME_GUEST_NV;···11381139 r = RESUME_GUEST;11391140 break;11401141 case EMULATE_DO_MMIO:11411141- run->exit_reason = KVM_EXIT_MMIO;11421142+ vcpu->run->exit_reason = KVM_EXIT_MMIO;11421143 r = RESUME_HOST_NV;11431144 break;11441145 case EMULATE_EXIT_USER:···11971198 /* only care about PTEG not found errors, but leave NX alone */11981199 if (shadow_srr1 & 0x40000000) {11991200 int idx = srcu_read_lock(&vcpu->kvm->srcu);12001200- r = kvmppc_handle_pagefault(run, vcpu, kvmppc_get_pc(vcpu), exit_nr);12011201+ r = kvmppc_handle_pagefault(vcpu, kvmppc_get_pc(vcpu), exit_nr);12011202 srcu_read_unlock(&vcpu->kvm->srcu, idx);12021203 vcpu->stat.sp_instruc++;12031204 } else if (vcpu->arch.mmu.is_dcbz32(vcpu) &&···12471248 */12481249 if (fault_dsisr & (DSISR_NOHPTE | DSISR_PROTFAULT)) {12491250 int idx = srcu_read_lock(&vcpu->kvm->srcu);12501250- r = kvmppc_handle_pagefault(run, vcpu, dar, exit_nr);12511251+ r = kvmppc_handle_pagefault(vcpu, dar, exit_nr);12511252 srcu_read_unlock(&vcpu->kvm->srcu, idx);12521253 } else {12531254 kvmppc_core_queue_data_storage(vcpu, dar, fault_dsisr);···12911292 break;12921293 case BOOK3S_INTERRUPT_PROGRAM:12931294 case BOOK3S_INTERRUPT_H_EMUL_ASSIST:12941294- r = kvmppc_exit_pr_progint(run, vcpu, exit_nr);12951295+ r = kvmppc_exit_pr_progint(vcpu, exit_nr);12951296 break;12961297 case BOOK3S_INTERRUPT_SYSCALL:12971298 {···13691370 emul = kvmppc_get_last_inst(vcpu, INST_GENERIC,13701371 &last_inst);13711372 if (emul == EMULATE_DONE)13721372- r = kvmppc_exit_pr_progint(run, vcpu, exit_nr);13731373+ r = kvmppc_exit_pr_progint(vcpu, exit_nr);13731374 else13741375 r = RESUME_GUEST;13751376···18241825 vfree(vcpu_book3s);18251826}1826182718271827-static int kvmppc_vcpu_run_pr(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)18281828+static int kvmppc_vcpu_run_pr(struct kvm_vcpu *vcpu)18281829{18301830+ struct kvm_run *run = vcpu->run;18291831 int ret;18301832#ifdef CONFIG_ALTIVEC18311833 unsigned long uninitialized_var(vrsave);···1834183418351835 /* Check if we can run the vcpu at all */18361836 if (!vcpu->arch.sane) {18371837- kvm_run->exit_reason = KVM_EXIT_INTERNAL_ERROR;18371837+ run->exit_reason = KVM_EXIT_INTERNAL_ERROR;18381838 ret = -EINVAL;18391839 goto out;18401840 }···1861186118621862 kvmppc_fix_ee_before_entry();1863186318641864- ret = __kvmppc_vcpu_run(kvm_run, vcpu);18641864+ ret = __kvmppc_vcpu_run(run, vcpu);1865186518661866 kvmppc_clear_debug(vcpu);18671867
+19-17
arch/powerpc/kvm/booke.c
···729729 return r;730730}731731732732-int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)732732+int kvmppc_vcpu_run(struct kvm_vcpu *vcpu)733733{734734+ struct kvm_run *run = vcpu->run;734735 int ret, s;735736 struct debug_reg debug;736737737738 if (!vcpu->arch.sane) {738738- kvm_run->exit_reason = KVM_EXIT_INTERNAL_ERROR;739739+ run->exit_reason = KVM_EXIT_INTERNAL_ERROR;739740 return -EINVAL;740741 }741742···778777 vcpu->arch.pgdir = vcpu->kvm->mm->pgd;779778 kvmppc_fix_ee_before_entry();780779781781- ret = __kvmppc_vcpu_run(kvm_run, vcpu);780780+ ret = __kvmppc_vcpu_run(run, vcpu);782781783782 /* No need for guest_exit. It's done in handle_exit.784783 We also get here with interrupts enabled. */···800799 return ret;801800}802801803803-static int emulation_exit(struct kvm_run *run, struct kvm_vcpu *vcpu)802802+static int emulation_exit(struct kvm_vcpu *vcpu)804803{805804 enum emulation_result er;806805807807- er = kvmppc_emulate_instruction(run, vcpu);806806+ er = kvmppc_emulate_instruction(vcpu);808807 switch (er) {809808 case EMULATE_DONE:810809 /* don't overwrite subtypes, just account kvm_stats */···821820 __func__, vcpu->arch.regs.nip, vcpu->arch.last_inst);822821 /* For debugging, encode the failing instruction and823822 * report it to userspace. */824824- run->hw.hardware_exit_reason = ~0ULL << 32;825825- run->hw.hardware_exit_reason |= vcpu->arch.last_inst;823823+ vcpu->run->hw.hardware_exit_reason = ~0ULL << 32;824824+ vcpu->run->hw.hardware_exit_reason |= vcpu->arch.last_inst;826825 kvmppc_core_queue_program(vcpu, ESR_PIL);827826 return RESUME_HOST;828827···834833 }835834}836835837837-static int kvmppc_handle_debug(struct kvm_run *run, struct kvm_vcpu *vcpu)836836+static int kvmppc_handle_debug(struct kvm_vcpu *vcpu)838837{838838+ struct kvm_run *run = vcpu->run;839839 struct debug_reg *dbg_reg = &(vcpu->arch.dbg_reg);840840 u32 dbsr = vcpu->arch.dbsr;841841···955953 }956954}957955958958-static int kvmppc_resume_inst_load(struct kvm_run *run, struct kvm_vcpu *vcpu,956956+static int kvmppc_resume_inst_load(struct kvm_vcpu *vcpu,959957 enum emulation_result emulated, u32 last_inst)960958{961959 switch (emulated) {···967965 __func__, vcpu->arch.regs.nip);968966 /* For debugging, encode the failing instruction and969967 * report it to userspace. */970970- run->hw.hardware_exit_reason = ~0ULL << 32;971971- run->hw.hardware_exit_reason |= last_inst;968968+ vcpu->run->hw.hardware_exit_reason = ~0ULL << 32;969969+ vcpu->run->hw.hardware_exit_reason |= last_inst;972970 kvmppc_core_queue_program(vcpu, ESR_PIL);973971 return RESUME_HOST;974972···10251023 run->ready_for_interrupt_injection = 1;1026102410271025 if (emulated != EMULATE_DONE) {10281028- r = kvmppc_resume_inst_load(run, vcpu, emulated, last_inst);10261026+ r = kvmppc_resume_inst_load(vcpu, emulated, last_inst);10291027 goto out;10301028 }10311029···10851083 break;1086108410871085 case BOOKE_INTERRUPT_HV_PRIV:10881088- r = emulation_exit(run, vcpu);10861086+ r = emulation_exit(vcpu);10891087 break;1090108810911089 case BOOKE_INTERRUPT_PROGRAM:···10951093 * We are here because of an SW breakpoint instr,10961094 * so lets return to host to handle.10971095 */10981098- r = kvmppc_handle_debug(run, vcpu);10961096+ r = kvmppc_handle_debug(vcpu);10991097 run->exit_reason = KVM_EXIT_DEBUG;11001098 kvmppc_account_exit(vcpu, DEBUG_EXITS);11011099 break;···11161114 break;11171115 }1118111611191119- r = emulation_exit(run, vcpu);11171117+ r = emulation_exit(vcpu);11201118 break;1121111911221120 case BOOKE_INTERRUPT_FP_UNAVAIL:···12831281 * actually RAM. */12841282 vcpu->arch.paddr_accessed = gpaddr;12851283 vcpu->arch.vaddr_accessed = eaddr;12861286- r = kvmppc_emulate_mmio(run, vcpu);12841284+ r = kvmppc_emulate_mmio(vcpu);12871285 kvmppc_account_exit(vcpu, MMIO_EXITS);12881286 }12891287···13341332 }1335133313361334 case BOOKE_INTERRUPT_DEBUG: {13371337- r = kvmppc_handle_debug(run, vcpu);13351335+ r = kvmppc_handle_debug(vcpu);13381336 if (r == RESUME_HOST)13391337 run->exit_reason = KVM_EXIT_DEBUG;13401338 kvmppc_account_exit(vcpu, DEBUG_EXITS);
+2-6
arch/powerpc/kvm/booke.h
···7070void kvmppc_set_tsr_bits(struct kvm_vcpu *vcpu, u32 tsr_bits);7171void kvmppc_clr_tsr_bits(struct kvm_vcpu *vcpu, u32 tsr_bits);72727373-int kvmppc_booke_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu,7373+int kvmppc_booke_emulate_op(struct kvm_vcpu *vcpu,7474 unsigned int inst, int *advance);7575int kvmppc_booke_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val);7676int kvmppc_booke_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val);···94949595void kvmppc_set_pending_interrupt(struct kvm_vcpu *vcpu, enum int_class type);96969797-extern int kvmppc_core_emulate_op_e500(struct kvm_run *run,9898- struct kvm_vcpu *vcpu,9797+extern int kvmppc_core_emulate_op_e500(struct kvm_vcpu *vcpu,9998 unsigned int inst, int *advance);10099extern int kvmppc_core_emulate_mtspr_e500(struct kvm_vcpu *vcpu, int sprn,101100 ulong spr_val);102101extern int kvmppc_core_emulate_mfspr_e500(struct kvm_vcpu *vcpu, int sprn,103102 ulong *spr_val);104104-extern int kvmppc_core_emulate_op_e500(struct kvm_run *run,105105- struct kvm_vcpu *vcpu,106106- unsigned int inst, int *advance);107103extern int kvmppc_core_emulate_mtspr_e500(struct kvm_vcpu *vcpu, int sprn,108104 ulong spr_val);109105extern int kvmppc_core_emulate_mfspr_e500(struct kvm_vcpu *vcpu, int sprn,
+1-1
arch/powerpc/kvm/booke_emulate.c
···3939 kvmppc_set_msr(vcpu, vcpu->arch.csrr1);4040}41414242-int kvmppc_booke_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu,4242+int kvmppc_booke_emulate_op(struct kvm_vcpu *vcpu,4343 unsigned int inst, int *advance)4444{4545 int emulated = EMULATE_DONE;
+7-8
arch/powerpc/kvm/e500_emulate.c
···8383}8484#endif85858686-static int kvmppc_e500_emul_ehpriv(struct kvm_run *run, struct kvm_vcpu *vcpu,8686+static int kvmppc_e500_emul_ehpriv(struct kvm_vcpu *vcpu,8787 unsigned int inst, int *advance)8888{8989 int emulated = EMULATE_DONE;90909191 switch (get_oc(inst)) {9292 case EHPRIV_OC_DEBUG:9393- run->exit_reason = KVM_EXIT_DEBUG;9494- run->debug.arch.address = vcpu->arch.regs.nip;9595- run->debug.arch.status = 0;9393+ vcpu->run->exit_reason = KVM_EXIT_DEBUG;9494+ vcpu->run->debug.arch.address = vcpu->arch.regs.nip;9595+ vcpu->run->debug.arch.status = 0;9696 kvmppc_account_exit(vcpu, DEBUG_EXITS);9797 emulated = EMULATE_EXIT_USER;9898 *advance = 0;···125125 return EMULATE_FAIL;126126}127127128128-int kvmppc_core_emulate_op_e500(struct kvm_run *run, struct kvm_vcpu *vcpu,128128+int kvmppc_core_emulate_op_e500(struct kvm_vcpu *vcpu,129129 unsigned int inst, int *advance)130130{131131 int emulated = EMULATE_DONE;···182182 break;183183184184 case XOP_EHPRIV:185185- emulated = kvmppc_e500_emul_ehpriv(run, vcpu, inst,186186- advance);185185+ emulated = kvmppc_e500_emul_ehpriv(vcpu, inst, advance);187186 break;188187189188 default:···196197 }197198198199 if (emulated == EMULATE_FAIL)199199- emulated = kvmppc_booke_emulate_op(run, vcpu, inst, advance);200200+ emulated = kvmppc_booke_emulate_op(vcpu, inst, advance);200201201202 return emulated;202203}
+5-5
arch/powerpc/kvm/emulate.c
···191191192192/* XXX Should probably auto-generate instruction decoding for a particular core193193 * from opcode tables in the future. */194194-int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)194194+int kvmppc_emulate_instruction(struct kvm_vcpu *vcpu)195195{196196 u32 inst;197197 int rs, rt, sprn;···270270 * these are illegal instructions.271271 */272272 if (inst == KVMPPC_INST_SW_BREAKPOINT) {273273- run->exit_reason = KVM_EXIT_DEBUG;274274- run->debug.arch.status = 0;275275- run->debug.arch.address = kvmppc_get_pc(vcpu);273273+ vcpu->run->exit_reason = KVM_EXIT_DEBUG;274274+ vcpu->run->debug.arch.status = 0;275275+ vcpu->run->debug.arch.address = kvmppc_get_pc(vcpu);276276 emulated = EMULATE_EXIT_USER;277277 advance = 0;278278 } else···285285 }286286287287 if (emulated == EMULATE_FAIL) {288288- emulated = vcpu->kvm->arch.kvm_ops->emulate_op(run, vcpu, inst,288288+ emulated = vcpu->kvm->arch.kvm_ops->emulate_op(vcpu, inst,289289 &advance);290290 if (emulated == EMULATE_AGAIN) {291291 advance = 0;