[LTP] [PATCH 06/13] Hugetlb: Migrating libhugetlbfs mremap-fixed-normal-near-huge

Li Wang liwang@redhat.com
Fri Dec 30 04:49:53 CET 2022


On Fri, Dec 30, 2022 at 3:06 AM Tarun Sahu <tsahu@linux.ibm.com> wrote:

> Hi,
>
>
> Tarun Sahu <tsahu@linux.ibm.com> writes:
>
> > Hi Li,
> > Thanks for reviewing the patch.
> > I will update it in next revision.
> >
> > --skip
> >>> +static int do_readback(void *p, size_t size, const char *stage)
> >>> +{
> >>> +       unsigned int *q = p;
> >>> +       size_t i;
> >>> +
> >>> +       tst_res(TINFO, "%s(%p, 0x%lx, \"%s\")", __func__, p,
> >>> +              (unsigned long)size, stage);
> >>> +
> >>> +       for (i = 0; i < (size / sizeof(*q)); i++)
> >>> +               q[i] = RANDOM_CONSTANT ^ i;
> >>> +
> >>> +       for (i = 0; i < (size / sizeof(*q)); i++) {
> >>> +               if (q[i] != (RANDOM_CONSTANT ^ i)) {
> >>> +                       tst_res(TFAIL, "Stage \"%s\": Mismatch at
> offset
> >>> 0x%lx: 0x%x "
> >>> +                                       "instead of 0x%lx", stage, i,
> >>> q[i], RANDOM_CONSTANT ^ i);
> >>> +                       return -1;
> >>> +               }
> >>> +       }
> >>> +       return 0;
> >>> +}
> >>> +
> >>> +static int do_remap(void *target)
> >>> +{
> >>> +       void *a, *b;
> >>> +       int ret;
> >>> +
> >>> +       a = SAFE_MMAP(NULL, page_size, PROT_READ|PROT_WRITE,
> >>> +                 MAP_SHARED|MAP_ANONYMOUS, -1, 0);
> >>> +
> >>> +       ret = do_readback(a, page_size, "base normal");
> >>> +       if (ret)
> >>> +               goto cleanup;
> >>> +       b = mremap(a, page_size, page_size, MREMAP_MAYMOVE |
> MREMAP_FIXED,
> >>> +                  target);
> >>> +
> >>> +       if (b != MAP_FAILED) {
> >>> +               do_readback(b, page_size, "remapped");
> >>> +               a = b;
> >>> +       } else
> >>> +               tst_res(TINFO|TERRNO, "mremap(MAYMOVE|FIXED)
> disallowed");
> >>> +
> >>> +cleanup:
> >>> +       SAFE_MUNMAP(a, page_size);
> >>> +       return ret;
> >>> +}
> >>>
> >>
> >> Those two functions do_readback() and do_remap() are
> >> copy&past from hugemmap2[4|5].c, what about extracting
> >> them into a common header file(tst_hugetlb.h or mem.h) for
> >> easy reusing?
> >>
> > ok, I think, hugetlb.h/.c will be better place to keep them.
> >
> These two functions are very specific to tests (specially the do_remap).
> Also, they use values that are defined only inside the test.
> Though do_readback is more general which can be put in hugetlb.h/c.
>
> WDYT?
>

Ah yes, I didn't realize the difference.
Or can we pass the specific arguments based on the variable part?
e.g.

    static int do_remap(int fd, size_t page_size; int prot, void *target);


-- 
Regards,
Li Wang


More information about the ltp mailing list