Revision e856f2ad

b/hw/omap1.c
664 664
    uint32_t val;
665 665
    int64_t time;
666 666
    QEMUTimer *timer;
667
    QEMUBH *tick;
667 668
    int64_t rate;
668 669
    int it_ena;
669 670

  
......
708 709
         * ticks.  */
709 710
        if (expires > (ticks_per_sec >> 10) || timer->ar)
710 711
            qemu_mod_timer(timer->timer, timer->time + expires);
711
        else {
712
            timer->val = 0;
713
            timer->st = 0;
714
            if (timer->it_ena)
715
                /* Edge-triggered irq */
716
                qemu_irq_pulse(timer->irq);
717
        }
712
        else
713
            qemu_bh_schedule(timer->tick);
718 714
    } else
719 715
        qemu_del_timer(timer->timer);
720 716
}
721 717

  
722
static void omap_timer_tick(void *opaque)
718
static void omap_timer_fire(void *opaque)
723 719
{
724
    struct omap_mpu_timer_s *timer = (struct omap_mpu_timer_s *) opaque;
725
    omap_timer_sync(timer);
720
    struct omap_mpu_timer_s *timer = opaque;
726 721

  
727 722
    if (!timer->ar) {
728 723
        timer->val = 0;
......
732 727
    if (timer->it_ena)
733 728
        /* Edge-triggered irq */
734 729
        qemu_irq_pulse(timer->irq);
730
}
731

  
732
static void omap_timer_tick(void *opaque)
733
{
734
    struct omap_mpu_timer_s *timer = (struct omap_mpu_timer_s *) opaque;
735

  
736
    omap_timer_sync(timer);
737
    omap_timer_fire(timer);
735 738
    omap_timer_update(timer);
736 739
}
737 740

  
......
835 838
    s->clk = clk;
836 839
    s->base = base;
837 840
    s->timer = qemu_new_timer(vm_clock, omap_timer_tick, s);
841
    s->tick = qemu_bh_new(omap_timer_fire, s);
838 842
    omap_mpu_timer_reset(s);
839 843
    omap_timer_clk_setup(s);
840 844

  

Also available in: Unified diff