Thread (17 messages) 17 messages, 6 authors, 2016-02-25

Re: [LSF/MM ATTEND] HMM (heterogeneous memory manager) and GPU

From: David Woodhouse <dwmw2@infradead.org>
Date: 2016-02-03 08:40:58

On Wed, 2016-02-03 at 10:13 +0200, Oded Gabbay wrote:
quoted
So on process exit, the MM doesn't die because the PASID binding still
exists. The VMA of the mmap doesn't die because the MM still exists. So
the underlying file remains open because the VMA still exists. And the
PASID binding thus doesn't die because the file is still open.
Why connect the PASID to the FD in the first place ?
Why not tie everything to the MM ?
That's actually a question for the device driver in question, of
course; it's not the generic SVM support code which chooses *when* to
bind/unbind PASIDs. We just provide those functions for the driver to
call.

But the answer is that that's the normal resource tracking model.
Resources hang off the file and are cleared up when the file is closed.

(And exit_files() is called later than exit_mm()).
quoted
I've posted a patch¹ which moves us closer to the amd_iommu_v2 model,
although I'm still *strongly* resisting the temptation to call out into
device driver code from the mmu_notifier's release callback.
You mean you are resisting doing this (taken from amdkfd):

--------------
static const struct mmu_notifier_ops kfd_process_mmu_notifier_ops = {
.release = kfd_process_notifier_release,
};

process->mmu_notifier.ops = &kfd_process_mmu_notifier_ops;
-----------

Why, if I may ask ?
The KISS principle, especially as it relates to device drivers.
We just Do Not Want random device drivers being called in that context.

It's OK for amdkfd where you have sufficient clue to deal with it —
it's more than "just a device driver".

But when we get discrete devices with PASID support (and the required
TLP prefix support in our root ports at last!) we're going to see SVM
supported in many more device drivers, and we should make it simple.

Having the mmu_notifier release callback exposed to drivers is going to
strongly encourage them to do the WRONG thing, because they need to
interact with their hardware and *wait* for the PASID to be entirely
retired through the pipeline before they tell the IOMMU to flush it.

The patch at http://www.spinics.net/lists/linux-mm/msg100230.html
addresses this by clearing the PASID from the PASID table (in core
IOMMU code) when the process exits so that all subsequent accesses to
that PASID then take faults. The device driver can then clean up its
binding for that PASID in its own time.

It is a fairly fundamental rule that faulting access to *one* PASID
should not adversely affect behaviour for *other* PASIDs, of course.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

Attachments

  • smime.p7s [application/x-pkcs7-signature] 5691 bytes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help