Lines Matching refs:icp
35 struct kvmppc_icp *this_icp = this_vcpu->arch.icp; in icp_rm_set_vcpu_irq()
72 static inline bool icp_rm_try_update(struct kvmppc_icp *icp, in icp_rm_try_update() argument
83 success = cmpxchg64(&icp->state.raw, old.raw, new.raw) == old.raw; in icp_rm_try_update()
103 icp_rm_set_vcpu_irq(icp->vcpu, this_vcpu); in icp_rm_try_update()
106 this_vcpu->arch.icp->rm_dbgstate = new; in icp_rm_try_update()
107 this_vcpu->arch.icp->rm_dbgtgt = icp->vcpu; in icp_rm_try_update()
114 struct kvmppc_icp *icp) in check_too_hard() argument
116 return (xics->real_mode_dbg || icp->rm_action) ? H_TOO_HARD : H_SUCCESS; in check_too_hard()
119 static void icp_rm_down_cppr(struct kvmppc_xics *xics, struct kvmppc_icp *icp, in icp_rm_down_cppr() argument
155 old_state = new_state = ACCESS_ONCE(icp->state); in icp_rm_down_cppr()
179 } while (!icp_rm_try_update(icp, old_state, new_state)); in icp_rm_down_cppr()
187 icp->rm_action |= XICS_RM_CHECK_RESEND; in icp_rm_down_cppr()
195 struct kvmppc_icp *icp = vcpu->arch.icp; in kvmppc_rm_h_xirr() local
202 icp_rm_clr_vcpu_irq(icp->vcpu); in kvmppc_rm_h_xirr()
212 old_state = new_state = ACCESS_ONCE(icp->state); in kvmppc_rm_h_xirr()
221 } while (!icp_rm_try_update(icp, old_state, new_state)); in kvmppc_rm_h_xirr()
226 return check_too_hard(xics, icp); in kvmppc_rm_h_xirr()
234 struct kvmppc_icp *icp, *this_icp = vcpu->arch.icp; in kvmppc_rm_h_ipi() local
244 icp = this_icp; in kvmppc_rm_h_ipi()
246 icp = kvmppc_xics_find_server(vcpu->kvm, server); in kvmppc_rm_h_ipi()
247 if (!icp) in kvmppc_rm_h_ipi()
263 old_state = new_state = ACCESS_ONCE(icp->state); in kvmppc_rm_h_ipi()
283 } while (!icp_rm_try_update(icp, old_state, new_state)); in kvmppc_rm_h_ipi()
302 struct kvmppc_icp *icp = vcpu->arch.icp; in kvmppc_rm_h_cppr() local
315 if (cppr > icp->state.cppr) { in kvmppc_rm_h_cppr()
316 icp_rm_down_cppr(xics, icp, cppr); in kvmppc_rm_h_cppr()
318 } else if (cppr == icp->state.cppr) in kvmppc_rm_h_cppr()
332 icp_rm_clr_vcpu_irq(icp->vcpu); in kvmppc_rm_h_cppr()
335 old_state = new_state = ACCESS_ONCE(icp->state); in kvmppc_rm_h_cppr()
346 } while (!icp_rm_try_update(icp, old_state, new_state)); in kvmppc_rm_h_cppr()
350 icp->rm_action |= XICS_RM_REJECT; in kvmppc_rm_h_cppr()
351 icp->rm_reject = reject; in kvmppc_rm_h_cppr()
354 return check_too_hard(xics, icp); in kvmppc_rm_h_cppr()
360 struct kvmppc_icp *icp = vcpu->arch.icp; in kvmppc_rm_h_eoi() local
383 icp_rm_down_cppr(xics, icp, xirr >> 24); in kvmppc_rm_h_eoi()
401 icp->rm_action |= XICS_RM_REJECT; in kvmppc_rm_h_eoi()
402 icp->rm_reject = irq; in kvmppc_rm_h_eoi()
406 icp->rm_action |= XICS_RM_NOTIFY_EOI; in kvmppc_rm_h_eoi()
407 icp->rm_eoied_irq = irq; in kvmppc_rm_h_eoi()
410 return check_too_hard(xics, icp); in kvmppc_rm_h_eoi()