[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CABb+yY3i5UaP2zzHmR3wrZMWpPEVPhas-3p-XDMDyus2nCqvAQ@mail.gmail.com>
Date: Tue, 9 Jan 2018 13:59:45 +0530
From: Jassi Brar <jassisinghbrar@...il.com>
To: Qi Hou <qi.hou@...driver.com>
Cc: Vinod Koul <vinod.koul@...el.com>,
Dan Williams <dan.j.williams@...el.com>,
paul.gortmaker@...driver.com, xiao.zhang@...driver.com,
Russell King <rmk+kernel@....linux.org.uk>,
dmaengine@...r.kernel.org,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>
Subject: Re: [RFC] dmaengine: pl330: fix a race condition in case of threaded irqs
On Mon, Dec 25, 2017 at 7:50 AM, Qi Hou <qi.hou@...driver.com> wrote:
> I found this problem below, and I now understand why it happens, but I'm not
> 100% sure what is the best way to fix it.
>
> When booting up with "threadirqs" in command line, all irq handlers of the DMA
> controller pl330 will be threaded forcedly. These threads will race for the same
> list, pl330->req_done.
>
> Before the callback, the spinlock was released. And after it, the spinlock was
> taken. This opened an race window where another threaded irq handler could steal
> the spinlock and be permitted to delete entries of the list, pl330->req_done.
>
The locking has been recently modified beyond recognition, so I can't
tell why that part of code is the way it is.
The safest and cleanest solution seems to be to not drop and re-aquire the lock.
Cheers!
Powered by blists - more mailing lists