Re: [v3.6 3/3] iommu/tegra: smmu: Fix unsleepable memory allocation at alloc_pdir() |
|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
"joerg.roedel@xxxxxxx" <joerg.roedel@xxxxxxx> wrote @ Tue, 17 Jul 2012 15:23:00 +0200:
> 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?
You are right. I didn't get the point of your patch. In the case that
you can return -EAGAIN, the complicated "lock,unlock,lock,check race"
is not necessary as you did.
Verified the patch w/ Tegra3 based board. Please put this into next
queue. Thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[ARM Kernel]
[Linux USB Devel]
[Video for Linux]
[Linux Audio Users]
[Photo]
[Yosemite News]
[Yosemite Photos]
[Free Online Dating]
[Linux Kernel]
[Linux SCSI]
[XFree86]