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) {}
+void arch_panic_stop(void) {__builtin_unreachable();}
+void arch_panic_halt(void) {}
panic_printk("RIP: %p RSP: %p FLAGS: %x\n", frame->rip, frame->rsp,
frame->flags);
- panic_stop(NULL);
+ panic_stop();
}
-void arch_panic_stop(struct per_cpu *cpu_data)
+void arch_panic_stop(void)
{
asm volatile("1: hlt; jmp 1b");
__builtin_unreachable();
}
-void arch_panic_halt(struct per_cpu *cpu_data)
+void arch_panic_halt(void)
{
+ struct per_cpu *cpu_data = this_cpu_data();
+
spin_lock(&cpu_data->control_lock);
x86_enter_wait_for_sipi(cpu_data);
spin_unlock(&cpu_data->control_lock);
entry.raw[0]) < 0) {
panic_printk("FATAL: Unsupported IOAPIC state, "
"pin %d\n", pin);
- panic_stop(NULL);
+ panic_stop();
}
}
}
if (!ok) {
panic_printk("FATAL: invept failed, error %d\n",
vmcs_read32(VM_INSTRUCTION_ERROR));
- panic_stop(NULL);
+ panic_stop();
}
}
panic_printk("FATAL: vmlaunch failed, error %d\n",
vmcs_read32(VM_INSTRUCTION_ERROR));
- panic_stop(cpu_data);
+ panic_stop();
}
static void __attribute__((noreturn))
if (!ok) {
panic_printk("FATAL: CPU reset failed\n");
- panic_stop(cpu_data);
+ panic_stop();
}
}
break;
}
dump_guest_regs(guest_regs);
- panic_halt(cpu_data);
+ panic_halt();
}
void vmx_entry_failure(struct per_cpu *cpu_data)
{
panic_printk("FATAL: vmresume failed, error %d\n",
vmcs_read32(VM_INSTRUCTION_ERROR));
- panic_stop(cpu_data);
+ panic_stop();
}
}
}
-void panic_stop(struct per_cpu *cpu_data)
+void panic_stop(void)
{
- panic_printk("Stopping CPU");
- if (cpu_data) {
- panic_printk(" %d", cpu_data->cpu_id);
- cpu_data->cpu_stopped = true;
- }
- panic_printk("\n");
+ panic_printk("Stopping CPU %d\n", this_cpu_id());
+ this_cpu_data()->cpu_stopped = true;
if (phys_processor_id() == panic_cpu)
panic_in_progress = 0;
- arch_panic_stop(cpu_data);
+ arch_panic_stop();
}
-void panic_halt(struct per_cpu *cpu_data)
+void panic_halt(void)
{
- struct cell *cell = cpu_data->cell;
+ struct cell *cell = this_cell();
bool cell_failed = true;
unsigned int cpu;
- panic_printk("Parking CPU %d\n", cpu_data->cpu_id);
+ panic_printk("Parking CPU %d\n", this_cpu_id());
- cpu_data->failed = true;
+ this_cpu_data()->failed = true;
for_each_cpu(cpu, cell->cpu_set)
if (!per_cpu(cpu)->failed) {
cell_failed = false;
if (cell_failed)
cell->comm_page.comm_region.cell_state = JAILHOUSE_CELL_FAILED;
- arch_panic_halt(cpu_data);
+ arch_panic_halt();
if (phys_processor_id() == panic_cpu)
panic_in_progress = 0;
long hypercall(struct per_cpu *cpu_data, unsigned long code,
unsigned long arg1, unsigned long arg2);
-void __attribute__((noreturn)) panic_stop(struct per_cpu *cpu_data);
-void panic_halt(struct per_cpu *cpu_data);
+void __attribute__((noreturn)) panic_stop(void);
+void panic_halt(void);
void arch_suspend_cpu(unsigned int cpu_id);
void arch_resume_cpu(unsigned int cpu_id);
void arch_shutdown(void);
-void __attribute__((noreturn)) arch_panic_stop(struct per_cpu *cpu_data);
-void arch_panic_halt(struct per_cpu *cpu_data);
+void __attribute__((noreturn)) arch_panic_stop(void);
+void arch_panic_halt(void);
error:
panic_printk("FATAL: Unsupported MSI/MSI-X state, device %02x:%02x.%x,"
" cap %d\n", PCI_BDF_PARAMS(device->info->bdf), cap->id);
- panic_stop(NULL);
+ panic_stop();
}
void pci_shutdown(void)