Skip to content

misc: rp1-pio: release DMA channel outside pio->lock#7519

Open
pelwell wants to merge 2 commits into
raspberrypi:rpi-6.12.yfrom
pelwell:is7512
Open

misc: rp1-pio: release DMA channel outside pio->lock#7519
pelwell wants to merge 2 commits into
raspberrypi:rpi-6.12.yfrom
pelwell:is7512

Conversation

@pelwell

@pelwell pelwell commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

rp1_pio_sm_dma_free() ends in dma_release_channel(), which sleeps while
removing the sysfs links. Running it under pio->lock in SM_CONFIG_XFER
triggers "BUG: scheduling while atomic" and hangs the machine when a
client keeps reconfiguring a transfer.

The claim bit stays set for this client across the unlock, so the
channel remains reserved against other clients while it is released.

pelwell and others added 2 commits July 24, 2026 16:01
Fail transfers if they haven't first been configured.

Signed-off-by: Phil Elwell <phil@raspberrypi.com>
rp1_pio_sm_dma_free() ends in dma_release_channel(), which sleeps while
removing the sysfs links. Running it under pio->lock in SM_CONFIG_XFER
triggers "BUG: scheduling while atomic" and hangs the machine when a
client keeps reconfiguring a transfer.

The claim bit stays set for this client across the unlock, so the
channel remains reserved against other clients while it is released.

Fixes: 0b7a604 ("misc: Add RP1 PIO driver")
Link: raspberrypi#7512
Signed-off-by: Nicolai Buchwitz <nb@tipi-net.de>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants