Re: [kvm-unit-tests PATCH] arm64: add micro test

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

 



Hello Shih-Wei,

This exception is probably due to a bug in the hvc_test (hvc call) code,
and there is a generic bug in the hvc test code.
In the function hvc_test(), local variables c1, c2 get mapped to registers (typically x1 & x2) and those are "clobbered" across the hvc call, hence, c1 gets clobbered and we get a large cycle count for hvc_test (c2 - 0), which messes-up the hvc test measurements.

As per SMC64/HVC64 ABI definitions, x0-x18 can be clobbered across
HVC/SMC calls.

Currently, i am using your micro-benchmark code with the following
hack applied ...

+register unsigned long c1_hvc asm ("x19");

static unsigned long hvc_test(void)

{
+     unsigned long c2;
-     unsigned long c1, c2;






+     c1_hvc = read_cc();
-     c1 = read_cc();
asm volatile("mov w0, #0x4b000000; hvc #0" ::: "w0");

     c2 = read_cc();
+     return CYCLE_COUNT(c1_hvc, c2);
- return CYCLE_COUNT(c1, c2);

}

Thanks,
Ashish

On 12/20/2017 10:30 PM, Andrew Jones wrote:
On Mon, Dec 18, 2017 at 08:10:37PM +0100, Andrew Jones wrote:
I just tried on TCG now. It doesn't run. It gets

Timer Frequency 62500000 Hz (Output in timer count)
Unhandled exception ec=0 (UNKNOWN)
Vector: 4 (el1h_sync)
ESR_EL1:         02000000, ec=0 (UNKNOWN)
FAR_EL1: 0000000000000000 (not valid)
Exception frame registers:
pc : [<0000000040080088>] lr : [<00000000400803e8>] pstate: 800003c5
sp : 00000000400aff90
x29: 0000000000000000 x28: 0000000000000000
x27: 0000000040090000 x26: 0000000040090c60
x25: 0000000040090000 x24: 000000001fffffff
x23: 0000000000000000 x22: 0000000000000000
x21: 0000000000000040 x20: 0000000000000000
x19: 0000000000000000 x18: 00000000400b0000
x17: 0000000000000000 x16: 0000000000000000
x15: 00000000400afe8c x14: 00000000400b0000
x13: 00000000400afecc x12: 0000000000001680
x11: 0000000000000000 x10: 6666666666666667
x9 : 0000000000000030 x8 : 0000000000000030
x7 : 00000000400af670 x6 : 00000000400af673
x5 : 00000000400af678 x4 : 00000000000007b7
x3 : 00000000400af6ec x2 : 0000000040090000
x1 : 000000000015909e x0 : 000000004b000000


I looked into this. It's due to the hvc call. The exception goes away if
you add '-machine virtualization=yes' to the qemu command line. But as
there's no point in running it, and it's way too slow, then the
'accel = kvm' added in v2 of the patch is the right thing to do.

Thanks,
drew




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux