Message ID | ab1b6be85254e111935104cf4a2293ab2fa4a8d6.1547251023.git.blake.caldwell@colorado.edu (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | RFC: userfaultfd remap | expand |
Hi, On Sat, Jan 12, 2019 at 12:36:29AM +0000, Blake Caldwell wrote: > Moving a page out of a userfaultfd registered region and into a userland > anonymous vma is needed by the use case of uncooperatively limiting the > resident size of the userfaultfd region. Reverse the direction of the > original userfaultfd_remap() to the out direction. Now after memory has > been removed, subsequent accesses will generate uffdio page fault events. It took me a while but better late then never :) Why did you keep this as a separate patch? If the primary use case for UFFDIO_REMAP to move pages out of userfaultfd region, why not make it so from the beginning? > Signed-off-by: Blake Caldwell <blake.caldwell@colorado.edu> > --- > Documentation/admin-guide/mm/userfaultfd.rst | 10 ++++++++++ > fs/userfaultfd.c | 6 +++--- > 2 files changed, 13 insertions(+), 3 deletions(-) > > diff --git a/Documentation/admin-guide/mm/userfaultfd.rst b/Documentation/admin-guide/mm/userfaultfd.rst > index 5048cf6..714af49 100644 > --- a/Documentation/admin-guide/mm/userfaultfd.rst > +++ b/Documentation/admin-guide/mm/userfaultfd.rst > @@ -108,6 +108,16 @@ UFFDIO_COPY. They're atomic as in guaranteeing that nothing can see an > half copied page since it'll keep userfaulting until the copy has > finished. > > +To move pages out of a userfault registered region and into a user vma > +the UFFDIO_REMAP ioctl can be used. This is only possible for the > +"OUT" direction. For the "IN" direction, UFFDIO_COPY is preferred > +since UFFDIO_REMAP requires a TLB flush on the source range at a > +greater penalty than copying the page. With > +UFFDIO_REGISTER_MODE_MISSING set, subsequent accesses to the same > +region will generate a page fault event. This allows non-cooperative > +removal of memory in a userfaultfd registered vma, effectively > +limiting the amount of resident memory in such a region. > + > QEMU/KVM > ======== > > diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c > index cf68cdb..8099da2 100644 > --- a/fs/userfaultfd.c > +++ b/fs/userfaultfd.c > @@ -1808,10 +1808,10 @@ static int userfaultfd_remap(struct userfaultfd_ctx *ctx, > sizeof(uffdio_remap)-sizeof(__s64))) > goto out; > > - ret = validate_range(ctx->mm, uffdio_remap.dst, uffdio_remap.len); > + ret = validate_range(current->mm, uffdio_remap.dst, uffdio_remap.len); > if (ret) > goto out; > - ret = validate_range(current->mm, uffdio_remap.src, uffdio_remap.len); > + ret = validate_range(ctx->mm, uffdio_remap.src, uffdio_remap.len); > if (ret) > goto out; > ret = -EINVAL; > @@ -1819,7 +1819,7 @@ static int userfaultfd_remap(struct userfaultfd_ctx *ctx, > UFFDIO_REMAP_MODE_DONTWAKE)) > goto out; > > - ret = remap_pages(ctx->mm, current->mm, > + ret = remap_pages(current->mm, ctx->mm, > uffdio_remap.dst, uffdio_remap.src, > uffdio_remap.len, uffdio_remap.mode); > if (unlikely(put_user(ret, &user_uffdio_remap->remap))) > -- > 1.8.3.1 >
> On Jan 20, 2019, at 4:07 PM, Mike Rapoport <rppt@linux.ibm.com> wrote: > > Hi, > > On Sat, Jan 12, 2019 at 12:36:29AM +0000, Blake Caldwell wrote: >> Moving a page out of a userfaultfd registered region and into a userland >> anonymous vma is needed by the use case of uncooperatively limiting the >> resident size of the userfaultfd region. Reverse the direction of the >> original userfaultfd_remap() to the out direction. Now after memory has >> been removed, subsequent accesses will generate uffdio page fault events. > > It took me a while but better late then never :) > > Why did you keep this as a separate patch? If the primary use case for > UFFDIO_REMAP to move pages out of userfaultfd region, why not make it so > from the beginning? Only to show what has changed since this was last proposed, but yes, that change to fs/userfaultfd.c should be squashed with patch 3. The purpose of patch 4 will only be documenting UFFDIO_REMAP. I will make those changes for the next revision. Thanks for looking this over. > >> Signed-off-by: Blake Caldwell <blake.caldwell@colorado.edu> >> --- >> Documentation/admin-guide/mm/userfaultfd.rst | 10 ++++++++++ >> fs/userfaultfd.c | 6 +++--- >> 2 files changed, 13 insertions(+), 3 deletions(-) >> >> diff --git a/Documentation/admin-guide/mm/userfaultfd.rst b/Documentation/admin-guide/mm/userfaultfd.rst >> index 5048cf6..714af49 100644 >> --- a/Documentation/admin-guide/mm/userfaultfd.rst >> +++ b/Documentation/admin-guide/mm/userfaultfd.rst >> @@ -108,6 +108,16 @@ UFFDIO_COPY. They're atomic as in guaranteeing that nothing can see an >> half copied page since it'll keep userfaulting until the copy has >> finished. >> >> +To move pages out of a userfault registered region and into a user vma >> +the UFFDIO_REMAP ioctl can be used. This is only possible for the >> +"OUT" direction. For the "IN" direction, UFFDIO_COPY is preferred >> +since UFFDIO_REMAP requires a TLB flush on the source range at a >> +greater penalty than copying the page. With >> +UFFDIO_REGISTER_MODE_MISSING set, subsequent accesses to the same >> +region will generate a page fault event. This allows non-cooperative >> +removal of memory in a userfaultfd registered vma, effectively >> +limiting the amount of resident memory in such a region. >> + >> QEMU/KVM >> ======== >> >> diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c >> index cf68cdb..8099da2 100644 >> --- a/fs/userfaultfd.c >> +++ b/fs/userfaultfd.c >> @@ -1808,10 +1808,10 @@ static int userfaultfd_remap(struct userfaultfd_ctx *ctx, >> sizeof(uffdio_remap)-sizeof(__s64))) >> goto out; >> >> - ret = validate_range(ctx->mm, uffdio_remap.dst, uffdio_remap.len); >> + ret = validate_range(current->mm, uffdio_remap.dst, uffdio_remap.len); >> if (ret) >> goto out; >> - ret = validate_range(current->mm, uffdio_remap.src, uffdio_remap.len); >> + ret = validate_range(ctx->mm, uffdio_remap.src, uffdio_remap.len); >> if (ret) >> goto out; >> ret = -EINVAL; >> @@ -1819,7 +1819,7 @@ static int userfaultfd_remap(struct userfaultfd_ctx *ctx, >> UFFDIO_REMAP_MODE_DONTWAKE)) >> goto out; >> >> - ret = remap_pages(ctx->mm, current->mm, >> + ret = remap_pages(current->mm, ctx->mm, >> uffdio_remap.dst, uffdio_remap.src, >> uffdio_remap.len, uffdio_remap.mode); >> if (unlikely(put_user(ret, &user_uffdio_remap->remap))) >> -- >> 1.8.3.1 >> > > -- > Sincerely yours, > Mike. <html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 20, 2019, at 4:07 PM, Mike Rapoport <<a href="mailto:rppt@linux.ibm.com" class="">rppt@linux.ibm.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Hi,</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">On Sat, Jan 12, 2019 at 12:36:29AM +0000, Blake Caldwell wrote:</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">Moving a page out of a userfaultfd registered region and into a userland<br class="">anonymous vma is needed by the use case of uncooperatively limiting the<br class="">resident size of the userfaultfd region. Reverse the direction of the<br class="">original userfaultfd_remap() to the out direction. Now after memory has<br class="">been removed, subsequent accesses will generate uffdio page fault events.<br class=""></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">It took me a while but better late then never :)</span></div></blockquote><blockquote type="cite" class=""><div class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Why did you keep this as a separate patch? If the primary use case for</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">UFFDIO_REMAP to move pages out of userfaultfd region, why not make it so</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">from the beginning?</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""></div></blockquote><div><br class=""></div>Only to show what has changed since this was last proposed, but yes, that</div><div>change to fs/userfaultfd.c should be squashed with patch 3. The purpose of</div><div>patch 4 will only be documenting UFFDIO_REMAP.</div><div><br class=""></div><div>I will make those changes for the next revision. Thanks for looking this over.</div><div><br class=""><blockquote type="cite" class=""><div class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">Signed-off-by: Blake Caldwell <<a href="mailto:blake.caldwell@colorado.edu" class="">blake.caldwell@colorado.edu</a>><br class="">---<br class="">Documentation/admin-guide/mm/userfaultfd.rst | 10 ++++++++++<br class="">fs/userfaultfd.c | 6 +++---<br class="">2 files changed, 13 insertions(+), 3 deletions(-)<br class=""><br class="">diff --git a/Documentation/admin-guide/mm/userfaultfd.rst b/Documentation/admin-guide/mm/userfaultfd.rst<br class="">index 5048cf6..714af49 100644<br class="">--- a/Documentation/admin-guide/mm/userfaultfd.rst<br class="">+++ b/Documentation/admin-guide/mm/userfaultfd.rst<br class="">@@ -108,6 +108,16 @@ UFFDIO_COPY. They're atomic as in guaranteeing that nothing can see an<br class="">half copied page since it'll keep userfaulting until the copy has<br class="">finished.<br class=""><br class="">+To move pages out of a userfault registered region and into a user vma<br class="">+the UFFDIO_REMAP ioctl can be used. This is only possible for the<br class="">+"OUT" direction. For the "IN" direction, UFFDIO_COPY is preferred<br class="">+since UFFDIO_REMAP requires a TLB flush on the source range at a<br class="">+greater penalty than copying the page. With<br class="">+UFFDIO_REGISTER_MODE_MISSING set, subsequent accesses to the same<br class="">+region will generate a page fault event. This allows non-cooperative<br class="">+removal of memory in a userfaultfd registered vma, effectively<br class="">+limiting the amount of resident memory in such a region.<br class="">+<br class="">QEMU/KVM<br class="">========<br class=""><br class="">diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c<br class="">index cf68cdb..8099da2 100644<br class="">--- a/fs/userfaultfd.c<br class="">+++ b/fs/userfaultfd.c<br class="">@@ -1808,10 +1808,10 @@ static int userfaultfd_remap(struct userfaultfd_ctx *ctx,<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span> sizeof(uffdio_remap)-sizeof(__s64)))<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>goto out;<br class=""><br class="">-<span class="Apple-tab-span" style="white-space: pre;"> </span>ret = validate_range(ctx->mm, uffdio_remap.dst, uffdio_remap.len);<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>ret = validate_range(current->mm, uffdio_remap.dst, uffdio_remap.len);<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>if (ret)<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>goto out;<br class="">-<span class="Apple-tab-span" style="white-space: pre;"> </span>ret = validate_range(current->mm, uffdio_remap.src, uffdio_remap.len);<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>ret = validate_range(ctx->mm, uffdio_remap.src, uffdio_remap.len);<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>if (ret)<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>goto out;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>ret = -EINVAL;<br class="">@@ -1819,7 +1819,7 @@ static int userfaultfd_remap(struct userfaultfd_ctx *ctx,<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span> UFFDIO_REMAP_MODE_DONTWAKE))<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>goto out;<br class=""><br class="">-<span class="Apple-tab-span" style="white-space: pre;"> </span>ret = remap_pages(ctx->mm, current->mm,<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>ret = remap_pages(current->mm, ctx->mm,<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span> uffdio_remap.dst, uffdio_remap.src,<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span> uffdio_remap.len, uffdio_remap.mode);<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>if (unlikely(put_user(ret, &user_uffdio_remap->remap)))<br class="">--<span class="Apple-converted-space"> </span><br class="">1.8.3.1<br class=""><br class=""></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">--<span class="Apple-converted-space"> </span></span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Sincerely yours,</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Mike.</span></div></blockquote></div><br class=""></body></html>
diff --git a/Documentation/admin-guide/mm/userfaultfd.rst b/Documentation/admin-guide/mm/userfaultfd.rst index 5048cf6..714af49 100644 --- a/Documentation/admin-guide/mm/userfaultfd.rst +++ b/Documentation/admin-guide/mm/userfaultfd.rst @@ -108,6 +108,16 @@ UFFDIO_COPY. They're atomic as in guaranteeing that nothing can see an half copied page since it'll keep userfaulting until the copy has finished. +To move pages out of a userfault registered region and into a user vma +the UFFDIO_REMAP ioctl can be used. This is only possible for the +"OUT" direction. For the "IN" direction, UFFDIO_COPY is preferred +since UFFDIO_REMAP requires a TLB flush on the source range at a +greater penalty than copying the page. With +UFFDIO_REGISTER_MODE_MISSING set, subsequent accesses to the same +region will generate a page fault event. This allows non-cooperative +removal of memory in a userfaultfd registered vma, effectively +limiting the amount of resident memory in such a region. + QEMU/KVM ======== diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index cf68cdb..8099da2 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c @@ -1808,10 +1808,10 @@ static int userfaultfd_remap(struct userfaultfd_ctx *ctx, sizeof(uffdio_remap)-sizeof(__s64))) goto out; - ret = validate_range(ctx->mm, uffdio_remap.dst, uffdio_remap.len); + ret = validate_range(current->mm, uffdio_remap.dst, uffdio_remap.len); if (ret) goto out; - ret = validate_range(current->mm, uffdio_remap.src, uffdio_remap.len); + ret = validate_range(ctx->mm, uffdio_remap.src, uffdio_remap.len); if (ret) goto out; ret = -EINVAL; @@ -1819,7 +1819,7 @@ static int userfaultfd_remap(struct userfaultfd_ctx *ctx, UFFDIO_REMAP_MODE_DONTWAKE)) goto out; - ret = remap_pages(ctx->mm, current->mm, + ret = remap_pages(current->mm, ctx->mm, uffdio_remap.dst, uffdio_remap.src, uffdio_remap.len, uffdio_remap.mode); if (unlikely(put_user(ret, &user_uffdio_remap->remap)))
Moving a page out of a userfaultfd registered region and into a userland anonymous vma is needed by the use case of uncooperatively limiting the resident size of the userfaultfd region. Reverse the direction of the original userfaultfd_remap() to the out direction. Now after memory has been removed, subsequent accesses will generate uffdio page fault events. Signed-off-by: Blake Caldwell <blake.caldwell@colorado.edu> --- Documentation/admin-guide/mm/userfaultfd.rst | 10 ++++++++++ fs/userfaultfd.c | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-)