On 17-07-18, 11:48, John Keeping wrote:
> In pl330_update() when checking if a channel has been aborted, the
> channel's lock is not taken, only the overall pl330_dmac lock.  But in
> pl330_terminate_all() the aborted flag (req_running==-1) is set under
> the channel lock and not the pl330_dmac lock.
> 
> With threaded interrupts, this leads to a potential race:
> 
>     pl330_terminate_all               pl330_update
>     -------------------         ------------
>     lock channel
>                                 entry
>     lock pl330
>     _stop channel
>     unlock pl330
>                                 lock pl330
>                                 check req_running != -1
>     req_running = -1
>                                 _start channel
> 

Applied, thanks

-- 
~Vinod

Reply via email to