Lines Matching +full:tlb +full:- +full:split
1 // SPDX-License-Identifier: GPL-2.0-only
20 #define SRR1_MC_LDSTERR (1ul << (63-42))
21 #define SRR1_MC_IFETCH_SH (63-45)
24 #define SRR1_MC_IFETCH_SLBMULTI 3 /* SLB multi-hit */
25 #define SRR1_MC_IFETCH_SLBPARMULTI 4 /* SLB parity + multi-hit */
26 #define SRR1_MC_IFETCH_TLBMULTI 5 /* I-TLB multi-hit */
29 #define DSISR_MC_DERAT_MULTI 0x800 /* D-ERAT multi-hit */
30 #define DSISR_MC_TLB_MULTI 0x400 /* D-TLB multi-hit */
32 #define DSISR_MC_SLB_MULTI 0x080 /* SLB multi-hit */
33 #define DSISR_MC_SLB_PARMULTI 0x040 /* SLB parity + multi-hit */
45 slb = vcpu->arch.slb_shadow.pinned_addr; in reload_slb()
50 n = min_t(u32, be32_to_cpu(slb->persistent), SLB_MIN_SIZE); in reload_slb()
51 if ((void *) &slb->save_area[n] > vcpu->arch.slb_shadow.pinned_end) in reload_slb()
56 unsigned long rb = be64_to_cpu(slb->save_area[i].esid); in reload_slb()
57 unsigned long rs = be64_to_cpu(slb->save_area[i].vsid); in reload_slb()
70 unsigned long srr1 = vcpu->arch.shregs.msr; in kvmppc_realmode_mc_power7()
75 unsigned long dsisr = vcpu->arch.shregs.dsisr; in kvmppc_realmode_mc_power7()
79 /* flush and reload SLB; flushes D-ERAT too */ in kvmppc_realmode_mc_power7()
85 tlbiel_all_lpid(vcpu->kvm->arch.radix); in kvmppc_realmode_mc_power7()
102 tlbiel_all_lpid(vcpu->kvm->arch.radix); in kvmppc_realmode_mc_power7()
116 if (vcpu->kvm->arch.fwnmi_enabled) { in kvmppc_realmode_machine_check()
136 vcpu->arch.mce_evt = mce_evt; in kvmppc_realmode_machine_check()
139 /* Check if dynamic split is in force and return subcore size accordingly. */
142 if (local_paca->kvm_hstate.kvm_split_mode) in kvmppc_cur_subcore_size()
143 return local_paca->kvm_hstate.kvm_split_mode->subcore_size; in kvmppc_cur_subcore_size()
152 thread_id = cpu_thread_in_core(local_paca->paca_index); in kvmppc_subcore_enter_guest()
155 local_paca->sibling_subcore_state->in_guest[subcore_id] = 1; in kvmppc_subcore_enter_guest()
163 thread_id = cpu_thread_in_core(local_paca->paca_index); in kvmppc_subcore_exit_guest()
166 local_paca->sibling_subcore_state->in_guest[subcore_id] = 0; in kvmppc_subcore_exit_guest()
173 &local_paca->sibling_subcore_state->flags)) in kvmppc_tb_resync_required()
182 &local_paca->sibling_subcore_state->flags); in kvmppc_tb_resync_done()
193 * to non-TB errors, opal hmi handler will not touch/restore TB register
203 * - On TB error, HMI interrupt is reported on all the threads of the core
204 * that has encountered TB error irrespective of split-core mode.
205 * - The very first thread on the core that get chance to fix TB error
207 * - The resync TB is a core level action i.e. it will sync all the TBs
208 * in that core independent of split-core mode. This means if we trigger
212 * All threads need to co-ordinate before making opal hmi handler.
213 * All threads will use sibling_subcore_state->in_guest[] (shared by all
223 * (sibling_subcore_state->flags) will be used to co-ordinate between
227 * - Primary thread from each subcore tries to set resync required bit[63]
228 * of paca->sibling_subcore_state->flags.
229 * - The first primary thread that is able to set the flag takes the
231 * - All other threads which are in host will call
232 * wait_for_subcore_guest_exit() and wait for in_guest[0-3] from
233 * paca->sibling_subcore_state to get cleared.
234 * - All the primary thread will clear its subcore status from subcore
236 * - Once all primary threads clear in_guest[0-3], all of them will invoke
238 * - Now all threads will wait for TB resync to complete by invoking
240 * - Thread leader will do a TB resync by invoking opal_resync_timebase()
242 * - All other threads will now come out of resync wait loop and proceed
244 * - On return of this function, primary thread will signal all
246 * - All secondary threads will eventually call opal hmi handler on
256 local_paca->hmi_irqs++; in kvmppc_realmode_hmi_handler()
262 * By now primary thread has already completed guest->host in kvmppc_realmode_hmi_handler()
295 * subcore on this core have completed guest->host partition in kvmppc_realmode_hmi_handler()
318 if (local_paca->kvm_hstate.kvm_vcore) in kvmppc_realmode_hmi_handler()
319 local_paca->kvm_hstate.kvm_vcore->tb_offset_applied = 0; in kvmppc_realmode_hmi_handler()