Prev: KVM: MMU: introduce gfn_to_page_atomic() and gfn_to_pfn_atomic()
Next: [PATCH] [resend] intel_agp: Don't oops with zero stolen memory
From: Avi Kivity on 16 Jun 2010 04:10 On 06/16/2010 10:59 AM, Andi Kleen wrote: > On Tue, Jun 15, 2010 at 02:22:06PM +0300, Avi Kivity wrote: > >> Too much duplication. How about putting the tail end of the function in a >> common helper (with an inatomic flag)? >> >> btw, is_hwpoison_address() is racy. While it looks up the address, some >> other task can unmap the page tables under us. >> > Where is is_hwpoison_address() coming from? I can't find it anywhere. > > kvm.git master mm/memory-failure.c (19564281fe). > Anyways hwpoison will not remove the page as long as there > is a reference to it, so as long as you get the reference > race free against another task you're ok. Of course there might > be always an error in between and the hardware may poison > the data, but we don't try to handle all kernel errors. > The page is fine, the page tables are not. Another task can munmap() the thing while is_hwpoison_address() is running. -- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Avi Kivity on 16 Jun 2010 05:50
On 06/16/2010 11:49 AM, Andi Kleen wrote: >> The page is fine, the page tables are not. Another task can munmap() the >> thing while is_hwpoison_address() is running. >> > Ok that boils down to me not seeing that source. > > If it accesses the page tables yes then it's racy. But whoever > looked up the page tables in the first place should have > returned an -EFAULT. There's no useful address attached > to poison. > We need to distinguish between genuine -EFAULT and poisoned address. That's why I suggested get_user_pages_ptes_fast. You can return page = NULL (-EFAULT) and the pte in the same go. No race, and useful for other cases. -- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |