Hi Andrew, Zishun Yi,
> Subject: Re: [PATCH v1] selftests: udmabuf: fix hugepage size calculation
>
> On Sun, 18 Jan 2026 21:51:26 +0800 zishun yi <[email protected]>
> wrote:
>
> > udmabuf's test 6 and 7 is intended to verify the behavior of 2MB huge
> pages migration,
> > but the helper function still calculates the size using standard (4KB)
> pages.
This behavior is intentional given that a udmabuf is often created for memfd
ranges that do not coincide with huge page (size) boundaries. In other words,
udmabuf is not always populated with full huge pages. Instead, the ranges
mostly align with regular 4K sized page boundaries (which means subpages of
huge page), which is exactly what the tests verify.
> >
>
> lgtm. Vivek, can you please check it? Feel free to merge into another
> tree and I'll drop the mm.git ccopy.
I think you can go ahead and drop it as this patch is not fixing a bug but is
modifying the tests' behavior to create the udmabuf with huge page sized
chunks which, although not wrong, but is not the intended objective for the
given tests.
Thanks,
Vivek
>
> > --- a/tools/testing/selftests/drivers/dma-buf/udmabuf.c
> > +++ b/tools/testing/selftests/drivers/dma-buf/udmabuf.c
> > @@ -69,7 +69,7 @@ static int create_udmabuf_list(int devfd, int
> memfd, off64_t memfd_size)
> > for (i = 0; i < NUM_ENTRIES; i++) {
> > list->list[i].memfd = memfd;
> > list->list[i].offset = i * (memfd_size / NUM_ENTRIES);
> > - list->list[i].size = getpagesize() * NUM_PAGES;
> > + list->list[i].size = page_size * NUM_PAGES;
> > }
> >
> > list->count = NUM_ENTRIES;
> > @@ -115,8 +115,8 @@ static int compare_chunks(void *addr1, void
> *addr2, off64_t memfd_size)
> > while (i < NUM_ENTRIES) {
> > off = i * (memfd_size / NUM_ENTRIES);
> > for (j = 0; j < NUM_PAGES; j++, k++) {
> > - char1 = *((char *)addr1 + off + (j * getpagesize()));
> > - char2 = *((char *)addr2 + (k * getpagesize()));
> > + char1 = *((char *)addr1 + off + (j * page_size));
> > + char2 = *((char *)addr2 + (k * page_size));
> > if (char1 != char2) {
> > ret = -1;
> > goto err;
> > @@ -126,7 +126,7 @@ static int compare_chunks(void *addr1, void
> *addr2, off64_t memfd_size)
> > }
> > err:
> > munmap(addr1, memfd_size);
> > - munmap(addr2, NUM_ENTRIES * NUM_PAGES * getpagesize());
> > + munmap(addr2, NUM_ENTRIES * NUM_PAGES * page_size);
> > return ret;
> > }
> >
> > @@ -240,7 +240,7 @@ int main(int argc, char *argv[])
> > addr1 = mmap_fd(memfd, size);
> > write_to_memfd(addr1, size, 'a');
> > buf = create_udmabuf_list(devfd, memfd, size);
> > - addr2 = mmap_fd(buf, NUM_PAGES * NUM_ENTRIES *
> getpagesize());
> > + addr2 = mmap_fd(buf, NUM_PAGES * NUM_ENTRIES * page_size);
> > write_to_memfd(addr1, size, 'b');
> > ret = compare_chunks(addr1, addr2, size);
> > if (ret < 0)
> > @@ -256,7 +256,7 @@ int main(int argc, char *argv[])
> > size = MEMFD_SIZE * page_size;
> > memfd = create_memfd_with_seals(size, true);
> > buf = create_udmabuf_list(devfd, memfd, size);
> > - addr2 = mmap_fd(buf, NUM_PAGES * NUM_ENTRIES *
> getpagesize());
> > + addr2 = mmap_fd(buf, NUM_PAGES * NUM_ENTRIES * page_size);
> > addr1 = mmap_fd(memfd, size);
> > write_to_memfd(addr1, size, 'a');
> > write_to_memfd(addr1, size, 'b');
> > --
> > 2.52.0