diff options
Diffstat (limited to 'arch/x86/kvm/i8254.h')
| -rw-r--r-- | arch/x86/kvm/i8254.h | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/arch/x86/kvm/i8254.h b/arch/x86/kvm/i8254.h index 46d08ca0b48..dd1b16b611b 100644 --- a/arch/x86/kvm/i8254.h +++ b/arch/x86/kvm/i8254.h @@ -1,6 +1,8 @@  #ifndef __I8254_H  #define __I8254_H +#include <linux/kthread.h> +  #include "iodev.h"  struct kvm_kpit_channel_state { @@ -22,8 +24,12 @@ struct kvm_kpit_channel_state {  struct kvm_kpit_state {  	struct kvm_kpit_channel_state channels[3];  	u32 flags; -	struct kvm_timer pit_timer;  	bool is_periodic; +	s64 period; 				/* unit: ns */ +	struct hrtimer timer; +	atomic_t pending;			/* accumulated triggered timers */ +	bool reinject; +	struct kvm *kvm;  	u32    speaker_data_on;  	struct mutex lock;  	struct kvm_pit *pit; @@ -33,15 +39,15 @@ struct kvm_kpit_state {  };  struct kvm_pit { -	unsigned long base_addresss;  	struct kvm_io_device dev;  	struct kvm_io_device speaker_dev;  	struct kvm *kvm;  	struct kvm_kpit_state pit_state;  	int irq_source_id;  	struct kvm_irq_mask_notifier mask_notifier; -	struct workqueue_struct *wq; -	struct work_struct expired; +	struct kthread_worker worker; +	struct task_struct *worker_task; +	struct kthread_work expired;  };  #define KVM_PIT_BASE_ADDRESS	    0x40 @@ -51,7 +57,6 @@ struct kvm_pit {  #define KVM_MAX_PIT_INTR_INTERVAL   HZ / 100  #define KVM_PIT_CHANNEL_MASK	    0x3 -void kvm_inject_pit_timer_irqs(struct kvm_vcpu *vcpu);  void kvm_pit_load_count(struct kvm *kvm, int channel, u32 val, int hpet_legacy_start);  struct kvm_pit *kvm_create_pit(struct kvm *kvm, u32 flags);  void kvm_free_pit(struct kvm *kvm);  | 
