|
|
Re: [v3.6 3/3] iommu/tegra: smmu: Fix unsleepable memory allocation at alloc_pdir() |
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 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
[Linux ARM (vger)] [Linux ARM MSM] [Linux Omap] [Linux Arm] [Linux Tegra] [Fedora ARM] [eCos] [Linux Fastboot] [Gcc Help] [Git] [DCCP] [IETF Announce] [Security] [PDAs] [Linux] [Linux MIPS] [Yosemite Campsites] [Photos]
![]() |
![]() |