Lines Matching refs:pit
252 queue_kthread_work(&ps->pit->worker, &ps->pit->expired); in kvm_pit_ack_irq()
259 struct kvm_pit *pit = vcpu->kvm->arch.vpit; in __kvm_migrate_pit_timer() local
262 if (!kvm_vcpu_is_bsp(vcpu) || !pit) in __kvm_migrate_pit_timer()
265 timer = &pit->pit_state.timer; in __kvm_migrate_pit_timer()
266 mutex_lock(&pit->pit_state.lock); in __kvm_migrate_pit_timer()
269 mutex_unlock(&pit->pit_state.lock); in __kvm_migrate_pit_timer()
272 static void destroy_pit_timer(struct kvm_pit *pit) in destroy_pit_timer() argument
274 hrtimer_cancel(&pit->pit_state.timer); in destroy_pit_timer()
275 flush_kthread_work(&pit->expired); in destroy_pit_timer()
280 struct kvm_pit *pit = container_of(work, struct kvm_pit, expired); in pit_do_work() local
281 struct kvm *kvm = pit->kvm; in pit_do_work()
284 struct kvm_kpit_state *ps = &pit->pit_state; in pit_do_work()
349 flush_kthread_work(&ps->pit->expired); in create_pit_timer()
354 ps->kvm = ps->pit->kvm; in create_pit_timer()
455 struct kvm_pit *pit = dev_to_pit(this); in pit_ioport_write() local
456 struct kvm_kpit_state *pit_state = &pit->pit_state; in pit_ioport_write()
457 struct kvm *kvm = pit->kvm; in pit_ioport_write()
532 struct kvm_pit *pit = dev_to_pit(this); in pit_ioport_read() local
533 struct kvm_kpit_state *pit_state = &pit->pit_state; in pit_ioport_read()
534 struct kvm *kvm = pit->kvm; in pit_ioport_read()
603 struct kvm_pit *pit = speaker_to_pit(this); in speaker_ioport_write() local
604 struct kvm_kpit_state *pit_state = &pit->pit_state; in speaker_ioport_write()
605 struct kvm *kvm = pit->kvm; in speaker_ioport_write()
621 struct kvm_pit *pit = speaker_to_pit(this); in speaker_ioport_read() local
622 struct kvm_kpit_state *pit_state = &pit->pit_state; in speaker_ioport_read()
623 struct kvm *kvm = pit->kvm; in speaker_ioport_read()
642 void kvm_pit_reset(struct kvm_pit *pit) in kvm_pit_reset() argument
647 mutex_lock(&pit->pit_state.lock); in kvm_pit_reset()
648 pit->pit_state.flags = 0; in kvm_pit_reset()
650 c = &pit->pit_state.channels[i]; in kvm_pit_reset()
653 pit_load_count(pit->kvm, i, 0); in kvm_pit_reset()
655 mutex_unlock(&pit->pit_state.lock); in kvm_pit_reset()
657 atomic_set(&pit->pit_state.pending, 0); in kvm_pit_reset()
658 pit->pit_state.irq_ack = 1; in kvm_pit_reset()
663 struct kvm_pit *pit = container_of(kimn, struct kvm_pit, mask_notifier); in pit_mask_notifer() local
666 atomic_set(&pit->pit_state.pending, 0); in pit_mask_notifer()
667 pit->pit_state.irq_ack = 1; in pit_mask_notifer()
684 struct kvm_pit *pit; in kvm_create_pit() local
690 pit = kzalloc(sizeof(struct kvm_pit), GFP_KERNEL); in kvm_create_pit()
691 if (!pit) in kvm_create_pit()
694 pit->irq_source_id = kvm_request_irq_source_id(kvm); in kvm_create_pit()
695 if (pit->irq_source_id < 0) { in kvm_create_pit()
696 kfree(pit); in kvm_create_pit()
700 mutex_init(&pit->pit_state.lock); in kvm_create_pit()
701 mutex_lock(&pit->pit_state.lock); in kvm_create_pit()
702 spin_lock_init(&pit->pit_state.inject_lock); in kvm_create_pit()
708 init_kthread_worker(&pit->worker); in kvm_create_pit()
709 pit->worker_task = kthread_run(kthread_worker_fn, &pit->worker, in kvm_create_pit()
711 if (IS_ERR(pit->worker_task)) { in kvm_create_pit()
712 mutex_unlock(&pit->pit_state.lock); in kvm_create_pit()
713 kvm_free_irq_source_id(kvm, pit->irq_source_id); in kvm_create_pit()
714 kfree(pit); in kvm_create_pit()
717 init_kthread_work(&pit->expired, pit_do_work); in kvm_create_pit()
719 kvm->arch.vpit = pit; in kvm_create_pit()
720 pit->kvm = kvm; in kvm_create_pit()
722 pit_state = &pit->pit_state; in kvm_create_pit()
723 pit_state->pit = pit; in kvm_create_pit()
729 mutex_unlock(&pit->pit_state.lock); in kvm_create_pit()
731 kvm_pit_reset(pit); in kvm_create_pit()
733 pit->mask_notifier.func = pit_mask_notifer; in kvm_create_pit()
734 kvm_register_irq_mask_notifier(kvm, 0, &pit->mask_notifier); in kvm_create_pit()
736 kvm_iodevice_init(&pit->dev, &pit_dev_ops); in kvm_create_pit()
738 KVM_PIT_MEM_LENGTH, &pit->dev); in kvm_create_pit()
743 kvm_iodevice_init(&pit->speaker_dev, &speaker_dev_ops); in kvm_create_pit()
746 &pit->speaker_dev); in kvm_create_pit()
751 return pit; in kvm_create_pit()
754 kvm_io_bus_unregister_dev(kvm, KVM_PIO_BUS, &pit->dev); in kvm_create_pit()
757 kvm_unregister_irq_mask_notifier(kvm, 0, &pit->mask_notifier); in kvm_create_pit()
759 kvm_free_irq_source_id(kvm, pit->irq_source_id); in kvm_create_pit()
760 kthread_stop(pit->worker_task); in kvm_create_pit()
761 kfree(pit); in kvm_create_pit()