mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-21 09:24:37 +07:00
x86/vector: Merge allocate_vector() into assign_vector_locked()
assign_vector_locked() calls allocate_vector() to get a real vector for an IRQ. If the current target CPU is online and in the new requested affinity mask, allocate_vector() will return 0 and nothing should be done. But, assign_vector_locked() calls apic_update_irq_cfg() even in that case which is pointless. allocate_vector() is not called from anything else, so the functions can be merged and in case of no change the apic_update_irq_cfg() can be avoided. [ tglx: Massaged changelog ] Signed-off-by: Dou Liyang <douly.fnst@cn.fujitsu.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: hpa@zytor.com Link: https://lkml.kernel.org/r/20180511080956.6316-1-douly.fnst@cn.fujitsu.com
This commit is contained in:
parent
73fcb1a370
commit
2773397171
@ -218,7 +218,8 @@ static int reserve_irq_vector(struct irq_data *irqd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int allocate_vector(struct irq_data *irqd, const struct cpumask *dest)
|
||||
static int
|
||||
assign_vector_locked(struct irq_data *irqd, const struct cpumask *dest)
|
||||
{
|
||||
struct apic_chip_data *apicd = apic_chip_data(irqd);
|
||||
bool resvd = apicd->has_reserved;
|
||||
@ -236,22 +237,12 @@ static int allocate_vector(struct irq_data *irqd, const struct cpumask *dest)
|
||||
return 0;
|
||||
|
||||
vector = irq_matrix_alloc(vector_matrix, dest, resvd, &cpu);
|
||||
if (vector > 0)
|
||||
apic_update_vector(irqd, vector, cpu);
|
||||
trace_vector_alloc(irqd->irq, vector, resvd, vector);
|
||||
return vector;
|
||||
}
|
||||
|
||||
static int assign_vector_locked(struct irq_data *irqd,
|
||||
const struct cpumask *dest)
|
||||
{
|
||||
struct apic_chip_data *apicd = apic_chip_data(irqd);
|
||||
int vector = allocate_vector(irqd, dest);
|
||||
|
||||
if (vector < 0)
|
||||
return vector;
|
||||
apic_update_vector(irqd, vector, cpu);
|
||||
apic_update_irq_cfg(irqd, vector, cpu);
|
||||
|
||||
apic_update_irq_cfg(irqd, apicd->vector, apicd->cpu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user