Lines Matching +full:- +full:- +full:disable +full:- +full:attr

9  * your option) any later version. See the COPYING file in the top-level
16 #include "qemu/error-report.h"
23 #include "migration/qemu-file-types.h"
28 #define FLIC_FAILED (-1UL)
50 * flic_get_all_irqs - store all pending irqs in buffer
55 * Returns: -ENOMEM if buffer is too small,
56 * -EINVAL if attr.group is invalid,
57 * -EFAULT if copying to userspace failed,
63 struct kvm_device_attr attr = { in flic_get_all_irqs() local
66 .attr = len, in flic_get_all_irqs()
70 rc = ioctl(flic->fd, KVM_GET_DEVICE_ATTR, &attr); in flic_get_all_irqs()
72 return rc == -1 ? -errno : rc; in flic_get_all_irqs()
77 struct kvm_device_attr attr = { in flic_enable_pfault() local
82 rc = ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr); in flic_enable_pfault()
91 struct kvm_device_attr attr = { in flic_disable_wait_pfault() local
96 rc = ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr); in flic_disable_wait_pfault()
99 fprintf(stderr, "flic: couldn't disable pfault\n"); in flic_disable_wait_pfault()
103 /** flic_enqueue_irqs - returns 0 on success
108 * Returns: -EINVAL if attr.group is unknown
114 struct kvm_device_attr attr = { in flic_enqueue_irqs() local
117 .attr = len, in flic_enqueue_irqs()
120 rc = ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr); in flic_enqueue_irqs()
122 return rc ? -errno : 0; in flic_enqueue_irqs()
132 if (r == -ENOSYS) { in kvm_s390_inject_flic()
191 struct kvm_device_attr attr = { in kvm_s390_clear_io_flic() local
194 .attr = sizeof(sid), in kvm_s390_clear_io_flic()
196 if (unlikely(!flic->clear_io_supported)) { in kvm_s390_clear_io_flic()
197 return -ENOSYS; in kvm_s390_clear_io_flic()
199 rc = ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr); in kvm_s390_clear_io_flic()
200 return rc ? -errno : 0; in kvm_s390_clear_io_flic()
211 struct kvm_device_attr attr = { in kvm_s390_modify_ais_mode() local
216 if (!fs->ais_supported) { in kvm_s390_modify_ais_mode()
217 return -ENOSYS; in kvm_s390_modify_ais_mode()
220 return ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr) ? -errno : 0; in kvm_s390_modify_ais_mode()
228 struct kvm_device_attr attr = { in kvm_s390_inject_airq() local
230 .attr = id, in kvm_s390_inject_airq()
233 if (!fs->ais_supported) { in kvm_s390_inject_airq()
234 return -ENOSYS; in kvm_s390_inject_airq()
237 return ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr) ? -errno : 0; in kvm_s390_inject_airq()
241 * __get_all_irqs - store all pending irqs in buffer
249 * -ENOMEM is an exception, which means the buffer is too small
251 * -EFAULT and -EINVAL which we ignore at this point
259 /* returns -ENOMEM if buffer is too small and number in __get_all_irqs()
268 return -ENOMEM; in __get_all_irqs()
270 } while (r == -ENOMEM && len <= KVM_S390_FLIC_MAX_BUFFER); in __get_all_irqs()
288 struct kvm_device_attr attr = { in kvm_s390_register_io_adapter() local
298 r = ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr); in kvm_s390_register_io_adapter()
300 return r ? -errno : 0; in kvm_s390_register_io_adapter()
311 struct kvm_device_attr attr = { in kvm_s390_io_adapter_map() local
323 r = ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr); in kvm_s390_io_adapter_map()
324 return r ? -errno : 0; in kvm_s390_io_adapter_map()
333 return -ENOSYS; in kvm_irqchip_add_adapter_route()
344 kroute.u.adapter.summary_addr = adapter->summary_addr; in kvm_irqchip_add_adapter_route()
345 kroute.u.adapter.ind_addr = adapter->ind_addr; in kvm_irqchip_add_adapter_route()
346 kroute.u.adapter.summary_offset = adapter->summary_offset; in kvm_irqchip_add_adapter_route()
347 kroute.u.adapter.ind_offset = adapter->ind_offset; in kvm_irqchip_add_adapter_route()
348 kroute.u.adapter.adapter_id = adapter->adapter_id; in kvm_irqchip_add_adapter_route()
359 uint64_t ind_offset = routes->adapter.ind_offset; in kvm_s390_add_adapter_routes()
362 return -ENOSYS; in kvm_s390_add_adapter_routes()
365 for (i = 0; i < routes->num_routes; i++) { in kvm_s390_add_adapter_routes()
366 ret = kvm_irqchip_add_adapter_route(kvm_state, &routes->adapter); in kvm_s390_add_adapter_routes()
370 routes->gsi[i] = ret; in kvm_s390_add_adapter_routes()
371 routes->adapter.ind_offset++; in kvm_s390_add_adapter_routes()
375 /* Restore passed-in structure to original state. */ in kvm_s390_add_adapter_routes()
376 routes->adapter.ind_offset = ind_offset; in kvm_s390_add_adapter_routes()
379 while (--i >= 0) { in kvm_s390_add_adapter_routes()
380 kvm_irqchip_release_virq(kvm_state, routes->gsi[i]); in kvm_s390_add_adapter_routes()
381 routes->gsi[i] = -1; in kvm_s390_add_adapter_routes()
383 routes->adapter.ind_offset = ind_offset; in kvm_s390_add_adapter_routes()
396 for (i = 0; i < routes->num_routes; i++) { in kvm_s390_release_adapter_routes()
397 if (routes->gsi[i] >= 0) { in kvm_s390_release_adapter_routes()
398 kvm_irqchip_release_virq(kvm_state, routes->gsi[i]); in kvm_s390_release_adapter_routes()
399 routes->gsi[i] = -1; in kvm_s390_release_adapter_routes()
405 * kvm_flic_save - Save pending floating interrupts
432 return -ENOMEM; in kvm_flic_save()
455 * kvm_flic_load - Load pending floating interrupts
460 * Returns: value of flic_enqueue_irqs, -EINVAL on error
477 return -EINVAL; in kvm_flic_load()
484 return -ENOMEM; in kvm_flic_load()
488 r = -EINVAL; in kvm_flic_load()
507 KVMS390FLICState *flic = tmp->parent; in kvm_flic_ais_pre_save()
509 struct kvm_device_attr attr = { in kvm_flic_ais_pre_save() local
512 .attr = sizeof(ais), in kvm_flic_ais_pre_save()
515 if (ioctl(flic->fd, KVM_GET_DEVICE_ATTR, &attr)) { in kvm_flic_ais_pre_save()
517 return -EINVAL; in kvm_flic_ais_pre_save()
520 tmp->simm = ais.simm; in kvm_flic_ais_pre_save()
521 tmp->nimm = ais.nimm; in kvm_flic_ais_pre_save()
529 KVMS390FLICState *flic = tmp->parent; in kvm_flic_ais_post_load()
531 .simm = tmp->simm, in kvm_flic_ais_post_load()
532 .nimm = tmp->nimm, in kvm_flic_ais_post_load()
534 struct kvm_device_attr attr = { in kvm_flic_ais_post_load() local
539 /* This can happen when the user mis-configures its guests in an in kvm_flic_ais_post_load()
541 * qemu with -cpu host (which is not migration safe) and do a in kvm_flic_ais_post_load()
546 return -ENOSYS; in kvm_flic_ais_post_load()
549 return ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr) ? -errno : 0; in kvm_flic_ais_post_load()
553 .name = "s390-flic-ais-tmp",
564 .name = "s390-flic/ais",
576 /* should have been like kvm-s390-flic,
578 .name = "s390-flic",
617 KVM_S390_FLIC_GET_CLASS(dev)->parent_realize(dev, &err); in DECLARE_CLASS_CHECKERS()
622 flic_state->fd = -1; in DECLARE_CLASS_CHECKERS()
631 flic_state->fd = cd.fd; in DECLARE_CLASS_CHECKERS()
635 flic_state->clear_io_supported = !ioctl(flic_state->fd, in DECLARE_CLASS_CHECKERS()
643 struct kvm_device_attr attr = { in kvm_s390_flic_reset() local
649 if (flic->fd == -1) { in kvm_s390_flic_reset()
655 if (fs->ais_supported) { in kvm_s390_flic_reset()
660 isc, strerror(-rc)); in kvm_s390_flic_reset()
665 rc = ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr); in kvm_s390_flic_reset()
680 &kfsc->parent_realize); in kvm_s390_flic_class_init()
681 dc->vmsd = &kvm_s390_flic_vmstate; in kvm_s390_flic_class_init()
683 fsc->register_io_adapter = kvm_s390_register_io_adapter; in kvm_s390_flic_class_init()
684 fsc->io_adapter_map = kvm_s390_io_adapter_map; in kvm_s390_flic_class_init()
685 fsc->add_adapter_routes = kvm_s390_add_adapter_routes; in kvm_s390_flic_class_init()
686 fsc->release_adapter_routes = kvm_s390_release_adapter_routes; in kvm_s390_flic_class_init()
687 fsc->clear_io_irq = kvm_s390_clear_io_flic; in kvm_s390_flic_class_init()
688 fsc->modify_ais_mode = kvm_s390_modify_ais_mode; in kvm_s390_flic_class_init()
689 fsc->inject_airq = kvm_s390_inject_airq; in kvm_s390_flic_class_init()
690 fsc->inject_service = kvm_s390_inject_service; in kvm_s390_flic_class_init()
691 fsc->inject_io = kvm_s390_inject_io; in kvm_s390_flic_class_init()
692 fsc->inject_crw_mchk = kvm_s390_inject_crw_mchk; in kvm_s390_flic_class_init()