[LTP] [PATCH 06/13] Hugetlb: Migrating libhugetlbfs mremap-fixed-normal-near-huge
Li Wang
liwang@redhat.com
Tue Jan 3 04:06:01 CET 2023
On Sat, Dec 31, 2022 at 1:08 PM Tarun Sahu <tsahu@linux.ibm.com> wrote:
> Hi,
>
> Li Wang <liwang@redhat.com> writes:
>
> > 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);
> >
> This can be done this way, but What concerned me is mremap function
> itself. it is defined in sys/mmap under _GNU_SOURCE. I am not sure
> whether it will be ok to use _GNU_SOURCE specific function in
> lib/hugetlb.c/h file.
>
Good catch.
>
> please confirm if it is ok to define _GNU_SOURCE in hugetlb.c/h.
>
Well, I guess we should avoid doing that because it will bring
more uncertain factors to other tests that include this header file.
You could make an informed trade-off about review comments
according to actual conditions.
--
Regards,
Li Wang
More information about the ltp
mailing list