cleanup: last_update should precisely reflect the time when an hrtimer is fired, and store the period of apic timer to avoid calculation each time. Signed-off-by: Yaozu (Eddie) Dong <[EMAIL PROTECTED]>
diff --git a/drivers/kvm/irq.h b/drivers/kvm/irq.h index 44e1fa4..ed6d20a 100644 --- a/drivers/kvm/irq.h +++ b/drivers/kvm/irq.h @@ -111,6 +111,7 @@ struct kvm_lapic { struct kvm_io_device dev; struct { unsigned long pending; + s64 period; /* unit: ns */ u32 divide_count; ktime_t last_update; struct hrtimer dev; diff --git a/drivers/kvm/lapic.c b/drivers/kvm/lapic.c index fc53e88..352b8a7 100644 --- a/drivers/kvm/lapic.c +++ b/drivers/kvm/lapic.c @@ -627,11 +627,10 @@ static void apic_mmio_write(struct kvm_io_device *this, case APIC_TMICT: { ktime_t now = apic->timer.dev.base->get_time(); - u32 offset; apic_set_reg(apic, APIC_TMICT, val); apic->timer.last_update = now; - offset = + apic->timer.period = APIC_BUS_CYCLE_NS * apic->timer.divide_count * val; /* Make sure the lock ordering is coherent */ @@ -861,7 +860,6 @@ EXPORT_SYMBOL_GPL(kvm_lapic_get_regs); static int __apic_timer_fn(struct kvm_lapic *apic) { u32 vector; - ktime_t now; int result = 0; if (unlikely(!apic_enabled(apic) || @@ -872,8 +870,7 @@ static int __apic_timer_fn(struct kvm_lapic *apic) } vector = apic_lvt_vector(apic, APIC_LVTT); - now = apic->timer.dev.base->get_time(); - apic->timer.last_update = now; + apic->timer.last_update = apic->timer.dev.expires; apic->timer.pending++; __apic_accept_irq(apic, APIC_DM_FIXED, vector, 1, 0); @@ -884,7 +881,9 @@ static int __apic_timer_fn(struct kvm_lapic *apic) offset = APIC_BUS_CYCLE_NS * apic->timer.divide_count * tmict; result = 1; - apic->timer.dev.expires = ktime_add_ns(now, offset); + apic->timer.dev.expires = ktime_add_ns( + apic->timer.dev.expires, + apic->timer.period); } return result;
apic-timer-last2.patch
Description: apic-timer-last2.patch
------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel