Messages in this thread | | | Date | Wed, 13 Apr 2005 12:32:30 -0700 | From | Andrew Morton <> | Subject | Re: [PATCH][RFC][0/4] InfiniBand userspace verbs implementation |
| |
Roland Dreier <roland@topspin.com> wrote: > > OK, I'm by no means an expert on this, but Libor and I looked at > rmap.c a little more, and there is code: > > if ((vma->vm_flags & (VM_LOCKED|VM_RESERVED)) || > ptep_clear_flush_young(vma, address, pte)) { > ret = SWAP_FAIL; > goto out_unmap; > } > > before the check > > if (PageSwapCache(page) && > page_count(page) != page_mapcount(page) + 2) { > ret = SWAP_FAIL; > goto out_unmap; > } > > If userspace allocates some memory but doesn't touch it aside from > passing the address in to the kernel, which does get_user_pages(), the > PTE will be young in that first test, right?
If get_user_pages() was called with write=1, get_user_pages() will fault in a real page and yes, I guess it'll be pte_young.
If get_user_pages() was called with write=0, get_user_pages() will fault in a mapping of the zero page and we'd never get this far.
> Does that mean that > the userspace mapping will be cleared and userspace will get a > different physical page if it faults that address back in? >
We won't try to unmap a page's ptes until that page has file-or-swapcache backing.
If the pte is then cleared, a subsequent minor fault will reestablish the mapping to the same physical page. A major fault cannot happen because the page was pinned by get_user_pages().
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |