diff options
| author | Paolo Bonzini <[email protected]> | 2016-08-18 12:19:19 +0200 | 
|---|---|---|
| committer | Paolo Bonzini <[email protected]> | 2016-08-18 12:19:19 +0200 | 
| commit | 2eeb321fd2e24c0910e96e82509a961d1531fa29 (patch) | |
| tree | 800cea75783554f02e9b0254707346d54516546e /virt/kvm/arm/arch_timer.c | |
| parent | c95ba92afb238ac565c68968fc72e38ca8d1b6e8 (diff) | |
| parent | f7f6f2d94f0027242ddfd665289b107a873fde43 (diff) | |
Merge tag 'kvm-arm-for-v4.8-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
KVM/ARM Fixes for v4.8-rc3
This tag contains the following fixes on top of v4.8-rc1:
 - ITS init issues
 - ITS error handling issues
 - ITS IRQ leakage fix
 - Plug a couple of ITS race conditions
 - An erratum workaround for timers
 - Some removal of misleading use of errors and comments
 - A fix for GICv3 on 32-bit guests
Diffstat (limited to 'virt/kvm/arm/arch_timer.c')
| -rw-r--r-- | virt/kvm/arm/arch_timer.c | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c index 4fde8c7dfcfe..77e6ccf14901 100644 --- a/virt/kvm/arm/arch_timer.c +++ b/virt/kvm/arm/arch_timer.c @@ -33,6 +33,7 @@  static struct timecounter *timecounter;  static struct workqueue_struct *wqueue;  static unsigned int host_vtimer_irq; +static u32 host_vtimer_irq_flags;  void kvm_timer_vcpu_put(struct kvm_vcpu *vcpu)  { @@ -365,7 +366,7 @@ void kvm_timer_vcpu_init(struct kvm_vcpu *vcpu)  static void kvm_timer_init_interrupt(void *info)  { -	enable_percpu_irq(host_vtimer_irq, 0); +	enable_percpu_irq(host_vtimer_irq, host_vtimer_irq_flags);  }  int kvm_arm_timer_set_reg(struct kvm_vcpu *vcpu, u64 regid, u64 value) @@ -432,6 +433,14 @@ int kvm_timer_hyp_init(void)  	}  	host_vtimer_irq = info->virtual_irq; +	host_vtimer_irq_flags = irq_get_trigger_type(host_vtimer_irq); +	if (host_vtimer_irq_flags != IRQF_TRIGGER_HIGH && +	    host_vtimer_irq_flags != IRQF_TRIGGER_LOW) { +		kvm_err("Invalid trigger for IRQ%d, assuming level low\n", +			host_vtimer_irq); +		host_vtimer_irq_flags = IRQF_TRIGGER_LOW; +	} +  	err = request_percpu_irq(host_vtimer_irq, kvm_arch_timer_handler,  				 "kvm guest timer", kvm_get_running_vcpus());  	if (err) {  |