Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
pinctrl: rp1: fix GPIO IRQ thread affinity on PREEMPT_RT
rp1_gpio_irq_set_affinity() delegates to the parent chip but does
not call irq_data_update_effective_affinity() and does not return
IRQ_SET_MASK_OK_DONE. This causes the same PREEMPT_RT thread
affinity problem as in the MFD layer, at the pinctrl level of the
interrupt hierarchy.

Fix by updating the effective affinity and returning
IRQ_SET_MASK_OK_DONE on success.

Fixes: #7301

Signed-off-by: Michael Byczkowski <by@by-online.de>
  • Loading branch information
by committed Apr 14, 2026
commit 9d128f965bd53f9874af9ca8fb3cda4c1ffee62c
11 changes: 9 additions & 2 deletions drivers/pinctrl/pinctrl-rp1.c
Original file line number Diff line number Diff line change
Expand Up @@ -958,8 +958,15 @@ static int rp1_gpio_irq_set_affinity(struct irq_data *data, const struct cpumask
}
}

if (parent_data && parent_data->chip->irq_set_affinity)
return parent_data->chip->irq_set_affinity(parent_data, dest, force);
if (parent_data && parent_data->chip->irq_set_affinity) {
int ret = parent_data->chip->irq_set_affinity(parent_data, dest, force);

if (ret >= 0) {
irq_data_update_effective_affinity(data, dest);
return IRQ_SET_MASK_OK_DONE;
}
return ret;
}

return -EINVAL;
}
Expand Down
Loading