mm: re-allow pinning of zero pfns (again)
The below referenced commit makes the same error as1c56343258
("mm: fix is_pinnable_page against a cma page"), re-interpreting the logic to exclude pinning of the zero page, which breaks device assignment with vfio. To avoid further subtle mistakes, split the logic into discrete tests. [akpm@linux-foundation.org: simplify comment, per John] Link: https://lkml.kernel.org/r/166015037385.760108.16881097713975517242.stgit@omen Link: https://lore.kernel.org/all/165490039431.944052.12458624139225785964.stgit@omen Fixes:f25cbb7a95
("mm: add zone device coherent type memory support") Signed-off-by: Alex Williamson <alex.williamson@redhat.com> Suggested-by: Matthew Wilcox <willy@infradead.org> Suggested-by: Felix Kuehling <felix.kuehling@amd.com> Tested-by: Slawomir Laba <slawomirx.laba@intel.com> Reviewed-by: John Hubbard <jhubbard@nvidia.com> Cc: Alex Sierra <alex.sierra@amd.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Alistair Popple <apopple@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
f09bddbd86
commit
fcab34b433
|
@ -1544,9 +1544,16 @@ static inline bool is_longterm_pinnable_page(struct page *page)
|
|||
if (mt == MIGRATE_CMA || mt == MIGRATE_ISOLATE)
|
||||
return false;
|
||||
#endif
|
||||
return !(is_device_coherent_page(page) ||
|
||||
is_zone_movable_page(page) ||
|
||||
is_zero_pfn(page_to_pfn(page)));
|
||||
/* The zero page may always be pinned */
|
||||
if (is_zero_pfn(page_to_pfn(page)))
|
||||
return true;
|
||||
|
||||
/* Coherent device memory must always allow eviction. */
|
||||
if (is_device_coherent_page(page))
|
||||
return false;
|
||||
|
||||
/* Otherwise, non-movable zone pages can be pinned. */
|
||||
return !is_zone_movable_page(page);
|
||||
}
|
||||
#else
|
||||
static inline bool is_longterm_pinnable_page(struct page *page)
|
||||
|
|
Loading…
Reference in New Issue