mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-08 00:29:36 -04:00
Merge tag 'irq-urgent-2020-08-02' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fixes from Ingo Molnar: "Fix a recent IRQ affinities regression, add in a missing debugfs printout that helps the debugging of IRQ affinity logic bugs, and fix a memory leak" * tag 'irq-urgent-2020-08-02' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: genirq/debugfs: Add missing irqchip flags genirq/affinity: Make affinity setting if activated opt-in irqdomain/treewide: Free firmware node after domain removal
This commit is contained in:
@@ -112,6 +112,7 @@ static const struct irq_bit_descr irqdata_states[] = {
|
||||
BIT_MASK_DESCR(IRQD_AFFINITY_SET),
|
||||
BIT_MASK_DESCR(IRQD_SETAFFINITY_PENDING),
|
||||
BIT_MASK_DESCR(IRQD_AFFINITY_MANAGED),
|
||||
BIT_MASK_DESCR(IRQD_AFFINITY_ON_ACTIVATE),
|
||||
BIT_MASK_DESCR(IRQD_MANAGED_SHUTDOWN),
|
||||
BIT_MASK_DESCR(IRQD_CAN_RESERVE),
|
||||
BIT_MASK_DESCR(IRQD_MSI_NOMASK_QUIRK),
|
||||
@@ -120,6 +121,10 @@ static const struct irq_bit_descr irqdata_states[] = {
|
||||
|
||||
BIT_MASK_DESCR(IRQD_WAKEUP_STATE),
|
||||
BIT_MASK_DESCR(IRQD_WAKEUP_ARMED),
|
||||
|
||||
BIT_MASK_DESCR(IRQD_DEFAULT_TRIGGER_SET),
|
||||
|
||||
BIT_MASK_DESCR(IRQD_HANDLE_ENFORCE_IRQCTX),
|
||||
};
|
||||
|
||||
static const struct irq_bit_descr irqdesc_states[] = {
|
||||
|
||||
@@ -320,12 +320,16 @@ static bool irq_set_affinity_deactivated(struct irq_data *data,
|
||||
struct irq_desc *desc = irq_data_to_desc(data);
|
||||
|
||||
/*
|
||||
* Handle irq chips which can handle affinity only in activated
|
||||
* state correctly
|
||||
*
|
||||
* If the interrupt is not yet activated, just store the affinity
|
||||
* mask and do not call the chip driver at all. On activation the
|
||||
* driver has to make sure anyway that the interrupt is in a
|
||||
* useable state so startup works.
|
||||
*/
|
||||
if (!IS_ENABLED(CONFIG_IRQ_DOMAIN_HIERARCHY) || irqd_is_activated(data))
|
||||
if (!IS_ENABLED(CONFIG_IRQ_DOMAIN_HIERARCHY) ||
|
||||
irqd_is_activated(data) || !irqd_affinity_on_activate(data))
|
||||
return false;
|
||||
|
||||
cpumask_copy(desc->irq_common_data.affinity, mask);
|
||||
|
||||
Reference in New Issue
Block a user