On Mon, Mar 16, 2020 at 11:42:19AM -0700, Ralph Campbell wrote:
> 
> On 3/16/20 10:52 AM, Christoph Hellwig wrote:
> > No driver has actually used properly wire up and support this feature.
> > There is various code related to it in nouveau, but as far as I can tell
> > it never actually got turned on, and the only changes since the initial
> > commit are global cleanups.
> 
> This is not actually true. OpenCL 2.x does support SVM with nouveau and
> device private memory via clEnqueueSVMMigrateMem().
> Also, Ben Skeggs has accepted a set of patches to map GPU memory after being
> migrated and this change would conflict with that.

Other than the page_to_dmem() possibly doing container_of on the wrong
type pgmap, are there other bugs here to fix?

Something like this is probably close to the right thing to fix that
and work with Christoph's 1/2 patch - Ralph can you check, test, etc?

diff --git a/mm/hmm.c b/mm/hmm.c
index 9e8f68eb83287a..9fa4748da1b779 100644
--- a/mm/hmm.c
+++ b/mm/hmm.c
@@ -300,6 +300,20 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, 
unsigned long addr,
                                range->flags[HMM_PFN_DEVICE_PRIVATE];
                        cpu_flags |= is_write_device_private_entry(entry) ?
                                range->flags[HMM_PFN_WRITE] : 0;
+
+                       /*
+                        * If the caller understands this kind of device_private
+                        * page, then leave it as is, otherwise fault it.
+                        */
+                       hmm_vma_walk->pgmap = get_dev_pagemap(
+                               device_private_entry_to_pfn(entry),
+                               hmm_vma_walk->pgmap);
+                       if (!unlikely(!pgmap))
+                               return -EBUSY;
+                       if (hmm_vma_walk->pgmap->owner !=
+                           hmm_vma_walk->dev_private_owner)
+                               cpu_flags = 0;
+
                        hmm_pte_need_fault(hmm_vma_walk, orig_pfn, cpu_flags,
                                           &fault, &write_fault);
                        if (fault || write_fault)

Jason
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to