Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee7ee8aa authored by Praveen Chidambaram's avatar Praveen Chidambaram
Browse files

irq: smp_affinity: Initialize work struct only once



The work function to handle the irq affinity change is currently being
set from setup_affinity, which is called whenever the affinity changes.
Initialize the work function only once when the irq desc object's
defaults are set up.

CRs-Fixed: 756463
Change-Id: I66732f8c01cba166c41ce89c329d313eeaea8a7d
Signed-off-by: default avatarPraveen Chidambaram <pchidamb@codeaurora.org>
parent 4750c45f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -379,6 +379,7 @@ extern void irq_cpu_online(void);
extern void irq_cpu_offline(void);
extern int irq_set_affinity_locked(struct irq_data *data,
				   const struct cpumask *cpumask, bool force);
extern void irq_affinity_notify(struct work_struct *work);

#if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_PENDING_IRQ)
void irq_move_irq(struct irq_data *data);
+1 −0
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ static void desc_set_defaults(unsigned int irq, struct irq_desc *desc, int node,
	desc_smp_init(desc, node);
#ifdef CONFIG_SMP
	INIT_LIST_HEAD(&desc->affinity_notify);
	INIT_WORK(&desc->affinity_work, irq_affinity_notify);
#endif
}

+1 −3
Original line number Diff line number Diff line
@@ -216,7 +216,7 @@ int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
}
EXPORT_SYMBOL_GPL(irq_set_affinity_hint);

static void irq_affinity_notify(struct work_struct *work)
void irq_affinity_notify(struct work_struct *work)
{
	struct irq_desc *desc =
			container_of(work, struct irq_desc, affinity_work);
@@ -343,8 +343,6 @@ setup_affinity(unsigned int irq, struct irq_desc *desc, struct cpumask *mask)
		if (cpumask_intersects(mask, nodemask))
			cpumask_and(mask, mask, nodemask);
	}
	INIT_LIST_HEAD(&desc->affinity_notify);
	INIT_WORK(&desc->affinity_work, irq_affinity_notify);
	irq_do_set_affinity(&desc->irq_data, mask, false);
	return 0;
}