public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
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/

  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