From: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
To: "Dong, Eddie" <eddie.dong-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Cc: kvm-devel <kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
Subject: Re: add back pending timer irqs for kernel APIC timer
Date: Mon, 13 Aug 2007 14:21:10 +0300 [thread overview]
Message-ID: <46C03EA6.7030709@qumranet.com> (raw)
In-Reply-To: <10EA09EFD8728347A513008B6B0DA77A01E8DA9B-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
Dong, Eddie wrote:
> kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote:
>
>> Add back pending irqs for apic timer to get precise guest APIC
>> timer interrupt.
>>
>> Signed-off-by: Yaozu (Eddie) Dong <Eddie.Dong-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
>>
>>
>>
> a typo, please use this one.
>
> With above patches, now guest timer is much accurate! sleep 60
> get exactly 60 seconds in host per my rough test.
>
> BTW, AMD platform is not tested.
>
> thx,eddie
>
>
> diff --git a/drivers/kvm/irq.h b/drivers/kvm/irq.h
> index ed6d20a..8867c82 100644
> --- a/drivers/kvm/irq.h
> +++ b/drivers/kvm/irq.h
> @@ -110,7 +110,7 @@ struct kvm_lapic {
> unsigned long base_address;
> struct kvm_io_device dev;
> struct {
> - unsigned long pending;
> + atomic_t pending;
> s64 period; /* unit: ns */
> u32 divide_count;
> ktime_t last_update;
> @@ -153,5 +153,7 @@ int kvm_apic_set_irq(struct kvm_lapic *apic, u8 vec,
> u8 trig);
> void kvm_apic_post_state_restore(struct kvm_vcpu *vcpu);
> int kvm_ioapic_init(struct kvm *kvm);
> void kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int level);
> +void kvm_pt_intr_post(struct kvm_vcpu *vcpu, int vec);
> +void kvm_pt_update_irq(struct kvm_vcpu *vcpu);
>
What does "pt" mean in this context? "pending timer"?
Suggested descriptive names below.
> *----------------------------------------------------------------------
> */
> +
> +/* TODO: make sure __apic_timer_fn runs in current pCPU */
> static int __apic_timer_fn(struct kvm_lapic *apic)
> {
> - u32 vector;
> int result = 0;
>
> - if (unlikely(!apic_enabled(apic) ||
> - !apic_lvt_enabled(apic, APIC_LVTT))) {
> - apic_debug("%s: time interrupt although apic is down\n",
> - __FUNCTION__);
> - return 0;
> - }
> -
> - vector = apic_lvt_vector(apic, APIC_LVTT);
> - apic->timer.last_update = apic->timer.dev.expires;
> - apic->timer.pending++;
> - __apic_accept_irq(apic, APIC_DM_FIXED, vector, 1, 0);
> -
> + atomic_inc (&apic->timer.pending);
>
Extra space.
> if (apic_lvtt_period(apic)) {
> - u32 offset;
> - u32 tmict = apic_get_reg(apic, APIC_TMICT);
> -
> - offset = APIC_BUS_CYCLE_NS * apic->timer.divide_count *
> tmict;
> -
> result = 1;
> apic->timer.dev.expires = ktime_add_ns(
> apic->timer.dev.expires,
> apic->timer.period);
> }
> -
> return result;
> }
>
While this improves throughput, doesn't it decrease responsiveness?
Suppose the guest is sleeping and there is no activity except for lapic
interrupts. Won't the wakeup get deferred indefinitely?
>
> +void kvm_pt_update_irq(struct kvm_vcpu *vcpu)
> +{
> + struct kvm_lapic *apic = vcpu->apic;
> +
> + if (apic && atomic_read(&apic->timer.pending) > 0) {
>
Extra braces. Also this smells like a race. What if timer.pending is
updated just after this?
> + if (inject_apic_timer_irq(apic))
> + atomic_dec(&apic->timer.pending);
> + }
> +}
> +EXPORT_SYMBOL_GPL(kvm_pt_update_irq);
>
How about "kvm_inject_pending_timer_irqs"
> +
> +void kvm_pt_intr_post(struct kvm_vcpu *vcpu, int vec)
> +{
> + struct kvm_lapic *apic = vcpu->apic;
> +
> + if (apic && apic_lvt_vector(apic, APIC_LVTT) == vec)
> + apic->timer.last_update = ktime_add_ns(
> + apic->timer.last_update,
> + apic->timer.period);
> +}
> +EXPORT_SYMBOL_GPL(kvm_pt_intr_post);
>
kvm_update_pending_timer_irq?
--
error compiling committee.c: too many arguments to function
-------------------------------------------------------------------------
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/
next prev parent reply other threads:[~2007-08-13 11:21 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-10 15:37 add back pending timer irqs for kernel APIC timer Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01E8DA94-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-10 15:56 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01E8DA9B-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-13 11:21 ` Avi Kivity [this message]
[not found] ` <46C03EA6.7030709-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-13 13:19 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A014E8AD0-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-13 13:25 ` Avi Kivity
[not found] ` <46C05BE0.4060908-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-13 13:31 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A014E8AD3-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-13 13:36 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A014E8AD4-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-13 13:38 ` Avi Kivity
2007-08-14 3:24 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01E8E40B-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-18 10:22 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01EE24C4-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-19 7:32 ` Avi Kivity
[not found] ` <46C7F204.5010008-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-24 7:18 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01F84464-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-24 13:06 ` Dong, Eddie
2007-08-25 8:40 ` Avi Kivity
[not found] ` <46CFEAF1.4050000-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-25 14:20 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01F84647-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-25 15:02 ` Avi Kivity
2007-08-10 17:03 ` Avi Kivity
[not found] ` <46BC9A7E.5040206-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-11 1:05 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A01E8DACC-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-13 8:50 ` Avi Kivity
[not found] ` <46C01B58.8080402-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-13 12:01 ` Gregory Haskins
[not found] ` <1187006514.4165.1.camel-5CR4LY5GPkvLDviKLk5550HKjMygAv58XqFh9Ls21Oc@public.gmane.org>
2007-08-13 13:29 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A014E8AD1-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-13 13:36 ` Avi Kivity
[not found] ` <46C05E6B.3080101-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-13 14:50 ` Dong, Eddie
[not found] ` <10EA09EFD8728347A513008B6B0DA77A014E8AD7-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-08-13 15:19 ` Avi Kivity
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46C03EA6.7030709@qumranet.com \
--to=avi-atkuwr5tajbwk0htik3j/w@public.gmane.org \
--cc=eddie.dong-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox