Hi Drew, On 5/13/21 6:43 PM, Andrew Jones wrote: > On Thu, May 13, 2021 at 07:18:44PM +0200, Andrew Jones wrote: >> [..] >> Thanks Alex, >> >> I think a better fix is this untested one below, though. If you can test >> it out and confirm it also resolves the issue, then I'll add this patch >> to the series. >> >> Thanks, >> drew >> >> >> diff --git a/arm/micro-bench.c b/arm/micro-bench.c >> index 95c418c10eb4..deafd5695c33 100644 >> --- a/arm/micro-bench.c >> +++ b/arm/micro-bench.c >> @@ -273,16 +273,22 @@ static void hvc_exec(void) >> asm volatile("mov w0, #0x4b000000; hvc #0" ::: "w0"); >> } >> >> -static void mmio_read_user_exec(void) >> +/* >> + * FIXME: Read device-id in virtio mmio here in order to >> + * force an exit to userspace. This address needs to be >> + * updated in the future if any relevant changes in QEMU >> + * test-dev are made. >> + */ >> +static void *userspace_emulated_addr; >> + >> +static bool mmio_read_user_prep(void) >> { >> - /* >> - * FIXME: Read device-id in virtio mmio here in order to >> - * force an exit to userspace. This address needs to be >> - * updated in the future if any relevant changes in QEMU >> - * test-dev are made. >> - */ >> - void *userspace_emulated_addr = (void*)0x0a000008; >> + userspace_emulated_addr = (void*)ioremap(0x0a000008, 8); >> + return true; >> +} >> >> +static void mmio_read_user_exec(void) >> +{ >> readl(userspace_emulated_addr); >> } >> >> @@ -309,14 +315,14 @@ struct exit_test { >> }; >> >> static struct exit_test tests[] = { >> - {"hvc", NULL, hvc_exec, NULL, 65536, true}, >> - {"mmio_read_user", NULL, mmio_read_user_exec, NULL, 65536, true}, >> - {"mmio_read_vgic", NULL, mmio_read_vgic_exec, NULL, 65536, true}, >> - {"eoi", NULL, eoi_exec, NULL, 65536, true}, >> - {"ipi", ipi_prep, ipi_exec, NULL, 65536, true}, >> - {"ipi_hw", ipi_hw_prep, ipi_exec, NULL, 65536, true}, >> - {"lpi", lpi_prep, lpi_exec, NULL, 65536, true}, >> - {"timer_10ms", timer_prep, timer_exec, timer_post, 256, true}, >> + {"hvc", NULL, hvc_exec, NULL, 65536, true}, >> + {"mmio_read_user", mmio_read_user_prep, mmio_read_user_exec, NULL, 65536, true}, >> + {"mmio_read_vgic", NULL, mmio_read_vgic_exec, NULL, 65536, true}, >> + {"eoi", NULL, eoi_exec, NULL, 65536, true}, >> + {"ipi", ipi_prep, ipi_exec, NULL, 65536, true}, >> + {"ipi_hw", ipi_hw_prep, ipi_exec, NULL, 65536, true}, >> + {"lpi", lpi_prep, lpi_exec, NULL, 65536, true}, >> + {"timer_10ms", timer_prep, timer_exec, timer_post, 256, true}, >> }; >> >> struct ns_time { >> > I still haven't tested it (beyond compiling), but I've tweaked this a bit. > You can see it here > > https://gitlab.com/rhdrjones/kvm-unit-tests/-/commit/71938030d160e021db3388037d0d407df17e8e5e > > The whole v4 of this series is here > > https://gitlab.com/rhdrjones/kvm-unit-tests/-/commits/efiprep Had a look at the patch, looks good; in my suggestion I wrongly thought that readl reads a long (64 bits), not an uint32_t value: Reviewed-by: Alexandru Elisei <alexandru.elisei@xxxxxxx> I also ran some tests on the v4 series from your repo. Qemu TCG on x86 machine: - arm compiled with arm-linux-gnu-gcc and arm-none-eabi-gcc - arm64, 4k and 64k pages. Odroid-c4: - arm, both compilers, under kvmtool - arm64, 4k, 16k and 64k pages under qemu KVM and kvmtool Rockpro64: - arm, both compilers, under kvmtool - arm64, 4k and 64k pages, under qemu KVM and kvmtool. The ITS migration tests I had to run manually on the rockpro64 (Odroid has a gicv2) because it looks like the run script wasn't detecting the prompt to start migration. I'm guessing something on my side, because I had issues with the migration tests before. Nonetheless, those tests ran just fine manually under qemu and kvmtool, so everything looks correct to me: Tested-by: Alexandru Elisei <alexandru.elisei@xxxxxxx> Thanks, Alex