Lines Matching refs:pit
251 queue_kthread_work(&ps->pit->worker, &ps->pit->expired); in kvm_pit_ack_irq()
258 struct kvm_pit *pit = vcpu->kvm->arch.vpit; in __kvm_migrate_pit_timer() local
261 if (!kvm_vcpu_is_bsp(vcpu) || !pit) in __kvm_migrate_pit_timer()
264 timer = &pit->pit_state.timer; in __kvm_migrate_pit_timer()
265 mutex_lock(&pit->pit_state.lock); in __kvm_migrate_pit_timer()
268 mutex_unlock(&pit->pit_state.lock); in __kvm_migrate_pit_timer()
271 static void destroy_pit_timer(struct kvm_pit *pit) in destroy_pit_timer() argument
273 hrtimer_cancel(&pit->pit_state.timer); in destroy_pit_timer()
274 flush_kthread_work(&pit->expired); in destroy_pit_timer()
279 struct kvm_pit *pit = container_of(work, struct kvm_pit, expired); in pit_do_work() local
280 struct kvm *kvm = pit->kvm; in pit_do_work()
283 struct kvm_kpit_state *ps = &pit->pit_state; in pit_do_work()
347 flush_kthread_work(&ps->pit->expired); in create_pit_timer()
352 ps->kvm = ps->pit->kvm; in create_pit_timer()
452 struct kvm_pit *pit = dev_to_pit(this); in pit_ioport_write() local
453 struct kvm_kpit_state *pit_state = &pit->pit_state; in pit_ioport_write()
454 struct kvm *kvm = pit->kvm; in pit_ioport_write()
529 struct kvm_pit *pit = dev_to_pit(this); in pit_ioport_read() local
530 struct kvm_kpit_state *pit_state = &pit->pit_state; in pit_ioport_read()
531 struct kvm *kvm = pit->kvm; in pit_ioport_read()
600 struct kvm_pit *pit = speaker_to_pit(this); in speaker_ioport_write() local
601 struct kvm_kpit_state *pit_state = &pit->pit_state; in speaker_ioport_write()
602 struct kvm *kvm = pit->kvm; in speaker_ioport_write()
618 struct kvm_pit *pit = speaker_to_pit(this); in speaker_ioport_read() local
619 struct kvm_kpit_state *pit_state = &pit->pit_state; in speaker_ioport_read()
620 struct kvm *kvm = pit->kvm; in speaker_ioport_read()
639 void kvm_pit_reset(struct kvm_pit *pit) in kvm_pit_reset() argument
644 mutex_lock(&pit->pit_state.lock); in kvm_pit_reset()
645 pit->pit_state.flags = 0; in kvm_pit_reset()
647 c = &pit->pit_state.channels[i]; in kvm_pit_reset()
650 pit_load_count(pit->kvm, i, 0); in kvm_pit_reset()
652 mutex_unlock(&pit->pit_state.lock); in kvm_pit_reset()
654 atomic_set(&pit->pit_state.pending, 0); in kvm_pit_reset()
655 pit->pit_state.irq_ack = 1; in kvm_pit_reset()
660 struct kvm_pit *pit = container_of(kimn, struct kvm_pit, mask_notifier); in pit_mask_notifer() local
663 atomic_set(&pit->pit_state.pending, 0); in pit_mask_notifer()
664 pit->pit_state.irq_ack = 1; in pit_mask_notifer()
681 struct kvm_pit *pit; in kvm_create_pit() local
687 pit = kzalloc(sizeof(struct kvm_pit), GFP_KERNEL); in kvm_create_pit()
688 if (!pit) in kvm_create_pit()
691 pit->irq_source_id = kvm_request_irq_source_id(kvm); in kvm_create_pit()
692 if (pit->irq_source_id < 0) { in kvm_create_pit()
693 kfree(pit); in kvm_create_pit()
697 mutex_init(&pit->pit_state.lock); in kvm_create_pit()
698 mutex_lock(&pit->pit_state.lock); in kvm_create_pit()
699 spin_lock_init(&pit->pit_state.inject_lock); in kvm_create_pit()
705 init_kthread_worker(&pit->worker); in kvm_create_pit()
706 pit->worker_task = kthread_run(kthread_worker_fn, &pit->worker, in kvm_create_pit()
708 if (IS_ERR(pit->worker_task)) { in kvm_create_pit()
709 mutex_unlock(&pit->pit_state.lock); in kvm_create_pit()
710 kvm_free_irq_source_id(kvm, pit->irq_source_id); in kvm_create_pit()
711 kfree(pit); in kvm_create_pit()
714 init_kthread_work(&pit->expired, pit_do_work); in kvm_create_pit()
716 kvm->arch.vpit = pit; in kvm_create_pit()
717 pit->kvm = kvm; in kvm_create_pit()
719 pit_state = &pit->pit_state; in kvm_create_pit()
720 pit_state->pit = pit; in kvm_create_pit()
726 mutex_unlock(&pit->pit_state.lock); in kvm_create_pit()
728 kvm_pit_reset(pit); in kvm_create_pit()
730 pit->mask_notifier.func = pit_mask_notifer; in kvm_create_pit()
731 kvm_register_irq_mask_notifier(kvm, 0, &pit->mask_notifier); in kvm_create_pit()
733 kvm_iodevice_init(&pit->dev, &pit_dev_ops); in kvm_create_pit()
735 KVM_PIT_MEM_LENGTH, &pit->dev); in kvm_create_pit()
740 kvm_iodevice_init(&pit->speaker_dev, &speaker_dev_ops); in kvm_create_pit()
743 &pit->speaker_dev); in kvm_create_pit()
748 return pit; in kvm_create_pit()
751 kvm_io_bus_unregister_dev(kvm, KVM_PIO_BUS, &pit->dev); in kvm_create_pit()
754 kvm_unregister_irq_mask_notifier(kvm, 0, &pit->mask_notifier); in kvm_create_pit()
756 kvm_free_irq_source_id(kvm, pit->irq_source_id); in kvm_create_pit()
757 kthread_stop(pit->worker_task); in kvm_create_pit()
758 kfree(pit); in kvm_create_pit()