On 26 January 2018 at 15:47, Wei Huang <w...@redhat.com> wrote: > > > On 01/25/2018 02:05 PM, Dr. David Alan Gilbert wrote: >> * Wei Huang (w...@redhat.com) wrote: >>> innerloop: >>> /* clean cache because el2 might still cache guest data under KVM */ >>> dc civac, x2 >> >> Can you explain a bit more about that please; if it's guest >> visible acorss migration, doesn't that suggest we need the cache clear >> in KVM or QEMU? > > I think this is ARM specific. This is caused by the inconsistency > between guest VM's data accesses and userspace's accesses (in > check_guest_ram) at the destination: > > 1) Because uncacheable (guest) + cacheable (host) ==> uncacheable. So > the data accesses from guest VM go directly into memory. > 2) QEMU user space will use the cacheable version. So it is possible > that data can come from cache, instead of RAM. The difference between > (1) and (2) obviously can cause check_guest_ram() to fail sometimes.
I think the correct fix here is that your test code should turn its MMU on. Trying to treat guest RAM as uncacheable doesn't work for Arm KVM guests (for the same reason that VGA device video memory doesn't work). If it's RAM your guest has to arrange to map it as Normal Cacheable, and then everything should work fine. thanks -- PMM