On Fri, Jul 24, 2020 at 10:35:27AM +0200, Laurent Dufour wrote: > When a secure memslot is dropped, all the pages backed in the secure > device (aka really backed by secure memory by the Ultravisor) > should be paged out to a normal page. Previously, this was > achieved by triggering the page fault mechanism which is calling > kvmppc_svm_page_out() on each pages. > > This can't work when hot unplugging a memory slot because the memory > slot is flagged as invalid and gfn_to_pfn() is then not trying to access > the page, so the page fault mechanism is not triggered. > > Since the final goal is to make a call to kvmppc_svm_page_out() it seems > simpler to call directly instead of triggering such a mechanism. This > way kvmppc_uvmem_drop_pages() can be called even when hot unplugging a > memslot. > > Since kvmppc_uvmem_drop_pages() is already holding kvm->arch.uvmem_lock, > the call to __kvmppc_svm_page_out() is made. As > __kvmppc_svm_page_out needs the vma pointer to migrate the pages, > the VMA is fetched in a lazy way, to not trigger find_vma() all > the time. In addition, the mmap_sem is held in read mode during > that time, not in write mode since the virual memory layout is not > impacted, and kvm->arch.uvmem_lock prevents concurrent operation > on the secure device. > > Cc: Ram Pai <linuxram@xxxxxxxxxx> > Cc: Bharata B Rao <bharata@xxxxxxxxxxxxx> > Cc: Paul Mackerras <paulus@xxxxxxxxxx> > Signed-off-by: Ram Pai <linuxram@xxxxxxxxxx> > [modified the changelog description] > Signed-off-by: Laurent Dufour <ldufour@xxxxxxxxxxxxx> > [modified check on the VMA in kvmppc_uvmem_drop_pages] Reviewed-by: Bharata B Rao <bharata@xxxxxxxxxxxxx> Regards, Bharata.