hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/arch/x86/xen/smp_pv.c
....@@ -30,6 +30,7 @@
3030 #include <asm/desc.h>
3131 #include <asm/cpu.h>
3232 #include <asm/io_apic.h>
33
+#include <asm/fpu/internal.h>
3334
3435 #include <xen/interface/xen.h>
3536 #include <xen/interface/vcpu.h>
....@@ -63,6 +64,7 @@
6364
6465 cr4_init();
6566 cpu_init();
67
+ fpu__init_cpu();
6668 touch_softlockup_watchdog();
6769 preempt_disable();
6870
....@@ -98,18 +100,18 @@
98100
99101 void xen_smp_intr_free_pv(unsigned int cpu)
100102 {
103
+ kfree(per_cpu(xen_irq_work, cpu).name);
104
+ per_cpu(xen_irq_work, cpu).name = NULL;
101105 if (per_cpu(xen_irq_work, cpu).irq >= 0) {
102106 unbind_from_irqhandler(per_cpu(xen_irq_work, cpu).irq, NULL);
103107 per_cpu(xen_irq_work, cpu).irq = -1;
104
- kfree(per_cpu(xen_irq_work, cpu).name);
105
- per_cpu(xen_irq_work, cpu).name = NULL;
106108 }
107109
110
+ kfree(per_cpu(xen_pmu_irq, cpu).name);
111
+ per_cpu(xen_pmu_irq, cpu).name = NULL;
108112 if (per_cpu(xen_pmu_irq, cpu).irq >= 0) {
109113 unbind_from_irqhandler(per_cpu(xen_pmu_irq, cpu).irq, NULL);
110114 per_cpu(xen_pmu_irq, cpu).irq = -1;
111
- kfree(per_cpu(xen_pmu_irq, cpu).name);
112
- per_cpu(xen_pmu_irq, cpu).name = NULL;
113115 }
114116 }
115117
....@@ -119,6 +121,7 @@
119121 char *callfunc_name, *pmu_name;
120122
121123 callfunc_name = kasprintf(GFP_KERNEL, "irqwork%d", cpu);
124
+ per_cpu(xen_irq_work, cpu).name = callfunc_name;
122125 rc = bind_ipi_to_irqhandler(XEN_IRQ_WORK_VECTOR,
123126 cpu,
124127 xen_irq_work_interrupt,
....@@ -128,10 +131,10 @@
128131 if (rc < 0)
129132 goto fail;
130133 per_cpu(xen_irq_work, cpu).irq = rc;
131
- per_cpu(xen_irq_work, cpu).name = callfunc_name;
132134
133135 if (is_xen_pmu) {
134136 pmu_name = kasprintf(GFP_KERNEL, "pmu%d", cpu);
137
+ per_cpu(xen_pmu_irq, cpu).name = pmu_name;
135138 rc = bind_virq_to_irqhandler(VIRQ_XENPMU, cpu,
136139 xen_pmu_irq_handler,
137140 IRQF_PERCPU|IRQF_NOBALANCING,
....@@ -139,7 +142,6 @@
139142 if (rc < 0)
140143 goto fail;
141144 per_cpu(xen_pmu_irq, cpu).irq = rc;
142
- per_cpu(xen_pmu_irq, cpu).name = pmu_name;
143145 }
144146
145147 return 0;