On Tue, Jul 17, 2012 at 02:25:24PM +0200, Hiroshi Doyu wrote: > The above spin_lock is always necessary. "as->lock" should be held to > protect "as->pdir_page". Only when "as->pdir_page" is NULL, > "as->pdir_page" would be allocated in "alloc_pdir()". Without this > lock, the following race could happen: > > > Without as->lock: > A: B: > i == 3 > pdir_page == NULL > i == 3 > pdir_page == NULL > pdir_page = a; > pdir_page = b; !!!!!! OVERWRITTEN !!!!!! > Unless I am missing something, this is not the correct situation with my patch. It would look more like this: A: B: i == 3 pdir_page == NULL i == 3 pdir_page == NULL take as->lock /* race check */ pdir_page == NULL -> proceed /* spinning on as->lock */ pdir_page = a; release as->lock take as->lock /* race check */ pdir_page != NULL -> return This should be fine, no? Do I miss something? Joerg -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html