Message ID | 20181212041530.GB22265@blackberry (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: PPC: Book3S HV: Improve live migration of radix guests | expand |
On Wed, 2018-12-12 at 15:15 +1100, Paul Mackerras wrote: > From: Bharata B Rao <bharata@linux.ibm.com> > > Currently, kvm_arch_commit_memory_region() gets called with a > parameter indicating what type of change is being made to the > memslot, > but it doesn't pass it down to the platform-specific memslot commit > functions. This adds the `change' parameter to the lower-level > functions so that they can use it in future. Reviewed-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> > > Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> > Signed-off-by: Paul Mackerras <paulus@ozlabs.org> > --- > arch/powerpc/include/asm/kvm_ppc.h | 6 ++++-- > arch/powerpc/kvm/book3s.c | 5 +++-- > arch/powerpc/kvm/book3s_hv.c | 3 ++- > arch/powerpc/kvm/book3s_pr.c | 3 ++- > arch/powerpc/kvm/powerpc.c | 2 +- > 5 files changed, 12 insertions(+), 7 deletions(-) > > diff --git a/arch/powerpc/include/asm/kvm_ppc.h > b/arch/powerpc/include/asm/kvm_ppc.h > index 9b89b19..04c5b84 100644 > --- a/arch/powerpc/include/asm/kvm_ppc.h > +++ b/arch/powerpc/include/asm/kvm_ppc.h > @@ -224,7 +224,8 @@ extern int > kvmppc_core_prepare_memory_region(struct kvm *kvm, > extern void kvmppc_core_commit_memory_region(struct kvm *kvm, > const struct > kvm_userspace_memory_region *mem, > const struct kvm_memory_slot *old, > - const struct kvm_memory_slot *new); > + const struct kvm_memory_slot *new, > + enum kvm_mr_change change); > extern int kvm_vm_ioctl_get_smmu_info(struct kvm *kvm, > struct kvm_ppc_smmu_info > *info); > extern void kvmppc_core_flush_memslot(struct kvm *kvm, > @@ -294,7 +295,8 @@ struct kvmppc_ops { > void (*commit_memory_region)(struct kvm *kvm, > const struct > kvm_userspace_memory_region *mem, > const struct kvm_memory_slot > *old, > - const struct kvm_memory_slot > *new); > + const struct kvm_memory_slot > *new, > + enum kvm_mr_change change); > int (*unmap_hva_range)(struct kvm *kvm, unsigned long start, > unsigned long end); > int (*age_hva)(struct kvm *kvm, unsigned long start, > unsigned long end); > diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c > index fd9893b..a35fb40 100644 > --- a/arch/powerpc/kvm/book3s.c > +++ b/arch/powerpc/kvm/book3s.c > @@ -830,9 +830,10 @@ int kvmppc_core_prepare_memory_region(struct kvm > *kvm, > void kvmppc_core_commit_memory_region(struct kvm *kvm, > const struct > kvm_userspace_memory_region *mem, > const struct kvm_memory_slot *old, > - const struct kvm_memory_slot *new) > + const struct kvm_memory_slot *new, > + enum kvm_mr_change change) > { > - kvm->arch.kvm_ops->commit_memory_region(kvm, mem, old, new); > + kvm->arch.kvm_ops->commit_memory_region(kvm, mem, old, new, > change); > } > > int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, > unsigned long end) > diff --git a/arch/powerpc/kvm/book3s_hv.c > b/arch/powerpc/kvm/book3s_hv.c > index ab43306..f4fbb7b5 100644 > --- a/arch/powerpc/kvm/book3s_hv.c > +++ b/arch/powerpc/kvm/book3s_hv.c > @@ -4371,7 +4371,8 @@ static int > kvmppc_core_prepare_memory_region_hv(struct kvm *kvm, > static void kvmppc_core_commit_memory_region_hv(struct kvm *kvm, > const struct > kvm_userspace_memory_region *mem, > const struct kvm_memory_slot *old, > - const struct kvm_memory_slot *new) > + const struct kvm_memory_slot *new, > + enum kvm_mr_change change) > { > unsigned long npages = mem->memory_size >> PAGE_SHIFT; > > diff --git a/arch/powerpc/kvm/book3s_pr.c > b/arch/powerpc/kvm/book3s_pr.c > index 4efd65d..3aeb17b 100644 > --- a/arch/powerpc/kvm/book3s_pr.c > +++ b/arch/powerpc/kvm/book3s_pr.c > @@ -1913,7 +1913,8 @@ static int > kvmppc_core_prepare_memory_region_pr(struct kvm *kvm, > static void kvmppc_core_commit_memory_region_pr(struct kvm *kvm, > const struct > kvm_userspace_memory_region *mem, > const struct kvm_memory_slot *old, > - const struct kvm_memory_slot *new) > + const struct kvm_memory_slot *new, > + enum kvm_mr_change change) > { > return; > } > diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c > index 2869a29..6a7a6a1 100644 > --- a/arch/powerpc/kvm/powerpc.c > +++ b/arch/powerpc/kvm/powerpc.c > @@ -696,7 +696,7 @@ void kvm_arch_commit_memory_region(struct kvm > *kvm, > const struct kvm_memory_slot > *new, > enum kvm_mr_change change) > { > - kvmppc_core_commit_memory_region(kvm, mem, old, new); > + kvmppc_core_commit_memory_region(kvm, mem, old, new, > change); > } > > void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
On Wed, Dec 12, 2018 at 03:15:30PM +1100, Paul Mackerras wrote: > From: Bharata B Rao <bharata@linux.ibm.com> > > Currently, kvm_arch_commit_memory_region() gets called with a > parameter indicating what type of change is being made to the memslot, > but it doesn't pass it down to the platform-specific memslot commit > functions. This adds the `change' parameter to the lower-level > functions so that they can use it in future. > > Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> > Signed-off-by: Paul Mackerras <paulus@ozlabs.org> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> > --- > arch/powerpc/include/asm/kvm_ppc.h | 6 ++++-- > arch/powerpc/kvm/book3s.c | 5 +++-- > arch/powerpc/kvm/book3s_hv.c | 3 ++- > arch/powerpc/kvm/book3s_pr.c | 3 ++- > arch/powerpc/kvm/powerpc.c | 2 +- > 5 files changed, 12 insertions(+), 7 deletions(-) > > diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h > index 9b89b19..04c5b84 100644 > --- a/arch/powerpc/include/asm/kvm_ppc.h > +++ b/arch/powerpc/include/asm/kvm_ppc.h > @@ -224,7 +224,8 @@ extern int kvmppc_core_prepare_memory_region(struct kvm *kvm, > extern void kvmppc_core_commit_memory_region(struct kvm *kvm, > const struct kvm_userspace_memory_region *mem, > const struct kvm_memory_slot *old, > - const struct kvm_memory_slot *new); > + const struct kvm_memory_slot *new, > + enum kvm_mr_change change); > extern int kvm_vm_ioctl_get_smmu_info(struct kvm *kvm, > struct kvm_ppc_smmu_info *info); > extern void kvmppc_core_flush_memslot(struct kvm *kvm, > @@ -294,7 +295,8 @@ struct kvmppc_ops { > void (*commit_memory_region)(struct kvm *kvm, > const struct kvm_userspace_memory_region *mem, > const struct kvm_memory_slot *old, > - const struct kvm_memory_slot *new); > + const struct kvm_memory_slot *new, > + enum kvm_mr_change change); > int (*unmap_hva_range)(struct kvm *kvm, unsigned long start, > unsigned long end); > int (*age_hva)(struct kvm *kvm, unsigned long start, unsigned long end); > diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c > index fd9893b..a35fb40 100644 > --- a/arch/powerpc/kvm/book3s.c > +++ b/arch/powerpc/kvm/book3s.c > @@ -830,9 +830,10 @@ int kvmppc_core_prepare_memory_region(struct kvm *kvm, > void kvmppc_core_commit_memory_region(struct kvm *kvm, > const struct kvm_userspace_memory_region *mem, > const struct kvm_memory_slot *old, > - const struct kvm_memory_slot *new) > + const struct kvm_memory_slot *new, > + enum kvm_mr_change change) > { > - kvm->arch.kvm_ops->commit_memory_region(kvm, mem, old, new); > + kvm->arch.kvm_ops->commit_memory_region(kvm, mem, old, new, change); > } > > int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end) > diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c > index ab43306..f4fbb7b5 100644 > --- a/arch/powerpc/kvm/book3s_hv.c > +++ b/arch/powerpc/kvm/book3s_hv.c > @@ -4371,7 +4371,8 @@ static int kvmppc_core_prepare_memory_region_hv(struct kvm *kvm, > static void kvmppc_core_commit_memory_region_hv(struct kvm *kvm, > const struct kvm_userspace_memory_region *mem, > const struct kvm_memory_slot *old, > - const struct kvm_memory_slot *new) > + const struct kvm_memory_slot *new, > + enum kvm_mr_change change) > { > unsigned long npages = mem->memory_size >> PAGE_SHIFT; > > diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c > index 4efd65d..3aeb17b 100644 > --- a/arch/powerpc/kvm/book3s_pr.c > +++ b/arch/powerpc/kvm/book3s_pr.c > @@ -1913,7 +1913,8 @@ static int kvmppc_core_prepare_memory_region_pr(struct kvm *kvm, > static void kvmppc_core_commit_memory_region_pr(struct kvm *kvm, > const struct kvm_userspace_memory_region *mem, > const struct kvm_memory_slot *old, > - const struct kvm_memory_slot *new) > + const struct kvm_memory_slot *new, > + enum kvm_mr_change change) > { > return; > } > diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c > index 2869a29..6a7a6a1 100644 > --- a/arch/powerpc/kvm/powerpc.c > +++ b/arch/powerpc/kvm/powerpc.c > @@ -696,7 +696,7 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, > const struct kvm_memory_slot *new, > enum kvm_mr_change change) > { > - kvmppc_core_commit_memory_region(kvm, mem, old, new); > + kvmppc_core_commit_memory_region(kvm, mem, old, new, change); > } > > void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h index 9b89b19..04c5b84 100644 --- a/arch/powerpc/include/asm/kvm_ppc.h +++ b/arch/powerpc/include/asm/kvm_ppc.h @@ -224,7 +224,8 @@ extern int kvmppc_core_prepare_memory_region(struct kvm *kvm, extern void kvmppc_core_commit_memory_region(struct kvm *kvm, const struct kvm_userspace_memory_region *mem, const struct kvm_memory_slot *old, - const struct kvm_memory_slot *new); + const struct kvm_memory_slot *new, + enum kvm_mr_change change); extern int kvm_vm_ioctl_get_smmu_info(struct kvm *kvm, struct kvm_ppc_smmu_info *info); extern void kvmppc_core_flush_memslot(struct kvm *kvm, @@ -294,7 +295,8 @@ struct kvmppc_ops { void (*commit_memory_region)(struct kvm *kvm, const struct kvm_userspace_memory_region *mem, const struct kvm_memory_slot *old, - const struct kvm_memory_slot *new); + const struct kvm_memory_slot *new, + enum kvm_mr_change change); int (*unmap_hva_range)(struct kvm *kvm, unsigned long start, unsigned long end); int (*age_hva)(struct kvm *kvm, unsigned long start, unsigned long end); diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c index fd9893b..a35fb40 100644 --- a/arch/powerpc/kvm/book3s.c +++ b/arch/powerpc/kvm/book3s.c @@ -830,9 +830,10 @@ int kvmppc_core_prepare_memory_region(struct kvm *kvm, void kvmppc_core_commit_memory_region(struct kvm *kvm, const struct kvm_userspace_memory_region *mem, const struct kvm_memory_slot *old, - const struct kvm_memory_slot *new) + const struct kvm_memory_slot *new, + enum kvm_mr_change change) { - kvm->arch.kvm_ops->commit_memory_region(kvm, mem, old, new); + kvm->arch.kvm_ops->commit_memory_region(kvm, mem, old, new, change); } int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end) diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index ab43306..f4fbb7b5 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c @@ -4371,7 +4371,8 @@ static int kvmppc_core_prepare_memory_region_hv(struct kvm *kvm, static void kvmppc_core_commit_memory_region_hv(struct kvm *kvm, const struct kvm_userspace_memory_region *mem, const struct kvm_memory_slot *old, - const struct kvm_memory_slot *new) + const struct kvm_memory_slot *new, + enum kvm_mr_change change) { unsigned long npages = mem->memory_size >> PAGE_SHIFT; diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c index 4efd65d..3aeb17b 100644 --- a/arch/powerpc/kvm/book3s_pr.c +++ b/arch/powerpc/kvm/book3s_pr.c @@ -1913,7 +1913,8 @@ static int kvmppc_core_prepare_memory_region_pr(struct kvm *kvm, static void kvmppc_core_commit_memory_region_pr(struct kvm *kvm, const struct kvm_userspace_memory_region *mem, const struct kvm_memory_slot *old, - const struct kvm_memory_slot *new) + const struct kvm_memory_slot *new, + enum kvm_mr_change change) { return; } diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index 2869a29..6a7a6a1 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c @@ -696,7 +696,7 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, const struct kvm_memory_slot *new, enum kvm_mr_change change) { - kvmppc_core_commit_memory_region(kvm, mem, old, new); + kvmppc_core_commit_memory_region(kvm, mem, old, new, change); } void kvm_arch_flush_shadow_memslot(struct kvm *kvm,