mm/gup_benchmark: use proper FOLL_WRITE flags instead of hard-coding "1"
Fix the gup benchmark flags to use the symbolic FOLL_WRITE, instead of a hard-coded "1" value. Also, clean up the filtering of gup flags a little, by just doing it once before issuing any of the get_user_pages*() calls. This makes it harder to overlook, instead of having little "gup_flags & 1" phrases in the function calls. Link: http://lkml.kernel.org/r/20200107224558.2362728-22-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Cc: Alex Williamson <alex.williamson@redhat.com> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> Cc: Björn Töpel <bjorn.topel@intel.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl> Cc: Jan Kara <jack@suse.cz> Cc: Jason Gunthorpe <jgg@mellanox.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jens Axboe <axboe@kernel.dk> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Kirill A. Shutemov <kirill@shutemov.name> Cc: Leon Romanovsky <leonro@mellanox.com> Cc: Mauro Carvalho Chehab <mchehab@kernel.org> Cc: Mike Rapoport <rppt@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
aa4b87fe9e
Коммит
bdffe23eee
|
@ -49,18 +49,21 @@ static int __gup_benchmark_ioctl(unsigned int cmd,
|
||||||
nr = (next - addr) / PAGE_SIZE;
|
nr = (next - addr) / PAGE_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Filter out most gup flags: only allow a tiny subset here: */
|
||||||
|
gup->flags &= FOLL_WRITE;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case GUP_FAST_BENCHMARK:
|
case GUP_FAST_BENCHMARK:
|
||||||
nr = get_user_pages_fast(addr, nr, gup->flags & 1,
|
nr = get_user_pages_fast(addr, nr, gup->flags,
|
||||||
pages + i);
|
pages + i);
|
||||||
break;
|
break;
|
||||||
case GUP_LONGTERM_BENCHMARK:
|
case GUP_LONGTERM_BENCHMARK:
|
||||||
nr = get_user_pages(addr, nr,
|
nr = get_user_pages(addr, nr,
|
||||||
(gup->flags & 1) | FOLL_LONGTERM,
|
gup->flags | FOLL_LONGTERM,
|
||||||
pages + i, NULL);
|
pages + i, NULL);
|
||||||
break;
|
break;
|
||||||
case GUP_BENCHMARK:
|
case GUP_BENCHMARK:
|
||||||
nr = get_user_pages(addr, nr, gup->flags & 1, pages + i,
|
nr = get_user_pages(addr, nr, gup->flags, pages + i,
|
||||||
NULL);
|
NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
#define GUP_LONGTERM_BENCHMARK _IOWR('g', 2, struct gup_benchmark)
|
#define GUP_LONGTERM_BENCHMARK _IOWR('g', 2, struct gup_benchmark)
|
||||||
#define GUP_BENCHMARK _IOWR('g', 3, struct gup_benchmark)
|
#define GUP_BENCHMARK _IOWR('g', 3, struct gup_benchmark)
|
||||||
|
|
||||||
|
/* Just the flags we need, copied from mm.h: */
|
||||||
|
#define FOLL_WRITE 0x01 /* check pte is writable */
|
||||||
|
|
||||||
struct gup_benchmark {
|
struct gup_benchmark {
|
||||||
__u64 get_delta_usec;
|
__u64 get_delta_usec;
|
||||||
__u64 put_delta_usec;
|
__u64 put_delta_usec;
|
||||||
|
@ -85,7 +88,8 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
gup.nr_pages_per_call = nr_pages;
|
gup.nr_pages_per_call = nr_pages;
|
||||||
gup.flags = write;
|
if (write)
|
||||||
|
gup.flags |= FOLL_WRITE;
|
||||||
|
|
||||||
fd = open("/sys/kernel/debug/gup_benchmark", O_RDWR);
|
fd = open("/sys/kernel/debug/gup_benchmark", O_RDWR);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче