We have observed that live migration of radix guests tends to converge slowly and sometimes doesn't converge at all. This appears to be due largely to the fact that if the host is using transparent huge pages, page dirtiness only gets tracked with a 2MB granularity for the parts of the guest memory that are mapped using 2MB pages. The fix is to break down the mappings in the partition-scoped page tables to 64k pages (or 4k pages if 4k is the system page size). This is accomplished by flushing the partition-scoped page tables when turning dirty page tracking on or off, and by only inserting small-page PTEs into the partition-scoped page tables while dirty page tracking is enabled. Paul. arch/powerpc/include/asm/kvm_book3s.h | 11 +++++----- arch/powerpc/include/asm/kvm_book3s_64.h | 2 +- arch/powerpc/include/asm/kvm_ppc.h | 6 ++++-- arch/powerpc/kvm/book3s.c | 5 +++-- arch/powerpc/kvm/book3s_64_mmu_hv.c | 9 ++++---- arch/powerpc/kvm/book3s_64_mmu_radix.c | 37 ++++++++++++++++++++++++++------ arch/powerpc/kvm/book3s_hv.c | 20 ++++++++++++++++- arch/powerpc/kvm/book3s_hv_nested.c | 2 +- arch/powerpc/kvm/book3s_hv_rm_mmu.c | 2 +- arch/powerpc/kvm/book3s_pr.c | 3 ++- arch/powerpc/kvm/powerpc.c | 2 +- 11 files changed, 73 insertions(+), 26 deletions(-)