From mboxrd@z Thu Jan 1 00:00:00 1970 From: janani Date: Tue, 09 Jul 2019 19:43:47 +0000 Subject: Re: [PATCH v5 4/7] kvmppc: Handle memory plug/unplug to secure VM Message-Id: <730f4bbd1be9abae7640ddc7366b0beb@linux.vnet.ibm.com> List-Id: References: <20190709102545.9187-1-bharata@linux.ibm.com> <20190709102545.9187-5-bharata@linux.ibm.com> In-Reply-To: <20190709102545.9187-5-bharata@linux.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Bharata B Rao Cc: linuxppc-dev@lists.ozlabs.org, linuxram@us.ibm.com, cclaudio@linux.ibm.com, kvm-ppc@vger.kernel.org, linux-mm@kvack.org, jglisse@redhat.com, aneesh.kumar@linux.vnet.ibm.com, paulus@au1.ibm.com, sukadev@linux.vnet.ibm.com, Linuxppc-dev On 2019-07-09 05:25, Bharata B Rao wrote: > Register the new memslot with UV during plug and unregister > the memslot during unplug. > > Signed-off-by: Bharata B Rao > Acked-by: Paul Mackerras Reviewed-by: Janani Janakiraman > --- > arch/powerpc/include/asm/ultravisor-api.h | 1 + > arch/powerpc/include/asm/ultravisor.h | 7 +++++++ > arch/powerpc/kvm/book3s_hv.c | 19 +++++++++++++++++++ > 3 files changed, 27 insertions(+) > > diff --git a/arch/powerpc/include/asm/ultravisor-api.h > b/arch/powerpc/include/asm/ultravisor-api.h > index 07b7d638e7af..d6d6eb2e6e6b 100644 > --- a/arch/powerpc/include/asm/ultravisor-api.h > +++ b/arch/powerpc/include/asm/ultravisor-api.h > @@ -21,6 +21,7 @@ > #define UV_WRITE_PATE 0xF104 > #define UV_RETURN 0xF11C > #define UV_REGISTER_MEM_SLOT 0xF120 > +#define UV_UNREGISTER_MEM_SLOT 0xF124 > #define UV_PAGE_IN 0xF128 > #define UV_PAGE_OUT 0xF12C > > diff --git a/arch/powerpc/include/asm/ultravisor.h > b/arch/powerpc/include/asm/ultravisor.h > index b46042f1aa8f..fe45be9ee63b 100644 > --- a/arch/powerpc/include/asm/ultravisor.h > +++ b/arch/powerpc/include/asm/ultravisor.h > @@ -70,6 +70,13 @@ static inline int uv_register_mem_slot(u64 lpid, > u64 start_gpa, u64 size, > return ucall(UV_REGISTER_MEM_SLOT, retbuf, lpid, start_gpa, > size, flags, slotid); > } > + > +static inline int uv_unregister_mem_slot(u64 lpid, u64 slotid) > +{ > + unsigned long retbuf[UCALL_BUFSIZE]; > + > + return ucall(UV_UNREGISTER_MEM_SLOT, retbuf, lpid, slotid); > +} > #endif /* !__ASSEMBLY__ */ > > #endif /* _ASM_POWERPC_ULTRAVISOR_H */ > diff --git a/arch/powerpc/kvm/book3s_hv.c > b/arch/powerpc/kvm/book3s_hv.c > index b8f801d00ad4..7cbb5edaed01 100644 > --- a/arch/powerpc/kvm/book3s_hv.c > +++ b/arch/powerpc/kvm/book3s_hv.c > @@ -77,6 +77,7 @@ > #include > #include > #include > +#include > > #include "book3s.h" > > @@ -4504,6 +4505,24 @@ static void > kvmppc_core_commit_memory_region_hv(struct kvm *kvm, > if (change = KVM_MR_FLAGS_ONLY && kvm_is_radix(kvm) && > ((new->flags ^ old->flags) & KVM_MEM_LOG_DIRTY_PAGES)) > kvmppc_radix_flush_memslot(kvm, old); > + /* > + * If UV hasn't yet called H_SVM_INIT_START, don't register memslots. > + */ > + if (!kvm->arch.secure_guest) > + return; > + > + /* > + * TODO: Handle KVM_MR_MOVE > + */ > + if (change = KVM_MR_CREATE) { > + uv_register_mem_slot(kvm->arch.lpid, > + new->base_gfn << PAGE_SHIFT, > + new->npages * PAGE_SIZE, > + 0, > + new->id); > + } else if (change = KVM_MR_DELETE) { > + uv_unregister_mem_slot(kvm->arch.lpid, old->id); > + } > } > > /*