On 2/3/20 5:58 AM, Kirill A. Shutemov wrote: ... >> @@ -19,6 +21,48 @@ struct gup_benchmark { >> __u64 expansion[10]; /* For future use */ >> }; >> >> +static void put_back_pages(unsigned int cmd, struct page **pages, >> + unsigned long nr_pages) >> +{ >> + int i; >> + >> + switch (cmd) { >> + case GUP_FAST_BENCHMARK: >> + case GUP_LONGTERM_BENCHMARK: >> + case GUP_BENCHMARK: >> + for (i = 0; i < nr_pages; i++) > > 'i' is 'int' and 'nr_pages' is 'unsigned long'. > There's space for trouble :P > Yes, I've changed it to "unsigned int", thanks. >> + put_page(pages[i]); >> + break; >> + >> + case PIN_FAST_BENCHMARK: >> + case PIN_BENCHMARK: >> + unpin_user_pages(pages, nr_pages); >> + break; >> + } >> +} >> + >> +static void verify_dma_pinned(unsigned int cmd, struct page **pages, >> + unsigned long nr_pages) >> +{ >> + int i; >> + struct page *page; >> + >> + switch (cmd) { >> + case PIN_FAST_BENCHMARK: >> + case PIN_BENCHMARK: >> + for (i = 0; i < nr_pages; i++) { > > Ditto. > Fixed here also. >> + page = pages[i]; >> + if (WARN(!page_maybe_dma_pinned(page), >> + "pages[%d] is NOT dma-pinned\n", i)) { ...and changed to "pages[%u]", to match. thanks, -- John Hubbard NVIDIA >> + >> + dump_page(page, "gup_benchmark failure"); >> + break; >> + } >> + } >> + break; >> + } >> +} >> + >> static int __gup_benchmark_ioctl(unsigned int cmd, >> struct gup_benchmark *gup) >> { >