• Home
  • Raw
  • Download

Lines Matching refs:xics

61 static void icp_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp,
69 static int ics_deliver_irq(struct kvmppc_xics *xics, u32 irq, u32 level) in ics_deliver_irq() argument
78 ics = kvmppc_xics_find_ics(xics, irq, &src); in ics_deliver_irq()
116 icp_deliver_irq(xics, NULL, irq, false); in ics_deliver_irq()
125 static void ics_check_resend(struct kvmppc_xics *xics, struct kvmppc_ics *ics, in ics_check_resend() argument
135 icp_deliver_irq(xics, icp, state->number, true); in ics_check_resend()
140 static bool write_xive(struct kvmppc_xics *xics, struct kvmppc_ics *ics, in write_xive() argument
168 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_set_xive() local
174 if (!xics) in kvmppc_xics_set_xive()
177 ics = kvmppc_xics_find_ics(xics, irq, &src); in kvmppc_xics_set_xive()
190 if (write_xive(xics, ics, state, server, priority, priority)) in kvmppc_xics_set_xive()
191 icp_deliver_irq(xics, icp, irq, false); in kvmppc_xics_set_xive()
198 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_get_xive() local
204 if (!xics) in kvmppc_xics_get_xive()
207 ics = kvmppc_xics_find_ics(xics, irq, &src); in kvmppc_xics_get_xive()
224 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_int_on() local
230 if (!xics) in kvmppc_xics_int_on()
233 ics = kvmppc_xics_find_ics(xics, irq, &src); in kvmppc_xics_int_on()
242 if (write_xive(xics, ics, state, state->server, state->saved_priority, in kvmppc_xics_int_on()
244 icp_deliver_irq(xics, icp, irq, false); in kvmppc_xics_int_on()
251 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_int_off() local
256 if (!xics) in kvmppc_xics_int_off()
259 ics = kvmppc_xics_find_ics(xics, irq, &src); in kvmppc_xics_int_off()
264 write_xive(xics, ics, state, state->server, MASKED, state->priority); in kvmppc_xics_int_off()
318 static void icp_check_resend(struct kvmppc_xics *xics, in icp_check_resend() argument
325 for_each_set_bit(icsid, icp->resend_map, xics->max_icsid + 1) { in icp_check_resend()
326 struct kvmppc_ics *ics = xics->ics[icsid]; in icp_check_resend()
332 ics_check_resend(xics, ics, icp); in icp_check_resend()
377 static void icp_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp, in icp_deliver_irq() argument
403 ics = kvmppc_xics_find_ics(xics, new_irq, &src); in icp_deliver_irq()
416 icp = kvmppc_xics_find_server(xics->kvm, state->server); in icp_deliver_irq()
513 static void icp_down_cppr(struct kvmppc_xics *xics, struct kvmppc_icp *icp, in icp_down_cppr() argument
583 icp_check_resend(xics, icp); in icp_down_cppr()
623 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_h_ipi() local
695 icp_deliver_irq(xics, icp, reject, false); in kvmppc_h_ipi()
699 icp_check_resend(xics, icp); in kvmppc_h_ipi()
724 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_h_cppr() local
738 icp_down_cppr(xics, icp, cppr); in kvmppc_h_cppr()
774 icp_deliver_irq(xics, icp, reject, false); in kvmppc_h_cppr()
779 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in ics_eoi() local
794 ics = kvmppc_xics_find_ics(xics, irq, &src); in ics_eoi()
810 icp_deliver_irq(xics, icp, irq, false); in ics_eoi()
819 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_h_eoi() local
839 icp_down_cppr(xics, icp, xirr >> 24); in kvmppc_h_eoi()
850 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_xics_rm_complete() local
862 icp_check_resend(xics, icp->rm_resend_icp); in kvmppc_xics_rm_complete()
877 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_xics_hcall() local
882 if (!xics || !vcpu->arch.icp) in kvmppc_xics_hcall()
898 if (xics->real_mode && is_kvmppc_hv_enabled(vcpu->kvm)) in kvmppc_xics_hcall()
942 struct kvmppc_xics *xics = m->private; in xics_debug_show() local
943 struct kvm *kvm = xics->kvm; in xics_debug_show()
989 struct kvmppc_ics *ics = xics->ics[icsid]; in xics_debug_show()
1017 static void xics_debugfs_init(struct kvmppc_xics *xics) in xics_debugfs_init() argument
1021 name = kasprintf(GFP_KERNEL, "kvm-xics-%p", xics); in xics_debugfs_init()
1027 xics->dentry = debugfs_create_file(name, 0444, arch_debugfs_dir, in xics_debugfs_init()
1028 xics, &xics_debug_fops); in xics_debugfs_init()
1035 struct kvmppc_xics *xics, int irq) in kvmppc_xics_create_ics() argument
1045 if (xics->ics[icsid]) in kvmppc_xics_create_ics()
1061 xics->ics[icsid] = ics; in kvmppc_xics_create_ics()
1063 if (icsid > xics->max_icsid) in kvmppc_xics_create_ics()
1064 xics->max_icsid = icsid; in kvmppc_xics_create_ics()
1068 return xics->ics[icsid]; in kvmppc_xics_create_ics()
1075 if (!vcpu->kvm->arch.xics) in kvmppc_xics_create_icp()
1113 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_xics_set_icp() local
1121 if (!icp || !xics) in kvmppc_xics_set_icp()
1140 ics = kvmppc_xics_find_ics(xics, xisr, &src); in kvmppc_xics_set_icp()
1180 icp_check_resend(xics, icp); in kvmppc_xics_set_icp()
1185 static int xics_get_source(struct kvmppc_xics *xics, long irq, u64 addr) in xics_get_source() argument
1195 ics = kvmppc_xics_find_ics(xics, irq, &idx); in xics_get_source()
1235 static int xics_set_source(struct kvmppc_xics *xics, long irq, u64 addr) in xics_set_source() argument
1249 ics = kvmppc_xics_find_ics(xics, irq, &idx); in xics_set_source()
1251 ics = kvmppc_xics_create_ics(xics->kvm, xics, irq); in xics_set_source()
1262 kvmppc_xics_find_server(xics->kvm, server) == NULL) in xics_set_source()
1288 icp_deliver_irq(xics, NULL, irqp->number, false); in xics_set_source()
1296 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_set_irq() local
1298 if (!xics) in kvmppc_xics_set_irq()
1300 return ics_deliver_irq(xics, irq, level); in kvmppc_xics_set_irq()
1305 struct kvmppc_xics *xics = dev->private; in xics_set_attr() local
1309 return xics_set_source(xics, attr->attr, attr->addr); in xics_set_attr()
1316 struct kvmppc_xics *xics = dev->private; in xics_get_attr() local
1320 return xics_get_source(xics, attr->attr, attr->addr); in xics_get_attr()
1342 struct kvmppc_xics *xics = dev->private; in kvmppc_xics_release() local
1344 struct kvm *kvm = xics->kvm; in kvmppc_xics_release()
1358 debugfs_remove(xics->dentry); in kvmppc_xics_release()
1379 kvm->arch.xics = NULL; in kvmppc_xics_release()
1381 for (i = 0; i <= xics->max_icsid; i++) { in kvmppc_xics_release()
1382 kfree(xics->ics[i]); in kvmppc_xics_release()
1383 xics->ics[i] = NULL; in kvmppc_xics_release()
1397 struct kvmppc_xics *xics = *kvm_xics_device; in kvmppc_xics_get_device() local
1399 if (!xics) { in kvmppc_xics_get_device()
1400 xics = kzalloc(sizeof(*xics), GFP_KERNEL); in kvmppc_xics_get_device()
1401 *kvm_xics_device = xics; in kvmppc_xics_get_device()
1403 memset(xics, 0, sizeof(*xics)); in kvmppc_xics_get_device()
1406 return xics; in kvmppc_xics_get_device()
1411 struct kvmppc_xics *xics; in kvmppc_xics_create() local
1417 if (kvm->arch.xics) in kvmppc_xics_create()
1420 xics = kvmppc_xics_get_device(kvm); in kvmppc_xics_create()
1421 if (!xics) in kvmppc_xics_create()
1424 dev->private = xics; in kvmppc_xics_create()
1425 xics->dev = dev; in kvmppc_xics_create()
1426 xics->kvm = kvm; in kvmppc_xics_create()
1427 kvm->arch.xics = xics; in kvmppc_xics_create()
1433 xics->real_mode = ENABLE_REALMODE; in kvmppc_xics_create()
1434 xics->real_mode_dbg = DEBUG_REALMODE; in kvmppc_xics_create()
1443 struct kvmppc_xics *xics = (struct kvmppc_xics *)dev->private; in kvmppc_xics_init() local
1445 xics_debugfs_init(xics); in kvmppc_xics_init()
1461 struct kvmppc_xics *xics = dev->private; in kvmppc_xics_connect_vcpu() local
1466 if (xics->kvm != vcpu->kvm) in kvmppc_xics_connect_vcpu()
1490 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_set_mapped() local
1494 ics = kvmppc_xics_find_ics(xics, irq, &idx); in kvmppc_xics_set_mapped()
1506 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_clr_mapped() local
1510 ics = kvmppc_xics_find_ics(xics, irq, &idx); in kvmppc_xics_clr_mapped()