diff options
author | Alexander Graf <agraf@suse.de> | 2011-12-09 08:44:13 -0500 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2012-03-05 07:52:30 -0500 |
commit | 468a12c2b53776721ff83517d4a195b85c5fce54 (patch) | |
tree | ba417210997c2e3119525641764303d97db32815 /arch/powerpc/kvm/trace.h | |
parent | d33ad328c0025c45f4688a769aeebddc342222c1 (diff) |
KVM: PPC: Use get/set for to_svcpu to help preemption
When running the 64-bit Book3s PR code without CONFIG_PREEMPT_NONE, we were
doing a few things wrong, most notably access to PACA fields without making
sure that the pointers stay stable accross the access (preempt_disable()).
This patch moves to_svcpu towards a get/put model which allows us to disable
preemption while accessing the shadow vcpu fields in the PACA. That way we
can run preemptible and everyone's happy!
Reported-by: Jörg Sommer <joerg@alea.gnuu.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/powerpc/kvm/trace.h')
-rw-r--r-- | arch/powerpc/kvm/trace.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/powerpc/kvm/trace.h b/arch/powerpc/kvm/trace.h index b135d3d397db..609d8bfb54e3 100644 --- a/arch/powerpc/kvm/trace.h +++ b/arch/powerpc/kvm/trace.h | |||
@@ -118,11 +118,14 @@ TRACE_EVENT(kvm_book3s_exit, | |||
118 | ), | 118 | ), |
119 | 119 | ||
120 | TP_fast_assign( | 120 | TP_fast_assign( |
121 | struct kvmppc_book3s_shadow_vcpu *svcpu; | ||
121 | __entry->exit_nr = exit_nr; | 122 | __entry->exit_nr = exit_nr; |
122 | __entry->pc = kvmppc_get_pc(vcpu); | 123 | __entry->pc = kvmppc_get_pc(vcpu); |
123 | __entry->dar = kvmppc_get_fault_dar(vcpu); | 124 | __entry->dar = kvmppc_get_fault_dar(vcpu); |
124 | __entry->msr = vcpu->arch.shared->msr; | 125 | __entry->msr = vcpu->arch.shared->msr; |
125 | __entry->srr1 = to_svcpu(vcpu)->shadow_srr1; | 126 | svcpu = svcpu_get(vcpu); |
127 | __entry->srr1 = svcpu->shadow_srr1; | ||
128 | svcpu_put(svcpu); | ||
126 | ), | 129 | ), |
127 | 130 | ||
128 | TP_printk("exit=0x%x | pc=0x%lx | msr=0x%lx | dar=0x%lx | srr1=0x%lx", | 131 | TP_printk("exit=0x%x | pc=0x%lx | msr=0x%lx | dar=0x%lx | srr1=0x%lx", |