summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86/include/asm/trace/irq_vectors.h12
-rw-r--r--arch/x86/kernel/apic/vector.c4
2 files changed, 10 insertions, 6 deletions
diff --git a/arch/x86/include/asm/trace/irq_vectors.h b/arch/x86/include/asm/trace/irq_vectors.h
index bc09c5cf6390..bfd480b827f5 100644
--- a/arch/x86/include/asm/trace/irq_vectors.h
+++ b/arch/x86/include/asm/trace/irq_vectors.h
@@ -360,24 +360,28 @@ TRACE_EVENT(vector_setup,
TRACE_EVENT(vector_free_moved,
- TP_PROTO(unsigned int irq, unsigned int vector, bool is_managed),
+ TP_PROTO(unsigned int irq, unsigned int cpu, unsigned int vector,
+ bool is_managed),
- TP_ARGS(irq, vector, is_managed),
+ TP_ARGS(irq, cpu, vector, is_managed),
TP_STRUCT__entry(
__field( unsigned int, irq )
+ __field( unsigned int, cpu )
__field( unsigned int, vector )
__field( bool, is_managed )
),
TP_fast_assign(
__entry->irq = irq;
+ __entry->cpu = cpu;
__entry->vector = vector;
__entry->is_managed = is_managed;
),
- TP_printk("irq=%u vector=%u is_managed=%d",
- __entry->irq, __entry->vector, __entry->is_managed)
+ TP_printk("irq=%u cpu=%u vector=%u is_managed=%d",
+ __entry->irq, __entry->cpu, __entry->vector,
+ __entry->is_managed)
);
diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
index 573538e0981e..05c85e693a5d 100644
--- a/arch/x86/kernel/apic/vector.c
+++ b/arch/x86/kernel/apic/vector.c
@@ -797,9 +797,9 @@ static void free_moved_vector(struct apic_chip_data *apicd)
*/
WARN_ON_ONCE(managed);
- trace_vector_free_moved(apicd->irq, vector, managed);
+ trace_vector_free_moved(apicd->irq, cpu, vector, managed);
irq_matrix_free(vector_matrix, cpu, vector, managed);
- __this_cpu_write(vector_irq[vector], VECTOR_UNUSED);
+ per_cpu(vector_irq, cpu)[vector] = VECTOR_UNUSED;
hlist_del_init(&apicd->clist);
apicd->prev_vector = 0;
apicd->move_in_progress = 0;