[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 22/23] userfaultfd: avoid mmap_sem read recursio
From: |
Andrew Morton |
Subject: |
Re: [Qemu-devel] [PATCH 22/23] userfaultfd: avoid mmap_sem read recursion in mcopy_atomic |
Date: |
Fri, 22 May 2015 13:18:22 -0700 |
On Thu, 14 May 2015 19:31:19 +0200 Andrea Arcangeli <address@hidden> wrote:
> If the rwsem starves writers it wasn't strictly a bug but lockdep
> doesn't like it and this avoids depending on lowlevel implementation
> details of the lock.
>
> ...
>
> @@ -229,13 +246,33 @@ static __always_inline ssize_t __mcopy_atomic(struct
> mm_struct *dst_mm,
>
> if (!zeropage)
> err = mcopy_atomic_pte(dst_mm, dst_pmd, dst_vma,
> - dst_addr, src_addr);
> + dst_addr, src_addr, &page);
> else
> err = mfill_zeropage_pte(dst_mm, dst_pmd, dst_vma,
> dst_addr);
>
> cond_resched();
>
> + if (unlikely(err == -EFAULT)) {
> + void *page_kaddr;
> +
> + BUILD_BUG_ON(zeropage);
I'm not sure what this is trying to do. BUILD_BUG_ON(local_variable)?
It goes bang in my build. I'll just delete it.
> + up_read(&dst_mm->mmap_sem);
> + BUG_ON(!page);
> +
> + page_kaddr = kmap(page);
> + err = copy_from_user(page_kaddr,
> + (const void __user *) src_addr,
> + PAGE_SIZE);
> + kunmap(page);
> + if (unlikely(err)) {
> + err = -EFAULT;
> + goto out;
> + }
> + goto retry;
> + } else
> + BUG_ON(page);
> +
- [Qemu-devel] [PATCH 19/23] userfaultfd: activate syscall, (continued)
- [Qemu-devel] [PATCH 19/23] userfaultfd: activate syscall, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 21/23] userfaultfd: mcopy_atomic|mfill_zeropage: UFFDIO_COPY|UFFDIO_ZEROPAGE preparation, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 03/23] userfaultfd: uAPI, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 17/23] userfaultfd: solve the race between UFFDIO_COPY|ZEROPAGE and read, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 06/23] userfaultfd: add VM_UFFD_MISSING and VM_UFFD_WP, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 04/23] userfaultfd: linux/userfaultfd_k.h, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 12/23] userfaultfd: Rename uffd_api.bits into .features fixup, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 11/23] userfaultfd: Rename uffd_api.bits into .features, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 09/23] userfaultfd: prevent khugepaged to merge if userfaultfd is armed, Andrea Arcangeli, 2015/05/14
- [Qemu-devel] [PATCH 22/23] userfaultfd: avoid mmap_sem read recursion in mcopy_atomic, Andrea Arcangeli, 2015/05/14
- Re: [Qemu-devel] [PATCH 22/23] userfaultfd: avoid mmap_sem read recursion in mcopy_atomic,
Andrew Morton <=
[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