qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [5265] Use a QEMUBH when an OMAP timer must expire immediat


From: Andrzej Zaborowski
Subject: [Qemu-devel] [5265] Use a QEMUBH when an OMAP timer must expire immediately.
Date: Sat, 20 Sep 2008 01:32:08 +0000

Revision: 5265
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5265
Author:   balrog
Date:     2008-09-20 01:32:07 +0000 (Sat, 20 Sep 2008)

Log Message:
-----------
Use a QEMUBH when an OMAP timer must expire immediately.

Modified Paths:
--------------
    trunk/hw/omap1.c

Modified: trunk/hw/omap1.c
===================================================================
--- trunk/hw/omap1.c    2008-09-20 01:15:04 UTC (rev 5264)
+++ trunk/hw/omap1.c    2008-09-20 01:32:07 UTC (rev 5265)
@@ -664,6 +664,7 @@
     uint32_t val;
     int64_t time;
     QEMUTimer *timer;
+    QEMUBH *tick;
     int64_t rate;
     int it_ena;
 
@@ -708,21 +709,15 @@
          * ticks.  */
         if (expires > (ticks_per_sec >> 10) || timer->ar)
             qemu_mod_timer(timer->timer, timer->time + expires);
-        else {
-            timer->val = 0;
-            timer->st = 0;
-            if (timer->it_ena)
-                /* Edge-triggered irq */
-                qemu_irq_pulse(timer->irq);
-        }
+        else
+            qemu_bh_schedule(timer->tick);
     } else
         qemu_del_timer(timer->timer);
 }
 
-static void omap_timer_tick(void *opaque)
+static void omap_timer_fire(void *opaque)
 {
-    struct omap_mpu_timer_s *timer = (struct omap_mpu_timer_s *) opaque;
-    omap_timer_sync(timer);
+    struct omap_mpu_timer_s *timer = opaque;
 
     if (!timer->ar) {
         timer->val = 0;
@@ -732,6 +727,14 @@
     if (timer->it_ena)
         /* Edge-triggered irq */
         qemu_irq_pulse(timer->irq);
+}
+
+static void omap_timer_tick(void *opaque)
+{
+    struct omap_mpu_timer_s *timer = (struct omap_mpu_timer_s *) opaque;
+
+    omap_timer_sync(timer);
+    omap_timer_fire(timer);
     omap_timer_update(timer);
 }
 
@@ -835,6 +838,7 @@
     s->clk = clk;
     s->base = base;
     s->timer = qemu_new_timer(vm_clock, omap_timer_tick, s);
+    s->tick = qemu_bh_new(omap_timer_fire, s);
     omap_mpu_timer_reset(s);
     omap_timer_clk_setup(s);
 






reply via email to

[Prev in Thread] Current Thread [Next in Thread]