All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Linux-MM <linux-mm@kvack.org>,
	Linux List Kernel Mailing <linux-kernel@vger.kernel.org>,
	David Hildenbrand <david@redhat.com>,
	Hugh Dickins <hughd@google.com>, Maya Gokhale <gokhale2@llnl.gov>,
	Jerome Glisse <jglisse@redhat.com>,
	Pavel Emelyanov <xemul@virtuozzo.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Martin Cracauer <cracauer@cons.org>,
	Denis Plotnikov <dplotnikov@virtuozzo.com>,
	Shaohua Li <shli@fb.com>, Andrea Arcangeli <aarcange@redhat.com>,
	Mike Kravetz <mike.kravetz@oracle.com>,
	Marty McFadden <mcfadden8@llnl.gov>,
	Mike Rapoport <rppt@linux.vnet.ibm.com>,
	Mel Gorman <mgorman@suse.de>,
	"Kirill A . Shutemov" <kirill@shutemov.name>,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>
Subject: Re: [PATCH v5 02/25] mm: userfault: return VM_FAULT_RETRY on signals
Date: Tue, 25 Jun 2019 13:30:47 +0800	[thread overview]
Message-ID: <20190625053047.GC10020@xz-x1> (raw)
In-Reply-To: <CAHk-=whRw_6ZTj=AT=cRoSTyoEk2-hiqJoNkqgWE-gSRVE5YwQ@mail.gmail.com>

On Mon, Jun 24, 2019 at 09:31:42PM +0800, Linus Torvalds wrote:
> On Mon, Jun 24, 2019 at 3:43 PM Peter Xu <peterx@redhat.com> wrote:
> >
> > Should we still be able to react on signal_pending() as part of fault
> > handling (because that's what this patch wants to do, at least for an
> > user-mode page fault)?  Please kindly correct me if I misunderstood...
> 
> I think that with this patch (modulo possible fix-ups) then yes, as
> long as we're returning to user mode we can do signal_pending() and
> return RETRY.
> 
> But I think we really want to add a new FAULT_FLAG_INTERRUPTIBLE bit
> for that (the same way we already have FAULT_FLAG_KILLABLE for things
> that can react to fatal signals), and only do it when that is set.
> Then the page fault handler can set that flag when it's doing a
> user-mode page fault.
> 
> Does that sound reasonable?

Yes that sounds reasonable to me, and that matches perfectly with
TASK_INTERRUPTIBLE and TASK_KILLABLE.  The only thing that I am a bit
uncertain is whether we should define FAULT_FLAG_INTERRUPTIBLE as a
new bit or make it simply a combination of:

  FAULT_FLAG_KILLABLE | FAULT_FLAG_USER

The problem is that when we do set_current_state() with either
TASK_INTERRUPTIBLE or TASK_KILLABLE we'll only choose one of them, but
never both.  Here since the fault flag is a bitmask then if we
introduce a new FAULT_FLAG_INTERRUPTIBLE bit and use it in the fault
flags then we should probably be sure that FAULT_FLAG_KILLABLE is also
set when with that (since IMHO it won't make much sense to make a page
fault "interruptable" but "un-killable"...).  Considering that
TASK_INTERRUPTIBLE should also always in user-mode page faults so this
dependency seems to exist with FAULT_FLAG_USER.  Then I'm thinking
maybe using the combination to express the meaning that "we would like
this page fault to be interruptable, even for general userspace
signals" would be nicer?

AFAIK currently only handle_userfault() have such code to handle
normal signals besides SIGKILL, and it was trying to detect this using
this rule already:

	return_to_userland =
		(vmf->flags & (FAULT_FLAG_USER|FAULT_FLAG_KILLABLE)) ==
		(FAULT_FLAG_USER|FAULT_FLAG_KILLABLE);

Then if we define that globally and officially then we can probably
replace this simply with:

	return_to_userland = vmf->flags & FAULT_FLAG_INTERRUPTIBLE;

What do you think?

Thanks,

-- 
Peter Xu

  reply	other threads:[~2019-06-25  5:31 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-20  2:19 [PATCH v5 00/25] userfaultfd: write protection support Peter Xu
2019-06-20  2:19 ` [PATCH v5 01/25] mm: gup: rename "nonblocking" to "locked" where proper Peter Xu
2019-06-20  2:19 ` [PATCH v5 02/25] mm: userfault: return VM_FAULT_RETRY on signals Peter Xu
2019-06-22 18:02   ` Linus Torvalds
2019-06-22 18:02     ` Linus Torvalds
2019-06-24  7:42     ` Peter Xu
2019-06-24 13:31       ` Linus Torvalds
2019-06-24 13:31         ` Linus Torvalds
2019-06-25  5:30         ` Peter Xu [this message]
2019-06-26  1:59           ` Linus Torvalds
2019-06-26  1:59             ` Linus Torvalds
2019-06-26  7:43             ` Peter Xu
2019-06-20  2:19 ` [PATCH v5 03/25] userfaultfd: don't retake mmap_sem to emulate NOPAGE Peter Xu
2019-06-20  2:19 ` [PATCH v5 04/25] mm: allow VM_FAULT_RETRY for multiple times Peter Xu
2019-06-20  2:19 ` [PATCH v5 05/25] mm: gup: " Peter Xu
2019-06-20  2:19 ` [PATCH v5 06/25] userfaultfd: wp: add helper for writeprotect check Peter Xu
2019-06-20  2:19 ` [PATCH v5 07/25] userfaultfd: wp: hook userfault handler to write protection fault Peter Xu
2019-06-20  2:19 ` [PATCH v5 08/25] userfaultfd: wp: add WP pagetable tracking to x86 Peter Xu
2019-06-20  2:19 ` [PATCH v5 09/25] userfaultfd: wp: userfaultfd_pte/huge_pmd_wp() helpers Peter Xu
2019-06-20  2:19 ` [PATCH v5 10/25] userfaultfd: wp: add UFFDIO_COPY_MODE_WP Peter Xu
2019-06-20  2:19 ` [PATCH v5 11/25] mm: merge parameters for change_protection() Peter Xu
2019-06-20  2:19 ` [PATCH v5 12/25] userfaultfd: wp: apply _PAGE_UFFD_WP bit Peter Xu
2019-06-20  2:19 ` [PATCH v5 13/25] userfaultfd: wp: drop _PAGE_UFFD_WP properly when fork Peter Xu
2019-06-20  2:19 ` [PATCH v5 14/25] userfaultfd: wp: add pmd_swp_*uffd_wp() helpers Peter Xu
2019-06-20  2:19 ` [PATCH v5 15/25] userfaultfd: wp: support swap and page migration Peter Xu
2019-06-20  2:19 ` [PATCH v5 16/25] khugepaged: skip collapse if uffd-wp detected Peter Xu
2019-06-20  2:20 ` [PATCH v5 17/25] userfaultfd: introduce helper vma_find_uffd Peter Xu
2019-06-20  2:20 ` [PATCH v5 18/25] userfaultfd: wp: support write protection for userfault vma range Peter Xu
2019-06-20  2:20 ` [PATCH v5 19/25] userfaultfd: wp: add the writeprotect API to userfaultfd ioctl Peter Xu
2019-06-20  2:20 ` [PATCH v5 20/25] userfaultfd: wp: enabled write protection in userfaultfd API Peter Xu
2019-06-20  2:20 ` [PATCH v5 21/25] userfaultfd: wp: don't wake up when doing write protect Peter Xu
2019-06-20  2:20 ` [PATCH v5 22/25] userfaultfd: wp: UFFDIO_REGISTER_MODE_WP documentation update Peter Xu
2019-06-20  2:20 ` [PATCH v5 23/25] userfaultfd: wp: declare _UFFDIO_WRITEPROTECT conditionally Peter Xu
2019-06-20  2:20 ` [PATCH v5 24/25] userfaultfd: selftests: refactor statistics Peter Xu
2019-06-20  2:20 ` [PATCH v5 25/25] userfaultfd: selftests: add write-protect test Peter Xu
2019-06-23  8:39 ` [PATCH v5 10/25] userfaultfd: wp: add UFFDIO_COPY_MODE_WP Hillf Danton
2020-02-18  3:59 ` [PATCH v5 00/25] userfaultfd: write protection support Bobby Powers
2020-02-18  3:59   ` Bobby Powers
2020-02-18 16:11   ` Peter Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190625053047.GC10020@xz-x1 \
    --to=peterx@redhat.com \
    --cc=aarcange@redhat.com \
    --cc=cracauer@cons.org \
    --cc=david@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=dplotnikov@virtuozzo.com \
    --cc=gokhale2@llnl.gov \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=jglisse@redhat.com \
    --cc=kirill@shutemov.name \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mcfadden8@llnl.gov \
    --cc=mgorman@suse.de \
    --cc=mike.kravetz@oracle.com \
    --cc=rppt@linux.vnet.ibm.com \
    --cc=shli@fb.com \
    --cc=torvalds@linux-foundation.org \
    --cc=xemul@virtuozzo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.