On 14/01/13 19:19, Christoffer Dall wrote: > On Mon, Jan 14, 2013 at 10:18 AM, Will Deacon <will.deacon@xxxxxxx> wrote: >> On Tue, Jan 08, 2013 at 06:43:20PM +0000, Christoffer Dall wrote: >>> From: Marc Zyngier <marc.zyngier@xxxxxxx> >>> >>> Add some the architected timer related infrastructure, and support timer >>> interrupt injection, which can happen as a resultof three possible >>> events: >>> >>> - The virtual timer interrupt has fired while we were still >>> executing the guest >>> - The timer interrupt hasn't fired, but it expired while we >>> were doing the world switch >>> - A hrtimer we programmed earlier has fired >> >> [...] >> >>> +void kvm_timer_sync_to_cpu(struct kvm_vcpu *vcpu) >>> +{ >>> + struct arch_timer_cpu *timer = &vcpu->arch.timer_cpu; >>> + >>> + /* >>> + * We're about to run this vcpu again, so there is no need to >>> + * keep the background timer running, as we're about to >>> + * populate the CPU timer again. >>> + */ >>> + timer_disarm(timer); >>> +} >>> + >>> +void kvm_timer_sync_from_cpu(struct kvm_vcpu *vcpu) >>> +{ >>> + struct arch_timer_cpu *timer = &vcpu->arch.timer_cpu; >>> + cycle_t cval, now; >>> + u64 ns; >>> + >>> + /* Check if the timer is enabled and unmasked first */ >>> + if ((timer->cntv_ctl & 3) != 1) >>> + return; >>> + >>> + cval = timer->cntv_cval; >>> + now = kvm_phys_timer_read() - vcpu->kvm->arch.timer.cntvoff; >>> + >>> + BUG_ON(timer_is_armed(timer)); >>> + >>> + if (cval <= now) { >>> + /* >>> + * Timer has already expired while we were not >>> + * looking. Inject the interrupt and carry on. >>> + */ >>> + kvm_timer_inject_irq(vcpu); >>> + return; >>> + } >>> + >>> + ns = cyclecounter_cyc2ns(timecounter->cc, cval - now); >>> + timer_arm(timer, ns); >>> +} >> >> Please use flush/sync terminology to match the rest of arch/arm/. >> > ok, the following fixes this for both timers and the vgic: > > commit 1b68f39459dbc797f6766c103edf2c1053984161 > Author: Christoffer Dall <c.dall@xxxxxxxxxxxxxxxxxxxxxx> > Date: Mon Jan 14 14:16:31 2013 -0500 > > KVM: ARM: vgic: use sync/flush terminology > > Use sync/flush for saving state to/from CPUs to be consistent with > other uses in arch/arm. Sync and flush on their own are pretty inexpressive. Consider changing it to {flush,sync}_hwstate, so we're consistent with what VFP does. M. -- Jazz is not dead. It just smells funny... -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html