Lines Matching refs:icp

61 static void icp_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp,
126 struct kvmppc_icp *icp)
135 icp_deliver_irq(xics, icp, state->number, true);
169 struct kvmppc_icp *icp;
182 icp = kvmppc_xics_find_server(kvm, server);
183 if (!icp)
191 icp_deliver_irq(xics, icp, irq, false);
225 struct kvmppc_icp *icp;
238 icp = kvmppc_xics_find_server(kvm, state->server);
239 if (!icp)
244 icp_deliver_irq(xics, icp, irq, false);
271 static inline bool icp_try_update(struct kvmppc_icp *icp,
282 success = cmpxchg64(&icp->state.raw, old.raw, new.raw) == old.raw;
287 icp->server_num,
309 kvmppc_book3s_queue_irqprio(icp->vcpu,
312 kvmppc_fast_vcpu_kick(icp->vcpu);
319 struct kvmppc_icp *icp)
325 for_each_set_bit(icsid, icp->resend_map, xics->max_icsid + 1) {
328 if (!test_and_clear_bit(icsid, icp->resend_map))
332 ics_check_resend(xics, ics, icp);
336 static bool icp_try_to_deliver(struct kvmppc_icp *icp, u32 irq, u8 priority,
343 icp->server_num);
346 old_state = new_state = READ_ONCE(icp->state);
372 } while (!icp_try_update(icp, old_state, new_state, false));
377 static void icp_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp,
415 if (!icp || state->server != icp->server_num) {
416 icp = kvmppc_xics_find_server(xics->kvm, state->server);
417 if (!icp) {
468 if (icp_try_to_deliver(icp, new_irq, state->priority, &reject)) {
491 set_bit(ics->icsid, icp->resend_map);
500 if (!icp->state.need_resend) {
513 static void icp_down_cppr(struct kvmppc_xics *xics, struct kvmppc_icp *icp,
549 old_state = new_state = READ_ONCE(icp->state);
575 } while (!icp_try_update(icp, old_state, new_state, true));
583 icp_check_resend(xics, icp);
589 struct kvmppc_icp *icp = vcpu->arch.icp;
593 kvmppc_book3s_dequeue_irqprio(icp->vcpu, BOOK3S_INTERRUPT_EXTERNAL);
603 old_state = new_state = READ_ONCE(icp->state);
612 } while (!icp_try_update(icp, old_state, new_state, true));
624 struct kvmppc_icp *icp;
632 icp = vcpu->arch.icp;
633 local = icp->server_num == server;
635 icp = kvmppc_xics_find_server(vcpu->kvm, server);
636 if (!icp)
670 old_state = new_state = READ_ONCE(icp->state);
691 } while (!icp_try_update(icp, old_state, new_state, local));
695 icp_deliver_irq(xics, icp, reject, false);
699 icp_check_resend(xics, icp);
707 struct kvmppc_icp *icp;
709 icp = vcpu->arch.icp;
710 if (icp->server_num != server) {
711 icp = kvmppc_xics_find_server(vcpu->kvm, server);
712 if (!icp)
715 state = READ_ONCE(icp->state);
725 struct kvmppc_icp *icp = vcpu->arch.icp;
737 if (cppr > icp->state.cppr)
738 icp_down_cppr(xics, icp, cppr);
739 else if (cppr == icp->state.cppr)
753 kvmppc_book3s_dequeue_irqprio(icp->vcpu, BOOK3S_INTERRUPT_EXTERNAL);
756 old_state = new_state = READ_ONCE(icp->state);
767 } while (!icp_try_update(icp, old_state, new_state, true));
774 icp_deliver_irq(xics, icp, reject, false);
780 struct kvmppc_icp *icp = vcpu->arch.icp;
810 icp_deliver_irq(xics, icp, irq, false);
820 struct kvmppc_icp *icp = vcpu->arch.icp;
839 icp_down_cppr(xics, icp, xirr >> 24);
851 struct kvmppc_icp *icp = vcpu->arch.icp;
854 hcall, icp->rm_action, icp->rm_dbgstate.raw, icp->rm_dbgtgt);
856 if (icp->rm_action & XICS_RM_KICK_VCPU) {
857 icp->n_rm_kick_vcpu++;
858 kvmppc_fast_vcpu_kick(icp->rm_kick_target);
860 if (icp->rm_action & XICS_RM_CHECK_RESEND) {
861 icp->n_rm_check_resend++;
862 icp_check_resend(xics, icp->rm_resend_icp);
864 if (icp->rm_action & XICS_RM_NOTIFY_EOI) {
865 icp->n_rm_notify_eoi++;
866 kvm_notify_acked_irq(vcpu->kvm, 0, icp->rm_eoied_irq);
869 icp->rm_action = 0;
882 if (!xics || !vcpu->arch.icp)
965 struct kvmppc_icp *icp = vcpu->arch.icp;
968 if (!icp)
971 state.raw = READ_ONCE(icp->state.raw);
973 icp->server_num, state.xisr,
976 t_rm_kick_vcpu += icp->n_rm_kick_vcpu;
977 t_rm_notify_eoi += icp->n_rm_notify_eoi;
978 t_rm_check_resend += icp->n_rm_check_resend;
979 t_check_resend += icp->n_check_resend;
980 t_reject += icp->n_reject;
1064 struct kvmppc_icp *icp;
1072 icp = kzalloc(sizeof(struct kvmppc_icp), GFP_KERNEL);
1073 if (!icp)
1076 icp->vcpu = vcpu;
1077 icp->server_num = server_num;
1078 icp->state.mfrr = MASKED;
1079 icp->state.pending_pri = MASKED;
1080 vcpu->arch.icp = icp;
1089 struct kvmppc_icp *icp = vcpu->arch.icp;
1092 if (!icp)
1094 state = icp->state;
1103 struct kvmppc_icp *icp = vcpu->arch.icp;
1112 if (!icp || !xics)
1146 kvmppc_book3s_dequeue_irqprio(icp->vcpu, BOOK3S_INTERRUPT_EXTERNAL);
1159 old_state = READ_ONCE(icp->state);
1168 } while (!icp_try_update(icp, old_state, new_state, false));
1171 icp_check_resend(xics, icp);
1360 * can execute again, vcpu->arch.icp and vcpu->arch.irq_type
1471 if (!vcpu->arch.icp)
1473 kfree(vcpu->arch.icp);
1474 vcpu->arch.icp = NULL;