qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: Xiao Guangrong <xiaoguangrong@tencent.com>
Subject: [Qemu-devel] [PULL 05/20] mc146818rtc: embrace all x86 specific code
Date: Fri, 19 May 2017 13:20:57 +0200	[thread overview]
Message-ID: <1495192872-27667-6-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1495192872-27667-1-git-send-email-pbonzini@redhat.com>

From: Xiao Guangrong <xiaoguangrong@tencent.com>

Introduce a function, rtc_policy_slew_deliver_irq(), which delivers
irq if LOST_TICK_POLICY_SLEW is used, as which is only supported on
x86, other platforms call it will trigger a assert

After that, we can move the x86 specific code to the common place

Signed-off-by: Xiao Guangrong <xiaoguangrong@tencent.com>
Message-Id: <20170510083259.3900-6-xiaoguangrong@tencent.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/timer/mc146818rtc.c | 60 ++++++++++++++++++++++++++------------------------
 1 file changed, 31 insertions(+), 29 deletions(-)

diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c
index f9d6181..542cd09 100644
--- a/hw/timer/mc146818rtc.c
+++ b/hw/timer/mc146818rtc.c
@@ -125,17 +125,34 @@ static void rtc_coalesced_timer_update(RTCState *s)
     }
 }
 
+static QLIST_HEAD(, RTCState) rtc_devices =
+    QLIST_HEAD_INITIALIZER(rtc_devices);
+
 #ifdef TARGET_I386
+void qmp_rtc_reset_reinjection(Error **errp)
+{
+    RTCState *s;
+
+    QLIST_FOREACH(s, &rtc_devices, link) {
+        s->irq_coalesced = 0;
+    }
+}
+
+static bool rtc_policy_slew_deliver_irq(RTCState *s)
+{
+    apic_reset_irq_delivered();
+    qemu_irq_raise(s->irq);
+    return apic_get_irq_delivered();
+}
+
 static void rtc_coalesced_timer(void *opaque)
 {
     RTCState *s = opaque;
 
     if (s->irq_coalesced != 0) {
-        apic_reset_irq_delivered();
         s->cmos_data[RTC_REG_C] |= 0xc0;
         DPRINTF_C("cmos: injecting from timer\n");
-        qemu_irq_raise(s->irq);
-        if (apic_get_irq_delivered()) {
+        if (rtc_policy_slew_deliver_irq(s)) {
             s->irq_coalesced--;
             DPRINTF_C("cmos: coalesced irqs decreased to %d\n",
                       s->irq_coalesced);
@@ -144,6 +161,12 @@ static void rtc_coalesced_timer(void *opaque)
 
     rtc_coalesced_timer_update(s);
 }
+#else
+static bool rtc_policy_slew_deliver_irq(RTCState *s)
+{
+    assert(0);
+    return false;
+}
 #endif
 
 static uint32_t rtc_periodic_clock_ticks(RTCState *s)
@@ -254,21 +277,17 @@ static void rtc_periodic_timer(void *opaque)
     s->cmos_data[RTC_REG_C] |= REG_C_PF;
     if (s->cmos_data[RTC_REG_B] & REG_B_PIE) {
         s->cmos_data[RTC_REG_C] |= REG_C_IRQF;
-#ifdef TARGET_I386
         if (s->lost_tick_policy == LOST_TICK_POLICY_SLEW) {
             if (s->irq_reinject_on_ack_count >= RTC_REINJECT_ON_ACK_COUNT)
-                s->irq_reinject_on_ack_count = 0;		
-            apic_reset_irq_delivered();
-            qemu_irq_raise(s->irq);
-            if (!apic_get_irq_delivered()) {
+                s->irq_reinject_on_ack_count = 0;
+            if (!rtc_policy_slew_deliver_irq(s)) {
                 s->irq_coalesced++;
                 rtc_coalesced_timer_update(s);
                 DPRINTF_C("cmos: coalesced irqs increased to %d\n",
                           s->irq_coalesced);
             }
         } else
-#endif
-        qemu_irq_raise(s->irq);
+            qemu_irq_raise(s->irq);
     }
 }
 
@@ -612,20 +631,6 @@ static void rtc_get_time(RTCState *s, struct tm *tm)
         rtc_from_bcd(s, s->cmos_data[RTC_CENTURY]) * 100 - 1900;
 }
 
-static QLIST_HEAD(, RTCState) rtc_devices =
-    QLIST_HEAD_INITIALIZER(rtc_devices);
-
-#ifdef TARGET_I386
-void qmp_rtc_reset_reinjection(Error **errp)
-{
-    RTCState *s;
-
-    QLIST_FOREACH(s, &rtc_devices, link) {
-        s->irq_coalesced = 0;
-    }
-}
-#endif
-
 static void rtc_set_time(RTCState *s)
 {
     struct tm tm;
@@ -745,22 +750,19 @@ static uint64_t cmos_ioport_read(void *opaque, hwaddr addr,
             if (ret & (REG_C_UF | REG_C_AF)) {
                 check_update_timer(s);
             }
-#ifdef TARGET_I386
+
             if(s->irq_coalesced &&
                     (s->cmos_data[RTC_REG_B] & REG_B_PIE) &&
                     s->irq_reinject_on_ack_count < RTC_REINJECT_ON_ACK_COUNT) {
                 s->irq_reinject_on_ack_count++;
                 s->cmos_data[RTC_REG_C] |= REG_C_IRQF | REG_C_PF;
-                apic_reset_irq_delivered();
                 DPRINTF_C("cmos: injecting on ack\n");
-                qemu_irq_raise(s->irq);
-                if (apic_get_irq_delivered()) {
+                if (rtc_policy_slew_deliver_irq(s)) {
                     s->irq_coalesced--;
                     DPRINTF_C("cmos: coalesced irqs decreased to %d\n",
                               s->irq_coalesced);
                 }
             }
-#endif
             break;
         default:
             ret = s->cmos_data[s->cmos_index];
-- 
1.8.3.1

  parent reply	other threads:[~2017-05-19 11:21 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-19 11:20 [Qemu-devel] [PULL 00/20] Misc patches for 2017-05-19 Paolo Bonzini
2017-05-19 11:20 ` [Qemu-devel] [PULL 01/20] mc146818rtc: update periodic timer only if it is needed Paolo Bonzini
2017-05-19 11:20 ` [Qemu-devel] [PULL 02/20] mc146818rtc: precisely count the clock for periodic timer Paolo Bonzini
2017-05-19 11:20 ` [Qemu-devel] [PULL 03/20] mc146818rtc: ensure LOST_TICK_POLICY_SLEW is only enabled on TARGET_I386 Paolo Bonzini
2017-05-19 11:20 ` [Qemu-devel] [PULL 04/20] mc146818rtc: drop unnecessary '#ifdef TARGET_I386' Paolo Bonzini
2017-05-19 11:20 ` Paolo Bonzini [this message]
2017-05-19 11:20 ` [Qemu-devel] [PULL 06/20] kvm: irqchip: trace changes on msi add/remove Paolo Bonzini
2017-05-19 11:20 ` [Qemu-devel] [PULL 07/20] msix: trace control bit write op Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 08/20] kvm: irqchip: skip update msi when disabled Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 09/20] Check the return value of fcntl in qemu_set_cloexec Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 10/20] nbd: strict nbd_wr_syncv Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 11/20] nbd: read_sync and friends: return 0 on success Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 12/20] nbd: add errp parameter to nbd_wr_syncv() Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 13/20] nbd: add errp to read_sync, write_sync and drop_sync Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 14/20] nbd/client.c: use errp instead of LOG Paolo Bonzini
2017-05-26 11:09   ` [Qemu-devel] [PATCH v2] " Vladimir Sementsov-Ogievskiy
2017-05-26 13:43     ` Eric Blake
2017-05-19 11:21 ` [Qemu-devel] [PULL 15/20] exec: simplify phys_page_find() params Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 16/20] virtio-scsi: Unset hotplug handler when unrealize Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 17/20] vhost-user-scsi: Introduce vhost-user-scsi host device Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 18/20] vhost-user-scsi: Introduce a vhost-user-scsi sample application Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 19/20] target/i386: enable A20 automatically in system management mode Paolo Bonzini
2017-05-19 11:21 ` [Qemu-devel] [PULL 20/20] target/i386: use multiple CPU AddressSpaces Paolo Bonzini
2017-05-19 12:41 ` [Qemu-devel] [PULL 00/20] Misc patches for 2017-05-19 no-reply
2017-05-19 15:51   ` Stefan Hajnoczi
2017-05-19 16:09     ` Paolo Bonzini
2017-05-19 15:49 ` Stefan Hajnoczi

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=1495192872-27667-6-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=xiaoguangrong@tencent.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: 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;
as well as URLs for NNTP newsgroup(s).