[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device m
From: |
Paul Brook |
Subject: |
Re: [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device model |
Date: |
Tue, 28 Feb 2012 12:07:52 +0000 |
User-agent: |
KMail/1.13.7 (Linux/3.2.0-1-amd64; KDE/4.6.5; x86_64; ; ) |
> > Thinking about that, I realised why I don't like the following line:
> >> + s->reg_value = (uint32_t)((x + interval) % interval);
> >
> > This assumes x > -interval, which is not always true.
>
> This would mean you have wrapped twice or more in one time step, which
> I am assuming is a fatal error condition, as It means your software
> has missed interrupts and all sort of race conditions would occur. I
> would personally prefer to assert !(x < -interval) and have qemu
> hw_error or something, as in these cases QEMU can just not handle your
> super quick timer wrap around.
No, not fatal at all. On a heavily loaded host it's normal for qemu[1] to
stall for tens of miliseconds at a time. In extreme cases several seconds at
a time, though we've fixed most of those. This is greater than the interval
of many guest periodic events. A linux guest with HZ=1000 (even HZ=100) will
routinely loose timer ticks. By my reading your timers have a configurable
limit, so the obvious configuration is a limit of 25000 (2.5MHz / 100), and
trigger the jiffy tick off the timer wrap/reload.
If your guest OS assumes their ISR will complete before timer triggers again
then it will break. That's their problem. Any guest that relies on
consistent realtime performance/behavior is going to malfunction when run
inside qemu. This is only one of several ways that qemu behavior can differ
from that of real hardware.
You can workaround some of these issues with -icount, though that has its own
set of problems. One of which is that is doesn't support KVM or SMP[2].
guests.
Paul
[1] The same applies for KVM.
[2] SMP may be fixable. KVM probably not.
- [Qemu-devel] [PATCH v6 1/4] cadence_uart: initial version of device model, (continued)
- [Qemu-devel] [PATCH v6 1/4] cadence_uart: initial version of device model, Peter A. G. Crosthwaite, 2012/02/19
- [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device model, Peter A. G. Crosthwaite, 2012/02/19
- Re: [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device model, Peter Maydell, 2012/02/20
- Re: [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device model, Paul Brook, 2012/02/21
- Re: [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device model, Peter Crosthwaite, 2012/02/22
- Re: [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device model, Paul Brook, 2012/02/27
- Re: [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device model, Peter Crosthwaite, 2012/02/27
- Re: [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device model, Peter Crosthwaite, 2012/02/27
- Re: [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device model,
Paul Brook <=
- Re: [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device model, Peter Crosthwaite, 2012/02/28
- Re: [Qemu-devel] [PATCH v6 2/4] cadence_ttc: initial version of device model, Peter Crosthwaite, 2012/02/22
[Qemu-devel] [PATCH v6 3/4] cadence_gem: initial version of device model, Peter A. G. Crosthwaite, 2012/02/19
[Qemu-devel] [PATCH v6 4/4] xilinx_zynq: machine model initial version, Peter A. G. Crosthwaite, 2012/02/19
Re: [Qemu-devel] [PATCH v6 0/4] Zynq-7000 EPP platform model, Peter Crosthwaite, 2012/02/19
[Qemu-devel] [PULL] Zynq-7000 EPP platform model, Peter Crosthwaite, 2012/02/20