61
57
/* ICP for this CPU thread is not in use, exiting */
66
ret = kvm_vcpu_ioctl(ss->cs, KVM_GET_ONE_REG, ®);
62
ret = kvm_vcpu_ioctl(icp->cs, KVM_GET_ONE_REG, ®);
68
64
error_report("Unable to retrieve KVM interrupt controller state"
69
" for CPU %ld: %s", kvm_arch_vcpu_id(ss->cs), strerror(errno));
65
" for CPU %ld: %s", kvm_arch_vcpu_id(icp->cs), strerror(errno));
73
ss->xirr = state >> KVM_REG_PPC_ICP_XISR_SHIFT;
74
ss->mfrr = (state >> KVM_REG_PPC_ICP_MFRR_SHIFT)
69
icp->xirr = state >> KVM_REG_PPC_ICP_XISR_SHIFT;
70
icp->mfrr = (state >> KVM_REG_PPC_ICP_MFRR_SHIFT)
75
71
& KVM_REG_PPC_ICP_MFRR_MASK;
76
ss->pending_priority = (state >> KVM_REG_PPC_ICP_PPRI_SHIFT)
72
icp->pending_priority = (state >> KVM_REG_PPC_ICP_PPRI_SHIFT)
77
73
& KVM_REG_PPC_ICP_PPRI_MASK;
80
static int icp_set_kvm_state(ICPState *ss, int version_id)
76
static int icp_set_kvm_state(ICPState *icp, int version_id)
83
79
struct kvm_one_reg reg = {
89
85
/* ICP for this CPU thread is not in use, exiting */
94
state = ((uint64_t)ss->xirr << KVM_REG_PPC_ICP_XISR_SHIFT)
95
| ((uint64_t)ss->mfrr << KVM_REG_PPC_ICP_MFRR_SHIFT)
96
| ((uint64_t)ss->pending_priority << KVM_REG_PPC_ICP_PPRI_SHIFT);
90
state = ((uint64_t)icp->xirr << KVM_REG_PPC_ICP_XISR_SHIFT)
91
| ((uint64_t)icp->mfrr << KVM_REG_PPC_ICP_MFRR_SHIFT)
92
| ((uint64_t)icp->pending_priority << KVM_REG_PPC_ICP_PPRI_SHIFT);
98
ret = kvm_vcpu_ioctl(ss->cs, KVM_SET_ONE_REG, ®);
94
ret = kvm_vcpu_ioctl(icp->cs, KVM_SET_ONE_REG, ®);
100
96
error_report("Unable to restore KVM interrupt controller state (0x%"
101
PRIx64 ") for CPU %ld: %s", state, kvm_arch_vcpu_id(ss->cs),
97
PRIx64 ") for CPU %ld: %s", state, kvm_arch_vcpu_id(icp->cs),
122
118
icp_set_kvm_state(icp, 1);
121
static void icp_kvm_cpu_setup(ICPState *icp, PowerPCCPU *cpu)
123
CPUState *cs = CPU(cpu);
126
if (kernel_xics_fd == -1) {
131
* If we are reusing a parked vCPU fd corresponding to the CPU
132
* which was hot-removed earlier we don't have to renable
133
* KVM_CAP_IRQ_XICS capability again.
135
if (icp->cap_irq_xics_enabled) {
139
ret = kvm_vcpu_enable_cap(cs, KVM_CAP_IRQ_XICS, 0, kernel_xics_fd,
140
kvm_arch_vcpu_id(cs));
142
error_report("Unable to connect CPU%ld to kernel XICS: %s",
143
kvm_arch_vcpu_id(cs), strerror(errno));
146
icp->cap_irq_xics_enabled = true;
149
static void icp_kvm_realize(DeviceState *dev, Error **errp)
151
qemu_register_reset(icp_kvm_reset, dev);
125
154
static void icp_kvm_class_init(ObjectClass *klass, void *data)
127
156
DeviceClass *dc = DEVICE_CLASS(klass);
128
157
ICPStateClass *icpc = ICP_CLASS(klass);
130
dc->reset = icp_kvm_reset;
159
dc->realize = icp_kvm_realize;
131
160
icpc->pre_save = icp_get_kvm_state;
132
161
icpc->post_load = icp_set_kvm_state;
162
icpc->cpu_setup = icp_kvm_cpu_setup;
135
165
static const TypeInfo icp_kvm_info = {
161
190
attr.attr = i + ics->offset;
163
ret = ioctl(xicskvm->kernel_xics_fd, KVM_GET_DEVICE_ATTR, &attr);
192
ret = ioctl(kernel_xics_fd, KVM_GET_DEVICE_ATTR, &attr);
165
194
error_report("Unable to retrieve KVM interrupt controller state"
166
195
" for IRQ %d: %s", i + ics->offset, strerror(errno));
241
ret = ioctl(xicskvm->kernel_xics_fd, KVM_SET_DEVICE_ATTR, &attr);
269
ret = ioctl(kernel_xics_fd, KVM_SET_DEVICE_ATTR, &attr);
243
271
error_report("Unable to restore KVM interrupt controller state"
244
272
" for IRQs %d: %s", i + ics->offset, strerror(errno));
302
330
ics->irqs = g_malloc0(ics->nr_irqs * sizeof(ICSIRQState));
303
331
ics->qirqs = qemu_allocate_irqs(ics_kvm_set_irq, ics, ics->nr_irqs);
333
qemu_register_reset(ics_kvm_reset, dev);
306
336
static void ics_kvm_class_init(ObjectClass *klass, void *data)
308
DeviceClass *dc = DEVICE_CLASS(klass);
309
338
ICSStateClass *icsc = ICS_BASE_CLASS(klass);
311
dc->realize = ics_kvm_realize;
312
dc->reset = ics_kvm_reset;
340
icsc->realize = ics_kvm_realize;
313
341
icsc->pre_save = ics_get_kvm_state;
314
342
icsc->post_load = ics_set_kvm_state;
327
static void xics_kvm_cpu_setup(XICSState *xics, PowerPCCPU *cpu)
331
KVMXICSState *xicskvm = XICS_SPAPR_KVM(xics);
335
ss = &xics->ss[cs->cpu_index];
337
assert(cs->cpu_index < xics->nr_servers);
338
if (xicskvm->kernel_xics_fd == -1) {
343
* If we are reusing a parked vCPU fd corresponding to the CPU
344
* which was hot-removed earlier we don't have to renable
345
* KVM_CAP_IRQ_XICS capability again.
347
if (ss->cap_irq_xics_enabled) {
351
ret = kvm_vcpu_enable_cap(cs, KVM_CAP_IRQ_XICS, 0, xicskvm->kernel_xics_fd,
352
kvm_arch_vcpu_id(cs));
354
error_report("Unable to connect CPU%ld to kernel XICS: %s",
355
kvm_arch_vcpu_id(cs), strerror(errno));
358
ss->cap_irq_xics_enabled = true;
361
static void xics_kvm_set_nr_irqs(XICSState *xics, uint32_t nr_irqs,
364
ICSState *ics = QLIST_FIRST(&xics->ics);
366
/* This needs to be deprecated ... */
367
xics->nr_irqs = nr_irqs;
369
ics->nr_irqs = nr_irqs;
373
static void xics_kvm_set_nr_servers(XICSState *xics, uint32_t nr_servers,
376
xics_set_nr_servers(xics, nr_servers, TYPE_KVM_ICP, errp);
379
356
static void rtas_dummy(PowerPCCPU *cpu, sPAPRMachineState *spapr,
388
static void xics_kvm_realize(DeviceState *dev, Error **errp)
365
int xics_kvm_init(sPAPRMachineState *spapr, Error **errp)
390
KVMXICSState *xicskvm = XICS_SPAPR_KVM(dev);
391
XICSState *xics = XICS_COMMON(dev);
395
368
struct kvm_create_device xics_create_device = {
396
369
.type = KVM_DEV_TYPE_XICS,
442
xicskvm->kernel_xics_fd = xics_create_device.fd;
444
QLIST_FOREACH(ics, &xics->ics, list) {
445
object_property_set_bool(OBJECT(ics), true, "realized", &error);
447
error_propagate(errp, error);
452
assert(xics->nr_servers);
453
for (i = 0; i < xics->nr_servers; i++) {
454
object_property_set_bool(OBJECT(&xics->ss[i]), true, "realized",
457
error_propagate(errp, error);
415
kernel_xics_fd = xics_create_device.fd;
462
417
kvm_kernel_irqchip = true;
463
418
kvm_msi_via_irqfd_allowed = true;
464
419
kvm_gsi_direct_mapping = true;
469
424
kvmppc_define_rtas_kernel_token(0, "ibm,set-xive");
470
425
kvmppc_define_rtas_kernel_token(0, "ibm,get-xive");
471
426
kvmppc_define_rtas_kernel_token(0, "ibm,int-on");
472
427
kvmppc_define_rtas_kernel_token(0, "ibm,int-off");
475
static void xics_kvm_initfn(Object *obj)
477
XICSState *xics = XICS_COMMON(obj);
480
ics = ICS_SIMPLE(object_new(TYPE_ICS_KVM));
481
object_property_add_child(obj, "ics", OBJECT(ics), NULL);
483
QLIST_INSERT_HEAD(&xics->ics, ics, list);
486
static void xics_kvm_class_init(ObjectClass *oc, void *data)
488
DeviceClass *dc = DEVICE_CLASS(oc);
489
XICSStateClass *xsc = XICS_COMMON_CLASS(oc);
491
dc->realize = xics_kvm_realize;
492
xsc->cpu_setup = xics_kvm_cpu_setup;
493
xsc->set_nr_irqs = xics_kvm_set_nr_irqs;
494
xsc->set_nr_servers = xics_kvm_set_nr_servers;
497
static const TypeInfo xics_spapr_kvm_info = {
498
.name = TYPE_XICS_SPAPR_KVM,
499
.parent = TYPE_XICS_COMMON,
500
.instance_size = sizeof(KVMXICSState),
501
.class_init = xics_kvm_class_init,
502
.instance_init = xics_kvm_initfn,
505
431
static void xics_kvm_register_types(void)
507
type_register_static(&xics_spapr_kvm_info);
508
433
type_register_static(&ics_kvm_info);
509
434
type_register_static(&icp_kvm_info);