[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 10/23] userfaultfd: add new syscall to provide m
From: |
Linus Torvalds |
Subject: |
Re: [Qemu-devel] [PATCH 10/23] userfaultfd: add new syscall to provide memory externalization |
Date: |
Thu, 14 May 2015 10:49:06 -0700 |
On Thu, May 14, 2015 at 10:31 AM, Andrea Arcangeli <address@hidden> wrote:
> +static __always_inline void wake_userfault(struct userfaultfd_ctx *ctx,
> + struct userfaultfd_wake_range
> *range)
> +{
> + if (waitqueue_active(&ctx->fault_wqh))
> + __wake_userfault(ctx, range);
> +}
Pretty much every single time people use this "if
(waitqueue_active())" model, it tends to be a bug, because it means
that there is zero serialization with people who are just about to go
to sleep. It's fundamentally racy against all the "wait_event()" loops
that carefully do memory barriers between testing conditions and going
to sleep, because the memory barriers now don't exist on the waking
side.
So I'm making a new rule: if you use waitqueue_active(), I want an
explanation for why it's not racy with the waiter. A big comment about
the memory ordering, or about higher-level locks that are held by the
caller, or something.
Linus
- [Qemu-devel] [PATCH 22/23] userfaultfd: avoid mmap_sem read recursion in mcopy_atomic, (continued)
- [Qemu-devel] [PATCH 22/23] userfaultfd: avoid mmap_sem read recursion in mcopy_atomic, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 14/23] userfaultfd: wake pending userfaults, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 02/23] userfaultfd: waitqueue: add nr wake parameter to __wake_up_locked_key, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 08/23] userfaultfd: teach vma_merge to merge across vma->vm_userfaultfd_ctx, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 07/23] userfaultfd: call handle_userfault() for userfaultfd_missing() faults, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 13/23] userfaultfd: change the read API to return a uffd_msg, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 23/23] userfaultfd: UFFDIO_COPY and UFFDIO_ZEROPAGE, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 01/23] userfaultfd: linux/Documentation/vm/userfaultfd.txt, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 16/23] userfaultfd: allocate the userfaultfd_ctx cacheline aligned, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 10/23] userfaultfd: add new syscall to provide memory externalization, Andrea Arcangeli, 2015/05/14
- Re: [Qemu-devel] [PATCH 10/23] userfaultfd: add new syscall to provide memory externalization,
Linus Torvalds <=
- Re: [Qemu-devel] [PATCH 00/23] userfaultfd v4, Pavel Emelyanov, 2015/05/18
- Re: [Qemu-devel] [PATCH 00/23] userfaultfd v4, Andrew Morton, 2015/05/19
- Re: [Qemu-devel] [PATCH 00/23] userfaultfd v4, Kirill Smelkov, 2015/05/21