mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
iov_iter: Define flags to qualify page extraction.
Define flags to qualify page extraction to pass into iov_iter_*_pages*() rather than passing in FOLL_* flags. For now only a flag to allow peer-to-peer DMA is supported. Signed-off-by: David Howells <dhowells@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: John Hubbard <jhubbard@nvidia.com> Reviewed-by: Jens Axboe <axboe@kernel.dk> cc: Al Viro <viro@zeniv.linux.org.uk> cc: Logan Gunthorpe <logang@deltatee.com> cc: linux-fsdevel@vger.kernel.org cc: linux-block@vger.kernel.org Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
committed by
Steve French
parent
33b3b04154
commit
f62e52d127
@@ -1426,9 +1426,9 @@ static struct page *first_bvec_segment(const struct iov_iter *i,
|
||||
static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
|
||||
struct page ***pages, size_t maxsize,
|
||||
unsigned int maxpages, size_t *start,
|
||||
unsigned int gup_flags)
|
||||
iov_iter_extraction_t extraction_flags)
|
||||
{
|
||||
unsigned int n;
|
||||
unsigned int n, gup_flags = 0;
|
||||
|
||||
if (maxsize > i->count)
|
||||
maxsize = i->count;
|
||||
@@ -1436,6 +1436,8 @@ static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
|
||||
return 0;
|
||||
if (maxsize > MAX_RW_COUNT)
|
||||
maxsize = MAX_RW_COUNT;
|
||||
if (extraction_flags & ITER_ALLOW_P2PDMA)
|
||||
gup_flags |= FOLL_PCI_P2PDMA;
|
||||
|
||||
if (likely(user_backed_iter(i))) {
|
||||
unsigned long addr;
|
||||
@@ -1489,14 +1491,14 @@ static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
|
||||
|
||||
ssize_t iov_iter_get_pages(struct iov_iter *i,
|
||||
struct page **pages, size_t maxsize, unsigned maxpages,
|
||||
size_t *start, unsigned gup_flags)
|
||||
size_t *start, iov_iter_extraction_t extraction_flags)
|
||||
{
|
||||
if (!maxpages)
|
||||
return 0;
|
||||
BUG_ON(!pages);
|
||||
|
||||
return __iov_iter_get_pages_alloc(i, &pages, maxsize, maxpages,
|
||||
start, gup_flags);
|
||||
start, extraction_flags);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(iov_iter_get_pages);
|
||||
|
||||
@@ -1509,14 +1511,14 @@ EXPORT_SYMBOL(iov_iter_get_pages2);
|
||||
|
||||
ssize_t iov_iter_get_pages_alloc(struct iov_iter *i,
|
||||
struct page ***pages, size_t maxsize,
|
||||
size_t *start, unsigned gup_flags)
|
||||
size_t *start, iov_iter_extraction_t extraction_flags)
|
||||
{
|
||||
ssize_t len;
|
||||
|
||||
*pages = NULL;
|
||||
|
||||
len = __iov_iter_get_pages_alloc(i, pages, maxsize, ~0U, start,
|
||||
gup_flags);
|
||||
extraction_flags);
|
||||
if (len <= 0) {
|
||||
kvfree(*pages);
|
||||
*pages = NULL;
|
||||
|
Reference in New Issue
Block a user