On Fri, 18 Mar 2022 at 14:24, Cong Liu <liuco...@kylinos.cn> wrote: > > on the arm64 platform, the PAGESIZE is 64k, the default qxl rom > bar size is 8k(QXL_ROM_SZ), in the case memory size less than > one page size, kvm_align_section return zero, the memory section > did not commit kvm.
Can you give more details on how this happens? The only place we use QXL_ROM_SZ is in the qxl_rom_size() function, and that rounds up the value it returns to the qemu_real_host_page_size. That change was added in commit ce7015d9e8669e, exagctly to fix what sounds like the same problem you're hitting where KVM is in use and the host page size is larger than 8K. Are you using an old version of QEMU that doesn't have that fix ? > Signed-off-by: Cong Liu <liuco...@kylinos.cn> > --- > accel/kvm/kvm-all.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c > index 27864dfaea..f57cab811b 100644 > --- a/accel/kvm/kvm-all.c > +++ b/accel/kvm/kvm-all.c > @@ -318,6 +318,7 @@ static hwaddr kvm_align_section(MemoryRegionSection > *section, > hwaddr *start) > { > hwaddr size = int128_get64(section->size); > + size = ROUND_UP(size, qemu_real_host_page_size); > hwaddr delta, aligned; > > /* kvm works in page size chunks, but the function may be called The comment we can just see starting here says: /* kvm works in page size chunks, but the function may be called with sub-page size and unaligned start address. Pad the start address to next and truncate size to previous page boundary. */ but your change means that's no longer true. More generally, rounding up the size here seems dubious -- there is no guarantee that whatever follows the small lump of RAM in the address space is sensible to treat as really being part of the same thing. thanks -- PMM