All of lore.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.