On Sun, 13 Feb 2022 at 11:38, Akihiko Odaki <akihiko.odaki@xxxxxxxxx> wrote: > I found that it actually gets the available PA bit of the emulated CPU > when highmem=on. I used "cortex-a72", which can have more than 36 > bits. I just simply switched to "host"; hvf didn't support "host" when > I set up my VM but now it does. It's a bug that we accept 'cortex-a72' there. What should happen is something like: * we want to use the ID register values of a cortex-a72 * QEMU's hvf layer should say "no, that doesn't match the actual CPU we're running on", and give an error This works correctly with KVM because there the kernel refuses attempts to set ID registers to values that don't match the host; for hvf the hvf APIs do permit lying to the guest about ID register values so we need to do the check ourselves. (The other approach would be to check the ID register values and allow them to the extent that the host CPU actually has the support for the features they imply, so you could "downgrade" to a less capable CPU but not tell the guest it has feature X if it isn't really there. But this is (a) a lot more complicated and (b) gets into the swamp of trying to figure out how to tell the guest about CPU errata -- the guest needs to apply errata workarounds for the real host CPU, not for whatever the emulated CPU is. So "just reject anything that's not an exact match" is the easy approach.) -- PMM