Re: [PATCH kvm-unit-tests 0/3] Add physical timer test

Andrew Jones
2017-07-18T12:19:34Z

On Tue, Jul 18, 2017 at 12:42:26PM +0200, Christoffer Dall wrote:
> On Tue, Jul 18, 2017 at 12:17:07PM +0200, Andrew Jones wrote:
> > On Thu, Jul 13, 2017 at 09:20:06PM +0200, Christoffer Dall wrote:
> > > Add a test for the vtimer. I've tested on
> > > accel=tcg
> > > accel=kvm : on seattle, and mustang
> > > accel=kvm,kernel-irqchip=off : on mustang
> > >
> > > I first fix two issues I had running the basic timer test on APM mustang
> > > on using TCG. I wonder why the vtimer tests worked using TCG for Drew,
> > > since they didn't work for me, and I don't see how they would have
> > > without patch 1.
> >
> > That's weird. I just tested again with a latest qemu master pull and it
> > still works for me without patch 1. However, as you and Marc discussed,
> > it's the right thing to do with regards to the spec.
> >
>
> What is the command line you use to test this?

The one generated by the run script

$ cat logs/timer.log
timeout -k 1s --foreground 2s ../build/q/aarch64-softmmu/qemu-system-aarch64 -nodefaults -machine virt,accel=tcg -cpu cortex-a57 -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd -device pci-testdev -display none -serial stdio -kernel arm/timer.flat -smp 1 # -initrd /tmp/tmp.2Z4KzFEbAs
CNTFRQ_EL0 : 0x0000000003b9aca0
CNTVCT_EL0 : 0x00000000000aa949
CNTV_CTL_EL0 : 0x0000000000000000
CNTV_CVAL_EL0: 0x0000000000000000
PASS: vtimer-busy-loop: not pending before
INFO: vtimer-busy-loop: After timer: 0x0000000000167bd1
INFO: vtimer-busy-loop: Expected : 0x0000000000163ae6
INFO: vtimer-busy-loop: Difference : 268 us
PASS: vtimer-busy-loop: latency within 10 ms
PASS: vtimer-busy-loop: interrupt received
SUMMARY: 3 tests

>
> By looking at the code in QEMU, I see this:
>
> target/arm/helper.c:gt_recalc_timer()
>
> if (gt->ctl & 1) {
> ...
> } else {
> gt->ctl &= ~4;
> qemu_set_irq(cpu->gt_timer_outputs[timeridx], 0);
> timer_del(cpu->gt_timer[timeridx]);
> trace_arm_gt_recalc_disabled(timeridx);
> }
>
> So bits 1 and 2 (IMASK and ISTATUS, respectively) are cleared.
>
> I instrumented the code and verified this.
>
> Confusing.

Indeed.

drew