mm/gup: move private gup FOLL_ flags to internal.h
Move the flags that should not/are not used outside gup.c and related into mm/internal.h to discourage driver abuse. To make this more maintainable going forward compact the two FOLL ranges with new bit numbers from 0 to 11 and 16 to 21, using shifts so it is explicit. Switch to an enum so the whole thing is easier to read. Link: https://lkml.kernel.org/r/13-v2-987e91b59705+36b-gup_tidy_jgg@nvidia.com Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Reviewed-by: John Hubbard <jhubbard@nvidia.com> Acked-by: David Hildenbrand <david@redhat.com> Cc: David Howells <dhowells@redhat.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Claudio Imbrenda <imbrenda@linux.ibm.com> Cc: Alistair Popple <apopple@nvidia.com> Cc: Mike Rapoport (IBM) <rppt@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Родитель
63b6051286
Коммит
2c2241081f
|
@ -1040,9 +1040,6 @@ typedef unsigned int __bitwise zap_flags_t;
|
|||
* FOLL_PIN and FOLL_LONGTERM may be used in various combinations with each
|
||||
* other. Here is what they mean, and how to use them:
|
||||
*
|
||||
* FOLL_LONGTERM indicates that the page will be held for an indefinite time
|
||||
* period _often_ under userspace control. This is in contrast to
|
||||
* iov_iter_get_pages(), whose usages are transient.
|
||||
*
|
||||
* FIXME: For pages which are part of a filesystem, mappings are subject to the
|
||||
* lifetime enforced by the filesystem and we need guarantees that longterm
|
||||
|
@ -1086,24 +1083,40 @@ typedef unsigned int __bitwise zap_flags_t;
|
|||
* Please see Documentation/core-api/pin_user_pages.rst for more information.
|
||||
*/
|
||||
|
||||
#define FOLL_WRITE 0x01 /* check pte is writable */
|
||||
#define FOLL_TOUCH 0x02 /* mark page accessed */
|
||||
#define FOLL_GET 0x04 /* do get_page on page */
|
||||
#define FOLL_DUMP 0x08 /* give error on hole if it would be zero */
|
||||
#define FOLL_FORCE 0x10 /* get_user_pages read/write w/o permission */
|
||||
#define FOLL_NOWAIT 0x20 /* if a disk transfer is needed, start the IO
|
||||
* and return without waiting upon it */
|
||||
#define FOLL_NOFAULT 0x80 /* do not fault in pages */
|
||||
#define FOLL_HWPOISON 0x100 /* check page is hwpoisoned */
|
||||
#define FOLL_TRIED 0x800 /* a retry, previous pass started an IO */
|
||||
#define FOLL_REMOTE 0x2000 /* we are working on non-current tsk/mm */
|
||||
#define FOLL_ANON 0x8000 /* don't do file mappings */
|
||||
#define FOLL_LONGTERM 0x10000 /* mapping lifetime is indefinite: see below */
|
||||
#define FOLL_SPLIT_PMD 0x20000 /* split huge pmd before returning */
|
||||
#define FOLL_PIN 0x40000 /* pages must be released via unpin_user_page */
|
||||
#define FOLL_FAST_ONLY 0x80000 /* gup_fast: prevent fall-back to slow gup */
|
||||
#define FOLL_PCI_P2PDMA 0x100000 /* allow returning PCI P2PDMA pages */
|
||||
#define FOLL_INTERRUPTIBLE 0x200000 /* allow interrupts from generic signals */
|
||||
#define FOLL_UNLOCKABLE 0x400000 /* allow unlocking the mmap lock (internal only) */
|
||||
enum {
|
||||
/* check pte is writable */
|
||||
FOLL_WRITE = 1 << 0,
|
||||
/* do get_page on page */
|
||||
FOLL_GET = 1 << 1,
|
||||
/* give error on hole if it would be zero */
|
||||
FOLL_DUMP = 1 << 2,
|
||||
/* get_user_pages read/write w/o permission */
|
||||
FOLL_FORCE = 1 << 3,
|
||||
/*
|
||||
* if a disk transfer is needed, start the IO and return without waiting
|
||||
* upon it
|
||||
*/
|
||||
FOLL_NOWAIT = 1 << 4,
|
||||
/* do not fault in pages */
|
||||
FOLL_NOFAULT = 1 << 5,
|
||||
/* check page is hwpoisoned */
|
||||
FOLL_HWPOISON = 1 << 6,
|
||||
/* don't do file mappings */
|
||||
FOLL_ANON = 1 << 7,
|
||||
/*
|
||||
* FOLL_LONGTERM indicates that the page will be held for an indefinite
|
||||
* time period _often_ under userspace control. This is in contrast to
|
||||
* iov_iter_get_pages(), whose usages are transient.
|
||||
*/
|
||||
FOLL_LONGTERM = 1 << 8,
|
||||
/* split huge pmd before returning */
|
||||
FOLL_SPLIT_PMD = 1 << 9,
|
||||
/* allow returning PCI P2PDMA pages */
|
||||
FOLL_PCI_P2PDMA = 1 << 10,
|
||||
/* allow interrupts from generic signals */
|
||||
FOLL_INTERRUPTIBLE = 1 << 11,
|
||||
|
||||
/* See also internal only FOLL flags in mm/internal.h */
|
||||
};
|
||||
|
||||
#endif /* _LINUX_MM_TYPES_H */
|
||||
|
|
|
@ -858,6 +858,21 @@ int migrate_device_coherent_page(struct page *page);
|
|||
struct folio *try_grab_folio(struct page *page, int refs, unsigned int flags);
|
||||
int __must_check try_grab_page(struct page *page, unsigned int flags);
|
||||
|
||||
enum {
|
||||
/* mark page accessed */
|
||||
FOLL_TOUCH = 1 << 16,
|
||||
/* a retry, previous pass started an IO */
|
||||
FOLL_TRIED = 1 << 17,
|
||||
/* we are working on non-current tsk/mm */
|
||||
FOLL_REMOTE = 1 << 18,
|
||||
/* pages must be released via unpin_user_page */
|
||||
FOLL_PIN = 1 << 19,
|
||||
/* gup_fast: prevent fall-back to slow gup */
|
||||
FOLL_FAST_ONLY = 1 << 20,
|
||||
/* allow unlocking the mmap lock */
|
||||
FOLL_UNLOCKABLE = 1 << 21,
|
||||
};
|
||||
|
||||
/*
|
||||
* Indicates for which pages that are write-protected in the page table,
|
||||
* whether GUP has to trigger unsharing via FAULT_FLAG_UNSHARE such that the
|
||||
|
|
Загрузка…
Ссылка в новой задаче