[v2] hw/m68k/mcf5206.c: Switch to transaction-based ptimer API

Message ID 20191021140600.10725-1-peter.maydell@linaro.org
State Superseded
Headers show
Series
  • [v2] hw/m68k/mcf5206.c: Switch to transaction-based ptimer API
Related show

Commit Message

Peter Maydell Oct. 21, 2019, 2:06 p.m.
Switch the mcf5206 code away from bottom-half based ptimers to
the new transaction-based ptimer API.  This just requires adding
begin/commit calls around the various places that modify the ptimer
state, and using the new ptimer_init() function to create the timer.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
Changes v1->v2:
 * turn the early-exit in m5206_timer_recalibrate() into a goto-exit
   so we can end the ptimer transaction

I'm not resending the whole v1 patchset, since this patch is
independent of the others in the series and I'm planning to
take them through my tree anyway.
---
 hw/m68k/mcf5206.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

-- 
2.20.1

Comments

Thomas Huth Oct. 22, 2019, 11:40 a.m. | #1
On 21/10/2019 16.06, Peter Maydell wrote:
> Switch the mcf5206 code away from bottom-half based ptimers to

> the new transaction-based ptimer API.  This just requires adding

> begin/commit calls around the various places that modify the ptimer

> state, and using the new ptimer_init() function to create the timer.

> 

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

> ---

> Changes v1->v2:

>  * turn the early-exit in m5206_timer_recalibrate() into a goto-exit

>    so we can end the ptimer transaction


Reviewed-by: Thomas Huth <thuth@redhat.com>
Peter Maydell Oct. 24, 2019, 12:20 p.m. | #2
On Tue, 22 Oct 2019 at 12:40, Thomas Huth <th.huth@posteo.de> wrote:
>

> On 21/10/2019 16.06, Peter Maydell wrote:

> > Switch the mcf5206 code away from bottom-half based ptimers to

> > the new transaction-based ptimer API.  This just requires adding

> > begin/commit calls around the various places that modify the ptimer

> > state, and using the new ptimer_init() function to create the timer.

> >

> > Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

> > ---

> > Changes v1->v2:

> >  * turn the early-exit in m5206_timer_recalibrate() into a goto-exit

> >    so we can end the ptimer transaction

>

> Reviewed-by: Thomas Huth <thuth@redhat.com>





Applied to target-arm.next, thanks.

-- PMM

Patch

diff --git a/hw/m68k/mcf5206.c b/hw/m68k/mcf5206.c
index a49096367cb..b155dd81705 100644
--- a/hw/m68k/mcf5206.c
+++ b/hw/m68k/mcf5206.c
@@ -8,7 +8,6 @@ 
 
 #include "qemu/osdep.h"
 #include "qemu/error-report.h"
-#include "qemu/main-loop.h"
 #include "cpu.h"
 #include "hw/hw.h"
 #include "hw/irq.h"
@@ -57,10 +56,12 @@  static void m5206_timer_recalibrate(m5206_timer_state *s)
     int prescale;
     int mode;
 
+    ptimer_transaction_begin(s->timer);
     ptimer_stop(s->timer);
 
-    if ((s->tmr & TMR_RST) == 0)
-        return;
+    if ((s->tmr & TMR_RST) == 0) {
+        goto exit;
+    }
 
     prescale = (s->tmr >> 8) + 1;
     mode = (s->tmr >> 1) & 3;
@@ -78,6 +79,8 @@  static void m5206_timer_recalibrate(m5206_timer_state *s)
     ptimer_set_limit(s->timer, s->trr, 0);
 
     ptimer_run(s->timer, 0);
+exit:
+    ptimer_transaction_commit(s->timer);
 }
 
 static void m5206_timer_trigger(void *opaque)
@@ -123,7 +126,9 @@  static void m5206_timer_write(m5206_timer_state *s, uint32_t addr, uint32_t val)
         s->tcr = val;
         break;
     case 0xc:
+        ptimer_transaction_begin(s->timer);
         ptimer_set_count(s->timer, val);
+        ptimer_transaction_commit(s->timer);
         break;
     case 0x11:
         s->ter &= ~val;
@@ -137,11 +142,9 @@  static void m5206_timer_write(m5206_timer_state *s, uint32_t addr, uint32_t val)
 static m5206_timer_state *m5206_timer_init(qemu_irq irq)
 {
     m5206_timer_state *s;
-    QEMUBH *bh;
 
     s = g_new0(m5206_timer_state, 1);
-    bh = qemu_bh_new(m5206_timer_trigger, s);
-    s->timer = ptimer_init_with_bh(bh, PTIMER_POLICY_DEFAULT);
+    s->timer = ptimer_init(m5206_timer_trigger, s, PTIMER_POLICY_DEFAULT);
     s->irq = irq;
     m5206_timer_reset(s);
     return s;