void arch_paging_init(void) { }
const struct paging arm_paging[1];
+
+void arch_panic_stop(struct per_cpu *cpu_data) {__builtin_unreachable();}
+void arch_panic_halt(struct per_cpu *cpu_data) {}
#include <asm/apic.h>
#include <asm/bitops.h>
#include <asm/control.h>
-#include <asm/fault.h>
#include <asm/vmx.h>
#define XAPIC_REG(x2apic_reg) ((x2apic_reg) << 4)
}
/* control_lock has to be held */
-void x86_enter_wait_for_sipi(struct per_cpu *cpu_data)
+static void x86_enter_wait_for_sipi(struct per_cpu *cpu_data)
{
cpu_data->init_signaled = false;
cpu_data->wait_for_sipi = true;
return sipi_vector;
}
+
+void arch_panic_stop(struct per_cpu *cpu_data)
+{
+ asm volatile("1: hlt; jmp 1b");
+ __builtin_unreachable();
+}
+
+void arch_panic_halt(struct per_cpu *cpu_data)
+{
+ spin_lock(&cpu_data->control_lock);
+ x86_enter_wait_for_sipi(cpu_data);
+ spin_unlock(&cpu_data->control_lock);
+}
* the COPYING file in the top-level directory.
*/
+#include <jailhouse/control.h>
#include <jailhouse/printk.h>
#include <jailhouse/processor.h>
-#include <asm/control.h>
-#include <asm/types.h>
#include <asm/fault.h>
-#include <asm/vmx.h>
struct exception_frame {
u64 vector;
panic_stop(NULL);
}
-
-void panic_stop(struct per_cpu *cpu_data)
-{
- panic_printk("Stopping CPU");
- if (cpu_data) {
- panic_printk(" %d", cpu_data->cpu_id);
- cpu_data->cpu_stopped = true;
- }
- panic_printk("\n");
-
- if (phys_processor_id() == panic_cpu)
- panic_in_progress = 0;
-
- asm volatile("1: hlt; jmp 1b");
- __builtin_unreachable();
-}
-
-void panic_halt(struct per_cpu *cpu_data)
-{
- panic_printk("Parking CPU %d\n", cpu_data->cpu_id);
-
- spin_lock(&cpu_data->control_lock);
- x86_enter_wait_for_sipi(cpu_data);
- spin_unlock(&cpu_data->control_lock);
-
- if (phys_processor_id() == panic_cpu)
- panic_in_progress = 0;
-}
void x86_send_init_sipi(unsigned int cpu_id, enum x86_init_sipi type,
int sipi_vector);
-void x86_enter_wait_for_sipi(struct per_cpu *cpu_data);
int x86_handle_events(struct per_cpu *cpu_data);
* the COPYING file in the top-level directory.
*/
-#include <asm/percpu.h>
-
struct exception_frame;
void __attribute__((noreturn))
exception_handler(struct exception_frame *frame);
-
-void __attribute__((noreturn)) panic_stop(struct per_cpu *cpu_data);
-void panic_halt(struct per_cpu *cpu_data);
#include <jailhouse/mmio.h>
#include <jailhouse/paging.h>
#include <jailhouse/printk.h>
-#include <asm/fault.h>
struct modrm {
u8 rm:3;
#include <jailhouse/hypercall.h>
#include <asm/apic.h>
#include <asm/control.h>
-#include <asm/fault.h>
#include <asm/vmx.h>
#include <asm/vtd.h>
#include <jailhouse/control.h>
#include <jailhouse/printk.h>
#include <jailhouse/paging.h>
+#include <jailhouse/processor.h>
#include <jailhouse/string.h>
#include <asm/bitops.h>
#include <asm/spinlock.h>
return ret;
}
+
+void panic_stop(struct per_cpu *cpu_data)
+{
+ panic_printk("Stopping CPU");
+ if (cpu_data) {
+ panic_printk(" %d", cpu_data->cpu_id);
+ cpu_data->cpu_stopped = true;
+ }
+ panic_printk("\n");
+
+ if (phys_processor_id() == panic_cpu)
+ panic_in_progress = 0;
+
+ arch_panic_stop(cpu_data);
+}
+
+void panic_halt(struct per_cpu *cpu_data)
+{
+ panic_printk("Parking CPU %d\n", cpu_data->cpu_id);
+
+ arch_panic_halt(cpu_data);
+
+ if (phys_processor_id() == panic_cpu)
+ panic_in_progress = 0;
+}
int shutdown(struct per_cpu *cpu_data);
+void __attribute__((noreturn)) panic_stop(struct per_cpu *cpu_data);
+void panic_halt(struct per_cpu *cpu_data);
+
void arch_suspend_cpu(unsigned int cpu_id);
void arch_resume_cpu(unsigned int cpu_id);
void arch_reset_cpu(unsigned int cpu_id);
void arch_cell_destroy(struct per_cpu *cpu_data, struct cell *cell);
void arch_shutdown(void);
+
+void __attribute__((noreturn)) arch_panic_stop(struct per_cpu *cpu_data);
+void arch_panic_halt(struct per_cpu *cpu_data);