linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@nvidia.com>
To: Felix Kuehling <felix.kuehling@amd.com>
Cc: Christoph Hellwig <hch@lst.de>,
	David Hildenbrand <david@redhat.com>,
	Alex Sierra <alex.sierra@amd.com>,
	akpm@linux-foundation.org, linux-mm@kvack.org,
	rcampbell@nvidia.com, linux-ext4@vger.kernel.org,
	linux-xfs@vger.kernel.org, amd-gfx@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org, jglisse@redhat.com,
	apopple@nvidia.com, willy@infradead.org
Subject: Re: [PATCH v6 01/10] mm: add zone device coherent type memory support
Date: Tue, 15 Feb 2022 17:47:49 -0400	[thread overview]
Message-ID: <20220215214749.GA4160@nvidia.com> (raw)
In-Reply-To: <ac3d5157-9251-f9fb-a973-f268ce58b4e0@amd.com>

On Tue, Feb 15, 2022 at 04:35:56PM -0500, Felix Kuehling wrote:
> 
> On 2022-02-15 14:41, Jason Gunthorpe wrote:
> > On Tue, Feb 15, 2022 at 07:32:09PM +0100, Christoph Hellwig wrote:
> > > On Tue, Feb 15, 2022 at 10:45:24AM -0400, Jason Gunthorpe wrote:
> > > > > Do you know if DEVICE_GENERIC pages would end up as PageAnon()? My
> > > > > assumption was that they would be part of a special mapping.
> > > > We need to stop using the special PTEs and VMAs for things that have a
> > > > struct page. This is a mistake DAX created that must be undone.
> > > Yes, we'll get to it.  Maybe we can do it for the non-DAX devmap
> > > ptes first given that DAX is more complicated.
> > Probably, I think we can check the page->pgmap type to tell the
> > difference.
> > 
> > I'm not sure how the DEVICE_GENERIC can work without this, as DAX was
> > made safe by using the unmap_mapping_range(), which won't work
> > here. Is there some other trick being used to keep track of references
> > inside the AMD driver?
> 
> Not sure I'm following all the discussion about VMAs and DAX. So I may be
> answering the wrong question: We treat each ZONE_DEVICE page as a reference
> to the BO (buffer object) that backs the page. We increment the BO refcount
> for each page we migrate into it. In the dev_pagemap_ops.page_free callback
> we drop that reference. Once all pages backed by a BO are freed, the BO
> refcount reaches 0 [*] and we can free the BO allocation.

Userspace does
 1) mmap(MAP_PRIVATE) to allocate anon memory
 2) something to trigger migration to install a ZONE_DEVICE page
 3) munmap()

Who decrements the refcout on the munmap?

When a ZONE_DEVICE page is installed in the PTE is supposed to be
marked as pte_devmap and that disables all the normal page refcounting
during munmap().

fsdax makes this work by working the refcounts backwards, the page is
refcounted while it exists in the driver, when the driver decides to
remove it then unmap_mapping_range() is called to purge it from all
PTEs and then refcount is decrd. munmap/fork/etc don't change the
refcount.

Jason


  reply	other threads:[~2022-02-15 21:47 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-01 15:48 [PATCH v6 00/10] Add MEMORY_DEVICE_COHERENT for coherent device memory mapping Alex Sierra
2022-02-01 15:48 ` [PATCH v6 01/10] mm: add zone device coherent type memory support Alex Sierra
2022-02-11 16:15   ` David Hildenbrand
2022-02-11 16:39     ` David Hildenbrand
2022-02-11 16:52       ` Sierra Guiza, Alejandro (Alex)
2022-02-11 17:07       ` Felix Kuehling
2022-02-15 12:16         ` David Hildenbrand
2022-02-15 14:45           ` Jason Gunthorpe
2022-02-15 18:32             ` Christoph Hellwig
2022-02-15 19:41               ` Jason Gunthorpe
2022-02-15 21:35                 ` Felix Kuehling
2022-02-15 21:47                   ` Jason Gunthorpe [this message]
2022-02-15 22:49                     ` Felix Kuehling
2022-02-16  2:01                       ` Jason Gunthorpe
2022-02-16 16:56                         ` Felix Kuehling
2022-02-16 17:28                           ` Jason Gunthorpe
2022-02-16  1:23                     ` Alistair Popple
2022-02-16  2:03                       ` Jason Gunthorpe
2022-02-16  2:36                         ` Alistair Popple
2022-02-16  8:31                           ` David Hildenbrand
2022-02-16 12:26                             ` Jason Gunthorpe
2022-02-17  1:05                               ` Alistair Popple
2022-02-17 21:12                               ` Felix Kuehling
2022-02-18  0:19                                 ` Jason Gunthorpe
2022-02-18 19:20                                   ` Felix Kuehling
2022-02-18 19:26                                     ` Jason Gunthorpe
2022-02-18 19:37                                       ` Felix Kuehling
2022-02-28 20:34                                       ` [PATCH] mm: split vm_normal_pages for LRU and non-LRU handling Alex Sierra
2022-02-28 22:41                                         ` Felix Kuehling
2022-03-01  8:03                                         ` David Hildenbrand
2022-03-01 16:08                                           ` Felix Kuehling
2022-03-01 16:22                                             ` David Hildenbrand
2022-03-01 16:30                                               ` Felix Kuehling
2022-03-01 16:32                                                 ` David Hildenbrand
2022-02-18  0:59                                 ` [PATCH v6 01/10] mm: add zone device coherent type memory support Alistair Popple
2022-02-11 16:45     ` Jason Gunthorpe
2022-02-11 16:49       ` David Hildenbrand
2022-02-11 16:56         ` Jason Gunthorpe
2022-02-15 12:15           ` David Hildenbrand
2022-02-15 18:52             ` Felix Kuehling
2022-02-11 17:05     ` Felix Kuehling
2022-02-14  2:04       ` Alistair Popple
2022-02-01 15:48 ` [PATCH v6 02/10] mm: add device coherent vma selection for memory migration Alex Sierra
2022-02-01 15:48 ` [PATCH v6 03/10] mm/gup: fail get_user_pages for LONGTERM dev coherent type Alex Sierra
2022-02-01 15:48 ` [PATCH v6 04/10] drm/amdkfd: add SPM support for SVM Alex Sierra
2022-02-01 15:48 ` [PATCH v6 05/10] drm/amdkfd: coherent type as sys mem on migration to ram Alex Sierra
2022-02-01 15:48 ` [PATCH v6 06/10] lib: test_hmm add ioctl to get zone device type Alex Sierra
2022-02-01 15:48 ` [PATCH v6 07/10] lib: test_hmm add module param for " Alex Sierra
2022-02-01 15:48 ` [PATCH v6 08/10] lib: add support for device coherent type in test_hmm Alex Sierra
2022-02-01 15:49 ` [PATCH v6 09/10] tools: update hmm-test to support device coherent type Alex Sierra
2022-02-01 15:49 ` [PATCH v6 10/10] tools: update test_hmm script to support SP config Alex Sierra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220215214749.GA4160@nvidia.com \
    --to=jgg@nvidia.com \
    --cc=akpm@linux-foundation.org \
    --cc=alex.sierra@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=apopple@nvidia.com \
    --cc=david@redhat.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=felix.kuehling@amd.com \
    --cc=hch@lst.de \
    --cc=jglisse@redhat.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=rcampbell@nvidia.com \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).