17.01.2022 10:02, Akhil R пишет: >> 10.01.2022 19:05, Akhil R пишет: >>> +static int tegra_dma_terminate_all(struct dma_chan *dc) >>> +{ >>> + struct tegra_dma_channel *tdc = to_tegra_dma_chan(dc); >>> + unsigned long flags; >>> + LIST_HEAD(head); >>> + int err; >>> + >>> + if (tdc->dma_desc) { >> >> Needs locking protection against racing with the interrupt handler. > tegra_dma_stop_client() waits for the in-flight transfer > to complete and prevents any additional transfer to start. > Wouldn't it manage the race? Do you see any potential issue there? You should consider interrupt handler like a process running in a parallel thread. The interrupt handler sets tdc->dma_desc to NULL, hence you'll get NULL dereference in tegra_dma_stop_client().