On Wed, 29 Jun 2022 11:39:05 +0100 Alexandru Elisei <alexandru.elisei@xxxxxxx> wrote: Hi, > pvtime uses ARM_PVTIME_BASE instead of ARM_PVTIME_SIZE for the size of the > memory region given to the guest, which causes to the following error when > creating a flash device (via the -F/--flash command line argument): > > Error: RAM (read-only) region [2000000-27fffff] would overlap RAM region [1020000-203ffff] > > The read-only region represents the guest memory where the flash image is > copied by kvmtool. The region starting at 0x102_0000 (ARM_PVTIME_BASE) is > the pvtime region, which should be 64K in size. kvmtool erroneously creates > the region to be ARM_PVTIME_BASE in size instead, and the last address > becomes: > > ARM_PVTIME_BASE + ARM_PVTIME_BASE - 1 = 0x102_0000 + 0x102_0000 - 1 = 0x203_ffff > > which corresponds to the end of the region from the error message. > > Do the right thing and make the pvtime memory region ARM_PVTIME_SIZE = 64K > bytes, as it was intended. > > Fixes: 7d4671e5d372 ("aarch64: Add stolen time support") > Reported-by: Pierre Gondois <pierre.gondois@xxxxxxx> > Signed-off-by: Alexandru Elisei <alexandru.elisei@xxxxxxx> Oops, this looks indeed like a glaring bug, PVTIME_SIZE was not used anywhere. Reviewed-by: Andre Przywara <andre.przywara@xxxxxxx> Cheers, Andre > --- > arm/aarch64/pvtime.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/arm/aarch64/pvtime.c b/arm/aarch64/pvtime.c > index a49cf3ed5478..2933ac7ca959 100644 > --- a/arm/aarch64/pvtime.c > +++ b/arm/aarch64/pvtime.c > @@ -14,15 +14,15 @@ static int pvtime__alloc_region(struct kvm *kvm) > char *mem; > int ret = 0; > > - mem = mmap(NULL, ARM_PVTIME_BASE, PROT_RW, > + mem = mmap(NULL, ARM_PVTIME_SIZE, PROT_RW, > MAP_ANON_NORESERVE, -1, 0); > if (mem == MAP_FAILED) > return -errno; > > ret = kvm__register_ram(kvm, ARM_PVTIME_BASE, > - ARM_PVTIME_BASE, mem); > + ARM_PVTIME_SIZE, mem); > if (ret) { > - munmap(mem, ARM_PVTIME_BASE); > + munmap(mem, ARM_PVTIME_SIZE); > return ret; > } > > @@ -36,8 +36,8 @@ static int pvtime__teardown_region(struct kvm *kvm) > return 0; > > kvm__destroy_mem(kvm, ARM_PVTIME_BASE, > - ARM_PVTIME_BASE, usr_mem); > - munmap(usr_mem, ARM_PVTIME_BASE); > + ARM_PVTIME_SIZE, usr_mem); > + munmap(usr_mem, ARM_PVTIME_SIZE); > usr_mem = NULL; > return 0; > } _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm