• Alistair Popple's avatar
    mm: free device private pages have zero refcount · ef233450
    Alistair Popple authored
    Since 27674ef6 ("mm: remove the extra ZONE_DEVICE struct page
    refcount") device private pages have no longer had an extra reference
    count when the page is in use.  However before handing them back to the
    owning device driver we add an extra reference count such that free pages
    have a reference count of one.
    
    This makes it difficult to tell if a page is free or not because both free
    and in use pages will have a non-zero refcount.  Instead we should return
    pages to the drivers page allocator with a zero reference count.  Kernel
    code can then safely use kernel functions such as get_page_unless_zero().
    
    Link: https://lkml.kernel.org/r/cf70cf6f8c0bdb8aaebdbfb0d790aea4c683c3c6.1664366292.git-series.apopple@nvidia.comSigned-off-by: default avatarAlistair Popple <apopple@nvidia.com>
    Acked-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
    Cc: Jason Gunthorpe <jgg@nvidia.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Cc: Christian König <christian.koenig@amd.com>
    Cc: Ben Skeggs <bskeggs@redhat.com>
    Cc: Lyude Paul <lyude@redhat.com>
    Cc: Ralph Campbell <rcampbell@nvidia.com>
    Cc: Alex Sierra <alex.sierra@amd.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: "Huang, Ying" <ying.huang@intel.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Yang Shi <shy828301@gmail.com>
    Cc: Zi Yan <ziy@nvidia.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    ef233450
page_alloc.c 270 KB