Message ID | 1590892071-25549-5-git-send-email-linuxram@us.ibm.com |
---|---|
State | Changes Requested |
Headers | show |
Series | Migrate non-migrated pages of a SVM. | expand |
Hi Ram, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on powerpc/next] [also build test WARNING on v5.7] [cannot apply to next-20200529] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Ram-Pai/Migrate-non-migrated-pages-of-a-SVM/20200601-034649 base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next config: powerpc-rhel-kconfig (attached as .config) compiler: powerpc64le-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=powerpc If you fix the issue, kindly add following tag as appropriate Reported-by: kbuild test robot <lkp@intel.com> All warnings (new ones prefixed by >>, old ones prefixed by <<): arch/powerpc/kvm/book3s_hv.c:3516:5: warning: no previous prototype for 'kvmhv_p9_guest_entry' [-Wmissing-prototypes] 3516 | int kvmhv_p9_guest_entry(struct kvm_vcpu *vcpu, u64 time_limit, | ^~~~~~~~~~~~~~~~~~~~ In file included from arch/powerpc/kvm/book3s_hv.c:75: >> arch/powerpc/include/asm/kvm_book3s_uvmem.h:89:12: warning: 'uv_migrate_mem_slot' used but never defined 89 | static int uv_migrate_mem_slot(struct kvm *kvm, | ^~~~~~~~~~~~~~~~~~~ vim +/uv_migrate_mem_slot +89 arch/powerpc/include/asm/kvm_book3s_uvmem.h 83 84 static inline void 85 kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free, 86 struct kvm *kvm, bool skip_page_out, 87 bool purge_gfn) { } 88 > 89 static int uv_migrate_mem_slot(struct kvm *kvm, --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Ram, Thank you for the patch! Yet something to improve: [auto build test ERROR on powerpc/next] [also build test ERROR on v5.7] [cannot apply to next-20200529] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Ram-Pai/Migrate-non-migrated-pages-of-a-SVM/20200601-034649 base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next config: powerpc-defconfig (attached as .config) compiler: powerpc64-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=powerpc If you fix the issue, kindly add following tag as appropriate Reported-by: kbuild test robot <lkp@intel.com> All errors (new ones prefixed by >>, old ones prefixed by <<): arch/powerpc/kvm/book3s_64_mmu_radix.c:345:6: error: no previous prototype for 'kvmppc_radix_set_pte_at' [-Werror=missing-prototypes] 345 | void kvmppc_radix_set_pte_at(struct kvm *kvm, unsigned long addr, | ^~~~~~~~~~~~~~~~~~~~~~~ In file included from arch/powerpc/kvm/book3s_64_mmu_radix.c:23: >> arch/powerpc/include/asm/kvm_book3s_uvmem.h:89:12: error: 'uv_migrate_mem_slot' declared 'static' but never defined [-Werror=unused-function] 89 | static int uv_migrate_mem_slot(struct kvm *kvm, | ^~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors vim +89 arch/powerpc/include/asm/kvm_book3s_uvmem.h 83 84 static inline void 85 kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free, 86 struct kvm *kvm, bool skip_page_out, 87 bool purge_gfn) { } 88 > 89 static int uv_migrate_mem_slot(struct kvm *kvm, --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Le 31/05/2020 à 04:27, Ram Pai a écrit : > From: Laurent Dufour <ldufour@linux.ibm.com> > > When a memory slot is hot plugged to a SVM, GFNs associated with that > memory slot automatically default to secure GFN. Hence migrate the > PFNs associated with these GFNs to device-PFNs. > > uv_migrate_mem_slot() is called to achieve that. It will not call > UV_PAGE_IN since this request is ignored by the Ultravisor. > NOTE: Ultravisor does not trust any page content provided by > the Hypervisor, ones the VM turns secure. > > Cc: Paul Mackerras <paulus@ozlabs.org> > Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Cc: Michael Ellerman <mpe@ellerman.id.au> > Cc: Bharata B Rao <bharata@linux.ibm.com> > Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> > Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> > Cc: Laurent Dufour <ldufour@linux.ibm.com> > Cc: Thiago Jung Bauermann <bauerman@linux.ibm.com> > Cc: David Gibson <david@gibson.dropbear.id.au> > Cc: Claudio Carvalho <cclaudio@linux.ibm.com> > Cc: kvm-ppc@vger.kernel.org > Cc: linuxppc-dev@lists.ozlabs.org > Signed-off-by: Ram Pai <linuxram@us.ibm.com> > (fixed merge conflicts. Modified the commit message) > Signed-off-by: Laurent Dufour <ldufour@linux.ibm.com> > --- > arch/powerpc/include/asm/kvm_book3s_uvmem.h | 4 ++++ > arch/powerpc/kvm/book3s_hv.c | 11 +++++++---- > arch/powerpc/kvm/book3s_hv_uvmem.c | 3 +-- > 3 files changed, 12 insertions(+), 6 deletions(-) > > diff --git a/arch/powerpc/include/asm/kvm_book3s_uvmem.h b/arch/powerpc/include/asm/kvm_book3s_uvmem.h > index f0c5708..2ec2e5afb 100644 > --- a/arch/powerpc/include/asm/kvm_book3s_uvmem.h > +++ b/arch/powerpc/include/asm/kvm_book3s_uvmem.h > @@ -23,6 +23,7 @@ unsigned long kvmppc_h_svm_page_out(struct kvm *kvm, > void kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free, > struct kvm *kvm, bool skip_page_out, > bool purge_gfn); > +int uv_migrate_mem_slot(struct kvm *kvm, const struct kvm_memory_slot *memslot); > #else > static inline int kvmppc_uvmem_init(void) > { > @@ -78,5 +79,8 @@ static inline int kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn) > kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free, > struct kvm *kvm, bool skip_page_out, > bool purge_gfn) { } > + > +static int uv_migrate_mem_slot(struct kvm *kvm, > + const struct kvm_memory_slot *memslot); That line was not part of the patch I sent to you! > #endif /* CONFIG_PPC_UV */ > #endif /* __ASM_KVM_BOOK3S_UVMEM_H__ */ > diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c > index 4c62bfe..604d062 100644 > --- a/arch/powerpc/kvm/book3s_hv.c > +++ b/arch/powerpc/kvm/book3s_hv.c > @@ -4516,13 +4516,16 @@ static void kvmppc_core_commit_memory_region_hv(struct kvm *kvm, > case KVM_MR_CREATE: > if (kvmppc_uvmem_slot_init(kvm, new)) > return; > - uv_register_mem_slot(kvm->arch.lpid, > - new->base_gfn << PAGE_SHIFT, > - new->npages * PAGE_SIZE, > - 0, new->id); > + if (uv_register_mem_slot(kvm->arch.lpid, > + new->base_gfn << PAGE_SHIFT, > + new->npages * PAGE_SIZE, > + 0, new->id)) > + return; > + uv_migrate_mem_slot(kvm, new); > break; > case KVM_MR_DELETE: > uv_unregister_mem_slot(kvm->arch.lpid, old->id); > + kvmppc_uvmem_drop_pages(old, kvm, true, true); Again that line has been changed from the patch I sent to you. The last 'true' argument has nothing to do here. Is that series really building? > kvmppc_uvmem_slot_free(kvm, old); > break; > default: > diff --git a/arch/powerpc/kvm/book3s_hv_uvmem.c b/arch/powerpc/kvm/book3s_hv_uvmem.c > index 36dda1d..1fa5f2a 100644 > --- a/arch/powerpc/kvm/book3s_hv_uvmem.c > +++ b/arch/powerpc/kvm/book3s_hv_uvmem.c > @@ -377,8 +377,7 @@ static int kvmppc_svm_migrate_page(struct vm_area_struct *vma, > return ret; > } > > -static int uv_migrate_mem_slot(struct kvm *kvm, > - const struct kvm_memory_slot *memslot) > +int uv_migrate_mem_slot(struct kvm *kvm, const struct kvm_memory_slot *memslot) > { > unsigned long gfn = memslot->base_gfn; > unsigned long end; >
On Tue, Jun 02, 2020 at 10:31:32AM +0200, Laurent Dufour wrote: > Le 31/05/2020 à 04:27, Ram Pai a écrit : > >From: Laurent Dufour <ldufour@linux.ibm.com> > > > >When a memory slot is hot plugged to a SVM, GFNs associated with that > >memory slot automatically default to secure GFN. Hence migrate the > >PFNs associated with these GFNs to device-PFNs. > > > >uv_migrate_mem_slot() is called to achieve that. It will not call > >UV_PAGE_IN since this request is ignored by the Ultravisor. > >NOTE: Ultravisor does not trust any page content provided by > >the Hypervisor, ones the VM turns secure. > > > >Cc: Paul Mackerras <paulus@ozlabs.org> > >Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > >Cc: Michael Ellerman <mpe@ellerman.id.au> > >Cc: Bharata B Rao <bharata@linux.ibm.com> > >Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> > >Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> > >Cc: Laurent Dufour <ldufour@linux.ibm.com> > >Cc: Thiago Jung Bauermann <bauerman@linux.ibm.com> > >Cc: David Gibson <david@gibson.dropbear.id.au> > >Cc: Claudio Carvalho <cclaudio@linux.ibm.com> > >Cc: kvm-ppc@vger.kernel.org > >Cc: linuxppc-dev@lists.ozlabs.org > >Signed-off-by: Ram Pai <linuxram@us.ibm.com> > > (fixed merge conflicts. Modified the commit message) > >Signed-off-by: Laurent Dufour <ldufour@linux.ibm.com> > >--- > > arch/powerpc/include/asm/kvm_book3s_uvmem.h | 4 ++++ > > arch/powerpc/kvm/book3s_hv.c | 11 +++++++---- > > arch/powerpc/kvm/book3s_hv_uvmem.c | 3 +-- > > 3 files changed, 12 insertions(+), 6 deletions(-) > > > >diff --git a/arch/powerpc/include/asm/kvm_book3s_uvmem.h b/arch/powerpc/include/asm/kvm_book3s_uvmem.h > >index f0c5708..2ec2e5afb 100644 > >--- a/arch/powerpc/include/asm/kvm_book3s_uvmem.h > >+++ b/arch/powerpc/include/asm/kvm_book3s_uvmem.h > >@@ -23,6 +23,7 @@ unsigned long kvmppc_h_svm_page_out(struct kvm *kvm, > > void kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free, > > struct kvm *kvm, bool skip_page_out, > > bool purge_gfn); > >+int uv_migrate_mem_slot(struct kvm *kvm, const struct kvm_memory_slot *memslot); > > #else > > static inline int kvmppc_uvmem_init(void) > > { > >@@ -78,5 +79,8 @@ static inline int kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn) > > kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free, > > struct kvm *kvm, bool skip_page_out, > > bool purge_gfn) { } > >+ > >+static int uv_migrate_mem_slot(struct kvm *kvm, > >+ const struct kvm_memory_slot *memslot); > > That line was not part of the patch I sent to you! Your patch is rebased on top of my patches. This prototype declaration is for the ifndef CONFIG_PPC_UV case. > > > > #endif /* CONFIG_PPC_UV */ > > #endif /* __ASM_KVM_BOOK3S_UVMEM_H__ */ > >diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c > >index 4c62bfe..604d062 100644 > >--- a/arch/powerpc/kvm/book3s_hv.c > >+++ b/arch/powerpc/kvm/book3s_hv.c > >@@ -4516,13 +4516,16 @@ static void kvmppc_core_commit_memory_region_hv(struct kvm *kvm, > > case KVM_MR_CREATE: > > if (kvmppc_uvmem_slot_init(kvm, new)) > > return; > >- uv_register_mem_slot(kvm->arch.lpid, > >- new->base_gfn << PAGE_SHIFT, > >- new->npages * PAGE_SIZE, > >- 0, new->id); > >+ if (uv_register_mem_slot(kvm->arch.lpid, > >+ new->base_gfn << PAGE_SHIFT, > >+ new->npages * PAGE_SIZE, > >+ 0, new->id)) > >+ return; > >+ uv_migrate_mem_slot(kvm, new); > > break; > > case KVM_MR_DELETE: > > uv_unregister_mem_slot(kvm->arch.lpid, old->id); > >+ kvmppc_uvmem_drop_pages(old, kvm, true, true); > > Again that line has been changed from the patch I sent to you. The > last 'true' argument has nothing to do here. yes. i did add another parameter to kvmppc_uvmem_drop_pages() in my patch series. So had to adapt your patch to operate on top my mine. > > Is that series really building? yes. it built for me. RP
Le 31/05/2020 à 04:27, Ram Pai a écrit : > From: Laurent Dufour <ldufour@linux.ibm.com> > > When a memory slot is hot plugged to a SVM, GFNs associated with that > memory slot automatically default to secure GFN. Hence migrate the > PFNs associated with these GFNs to device-PFNs. > > uv_migrate_mem_slot() is called to achieve that. It will not call > UV_PAGE_IN since this request is ignored by the Ultravisor. > NOTE: Ultravisor does not trust any page content provided by > the Hypervisor, ones the VM turns secure. > > Cc: Paul Mackerras <paulus@ozlabs.org> > Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Cc: Michael Ellerman <mpe@ellerman.id.au> > Cc: Bharata B Rao <bharata@linux.ibm.com> > Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> > Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> > Cc: Laurent Dufour <ldufour@linux.ibm.com> > Cc: Thiago Jung Bauermann <bauerman@linux.ibm.com> > Cc: David Gibson <david@gibson.dropbear.id.au> > Cc: Claudio Carvalho <cclaudio@linux.ibm.com> > Cc: kvm-ppc@vger.kernel.org > Cc: linuxppc-dev@lists.ozlabs.org > Signed-off-by: Ram Pai <linuxram@us.ibm.com> > (fixed merge conflicts. Modified the commit message) > Signed-off-by: Laurent Dufour <ldufour@linux.ibm.com> > --- > arch/powerpc/include/asm/kvm_book3s_uvmem.h | 4 ++++ > arch/powerpc/kvm/book3s_hv.c | 11 +++++++---- > arch/powerpc/kvm/book3s_hv_uvmem.c | 3 +-- > 3 files changed, 12 insertions(+), 6 deletions(-) > > diff --git a/arch/powerpc/include/asm/kvm_book3s_uvmem.h b/arch/powerpc/include/asm/kvm_book3s_uvmem.h > index f0c5708..2ec2e5afb 100644 > --- a/arch/powerpc/include/asm/kvm_book3s_uvmem.h > +++ b/arch/powerpc/include/asm/kvm_book3s_uvmem.h > @@ -23,6 +23,7 @@ unsigned long kvmppc_h_svm_page_out(struct kvm *kvm, > void kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free, > struct kvm *kvm, bool skip_page_out, > bool purge_gfn); > +int uv_migrate_mem_slot(struct kvm *kvm, const struct kvm_memory_slot *memslot); > #else > static inline int kvmppc_uvmem_init(void) > { > @@ -78,5 +79,8 @@ static inline int kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn) > kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free, > struct kvm *kvm, bool skip_page_out, > bool purge_gfn) { } > + > +static int uv_migrate_mem_slot(struct kvm *kvm, > + const struct kvm_memory_slot *memslot); > #endif /* CONFIG_PPC_UV */ > #endif /* __ASM_KVM_BOOK3S_UVMEM_H__ */ > diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c > index 4c62bfe..604d062 100644 > --- a/arch/powerpc/kvm/book3s_hv.c > +++ b/arch/powerpc/kvm/book3s_hv.c > @@ -4516,13 +4516,16 @@ static void kvmppc_core_commit_memory_region_hv(struct kvm *kvm, > case KVM_MR_CREATE: > if (kvmppc_uvmem_slot_init(kvm, new)) > return; > - uv_register_mem_slot(kvm->arch.lpid, > - new->base_gfn << PAGE_SHIFT, > - new->npages * PAGE_SIZE, > - 0, new->id); > + if (uv_register_mem_slot(kvm->arch.lpid, > + new->base_gfn << PAGE_SHIFT, > + new->npages * PAGE_SIZE, > + 0, new->id)) > + return; > + uv_migrate_mem_slot(kvm, new); > break; > case KVM_MR_DELETE: > uv_unregister_mem_slot(kvm->arch.lpid, old->id); > + kvmppc_uvmem_drop_pages(old, kvm, true, true); My mistake, kvmppc_radix_flush_memslot() called just before is already triggering the call to kvmppc_uvmem_drop_pages(), so that call is useless. You should remove it in your v2. > kvmppc_uvmem_slot_free(kvm, old); > break; > default: > diff --git a/arch/powerpc/kvm/book3s_hv_uvmem.c b/arch/powerpc/kvm/book3s_hv_uvmem.c > index 36dda1d..1fa5f2a 100644 > --- a/arch/powerpc/kvm/book3s_hv_uvmem.c > +++ b/arch/powerpc/kvm/book3s_hv_uvmem.c > @@ -377,8 +377,7 @@ static int kvmppc_svm_migrate_page(struct vm_area_struct *vma, > return ret; > } > > -static int uv_migrate_mem_slot(struct kvm *kvm, > - const struct kvm_memory_slot *memslot) > +int uv_migrate_mem_slot(struct kvm *kvm, const struct kvm_memory_slot *memslot) > { > unsigned long gfn = memslot->base_gfn; > unsigned long end; >
diff --git a/arch/powerpc/include/asm/kvm_book3s_uvmem.h b/arch/powerpc/include/asm/kvm_book3s_uvmem.h index f0c5708..2ec2e5afb 100644 --- a/arch/powerpc/include/asm/kvm_book3s_uvmem.h +++ b/arch/powerpc/include/asm/kvm_book3s_uvmem.h @@ -23,6 +23,7 @@ unsigned long kvmppc_h_svm_page_out(struct kvm *kvm, void kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free, struct kvm *kvm, bool skip_page_out, bool purge_gfn); +int uv_migrate_mem_slot(struct kvm *kvm, const struct kvm_memory_slot *memslot); #else static inline int kvmppc_uvmem_init(void) { @@ -78,5 +79,8 @@ static inline int kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn) kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free, struct kvm *kvm, bool skip_page_out, bool purge_gfn) { } + +static int uv_migrate_mem_slot(struct kvm *kvm, + const struct kvm_memory_slot *memslot); #endif /* CONFIG_PPC_UV */ #endif /* __ASM_KVM_BOOK3S_UVMEM_H__ */ diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index 4c62bfe..604d062 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c @@ -4516,13 +4516,16 @@ static void kvmppc_core_commit_memory_region_hv(struct kvm *kvm, case KVM_MR_CREATE: if (kvmppc_uvmem_slot_init(kvm, new)) return; - uv_register_mem_slot(kvm->arch.lpid, - new->base_gfn << PAGE_SHIFT, - new->npages * PAGE_SIZE, - 0, new->id); + if (uv_register_mem_slot(kvm->arch.lpid, + new->base_gfn << PAGE_SHIFT, + new->npages * PAGE_SIZE, + 0, new->id)) + return; + uv_migrate_mem_slot(kvm, new); break; case KVM_MR_DELETE: uv_unregister_mem_slot(kvm->arch.lpid, old->id); + kvmppc_uvmem_drop_pages(old, kvm, true, true); kvmppc_uvmem_slot_free(kvm, old); break; default: diff --git a/arch/powerpc/kvm/book3s_hv_uvmem.c b/arch/powerpc/kvm/book3s_hv_uvmem.c index 36dda1d..1fa5f2a 100644 --- a/arch/powerpc/kvm/book3s_hv_uvmem.c +++ b/arch/powerpc/kvm/book3s_hv_uvmem.c @@ -377,8 +377,7 @@ static int kvmppc_svm_migrate_page(struct vm_area_struct *vma, return ret; } -static int uv_migrate_mem_slot(struct kvm *kvm, - const struct kvm_memory_slot *memslot) +int uv_migrate_mem_slot(struct kvm *kvm, const struct kvm_memory_slot *memslot) { unsigned long gfn = memslot->base_gfn; unsigned long end;