From: Ulrich Obergfell <uobergfe@redhat.com> To: qemu-devel@nongnu.org Cc: kvm@vger.kernel.org, uobergfe@redhat.com, gcosta@redhat.com, avi@redhat.com, mtosatti@redhat.com, zamsden@redhat.com, aliguori@us.ibm.com, jan.kiszka@siemens.com Subject: [PATCH v5 4/5] hpet 'driftfix': add code in update_irq() to detect coalesced interrupts (x86 apic only) Date: Fri, 20 May 2011 09:13:22 +0200 [thread overview] Message-ID: <1305875603-3104-5-git-send-email-uobergfe@redhat.com> (raw) In-Reply-To: <1305875603-3104-1-git-send-email-uobergfe@redhat.com> update_irq() uses a similar method as in 'rtc_td_hack' to detect coalesced interrupts. The function entry addresses are retrieved from 'target_get_irq_delivered' and 'target_reset_irq_delivered'. This change can be replaced if a generic feedback infrastructure to track coalesced IRQs for periodic, clock providing devices becomes available. Signed-off-by: Ulrich Obergfell <uobergfe@redhat.com> --- hw/hpet.c | 13 +++++++++++-- 1 files changed, 11 insertions(+), 2 deletions(-) diff --git a/hw/hpet.c b/hw/hpet.c index dba9370..0428290 100644 --- a/hw/hpet.c +++ b/hw/hpet.c @@ -184,11 +184,12 @@ static inline uint64_t hpet_calculate_diff(HPETTimer *t, uint64_t current) } } -static void update_irq(struct HPETTimer *timer, int set) +static int update_irq(struct HPETTimer *timer, int set) { uint64_t mask; HPETState *s; int route; + int irq_delivered = 1; if (timer->tn <= 1 && hpet_in_legacy_mode(timer->state)) { /* if LegacyReplacementRoute bit is set, HPET specification requires @@ -213,8 +214,16 @@ static void update_irq(struct HPETTimer *timer, int set) qemu_irq_raise(s->irqs[route]); } else { s->isr &= ~mask; - qemu_irq_pulse(s->irqs[route]); + if (s->driftfix) { + target_reset_irq_delivered(); + qemu_irq_raise(s->irqs[route]); + irq_delivered = target_get_irq_delivered(); + qemu_irq_lower(s->irqs[route]); + } else { + qemu_irq_pulse(s->irqs[route]); + } } + return irq_delivered; } static void hpet_pre_save(void *opaque) -- 1.6.2.5
WARNING: multiple messages have this Message-ID (diff)
From: Ulrich Obergfell <uobergfe@redhat.com> To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, mtosatti@redhat.com, kvm@vger.kernel.org, jan.kiszka@siemens.com, zamsden@redhat.com, uobergfe@redhat.com, gcosta@redhat.com, avi@redhat.com Subject: [Qemu-devel] [PATCH v5 4/5] hpet 'driftfix': add code in update_irq() to detect coalesced interrupts (x86 apic only) Date: Fri, 20 May 2011 09:13:22 +0200 [thread overview] Message-ID: <1305875603-3104-5-git-send-email-uobergfe@redhat.com> (raw) In-Reply-To: <1305875603-3104-1-git-send-email-uobergfe@redhat.com> update_irq() uses a similar method as in 'rtc_td_hack' to detect coalesced interrupts. The function entry addresses are retrieved from 'target_get_irq_delivered' and 'target_reset_irq_delivered'. This change can be replaced if a generic feedback infrastructure to track coalesced IRQs for periodic, clock providing devices becomes available. Signed-off-by: Ulrich Obergfell <uobergfe@redhat.com> --- hw/hpet.c | 13 +++++++++++-- 1 files changed, 11 insertions(+), 2 deletions(-) diff --git a/hw/hpet.c b/hw/hpet.c index dba9370..0428290 100644 --- a/hw/hpet.c +++ b/hw/hpet.c @@ -184,11 +184,12 @@ static inline uint64_t hpet_calculate_diff(HPETTimer *t, uint64_t current) } } -static void update_irq(struct HPETTimer *timer, int set) +static int update_irq(struct HPETTimer *timer, int set) { uint64_t mask; HPETState *s; int route; + int irq_delivered = 1; if (timer->tn <= 1 && hpet_in_legacy_mode(timer->state)) { /* if LegacyReplacementRoute bit is set, HPET specification requires @@ -213,8 +214,16 @@ static void update_irq(struct HPETTimer *timer, int set) qemu_irq_raise(s->irqs[route]); } else { s->isr &= ~mask; - qemu_irq_pulse(s->irqs[route]); + if (s->driftfix) { + target_reset_irq_delivered(); + qemu_irq_raise(s->irqs[route]); + irq_delivered = target_get_irq_delivered(); + qemu_irq_lower(s->irqs[route]); + } else { + qemu_irq_pulse(s->irqs[route]); + } } + return irq_delivered; } static void hpet_pre_save(void *opaque) -- 1.6.2.5
next prev parent reply other threads:[~2011-05-20 7:13 UTC|newest] Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-05-20 7:13 [PATCH v5 0/5] hpet 'driftfix': alleviate time drift with HPET periodic timers Ulrich Obergfell 2011-05-20 7:13 ` [Qemu-devel] " Ulrich Obergfell 2011-05-20 7:13 ` [PATCH v5 1/5] hpet 'driftfix': add hooks required to detect coalesced interrupts (x86 apic only) Ulrich Obergfell 2011-05-20 7:13 ` [Qemu-devel] " Ulrich Obergfell 2011-05-20 7:13 ` [PATCH v5 2/5] hpet 'driftfix': add driftfix property to HPETState and DeviceInfo Ulrich Obergfell 2011-05-20 7:13 ` [Qemu-devel] " Ulrich Obergfell 2011-05-20 7:13 ` [PATCH v5 3/5] hpet 'driftfix': add fields to HPETTimer and VMStateDescription Ulrich Obergfell 2011-05-20 7:13 ` [Qemu-devel] " Ulrich Obergfell 2011-05-20 7:13 ` Ulrich Obergfell [this message] 2011-05-20 7:13 ` [Qemu-devel] [PATCH v5 4/5] hpet 'driftfix': add code in update_irq() to detect coalesced interrupts (x86 apic only) Ulrich Obergfell 2011-05-20 7:13 ` [PATCH v5 5/5] hpet 'driftfix': add code in hpet_timer() to compensate delayed callbacks and coalesced interrupts Ulrich Obergfell 2011-05-20 7:13 ` [Qemu-devel] " Ulrich Obergfell
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=1305875603-3104-5-git-send-email-uobergfe@redhat.com \ --to=uobergfe@redhat.com \ --cc=aliguori@us.ibm.com \ --cc=avi@redhat.com \ --cc=gcosta@redhat.com \ --cc=jan.kiszka@siemens.com \ --cc=kvm@vger.kernel.org \ --cc=mtosatti@redhat.com \ --cc=qemu-devel@nongnu.org \ --cc=zamsden@redhat.com \ /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: linkBe 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.