void arch_cell_destroy(struct per_cpu *cpu_data, struct cell *new_cell) {}
void *memcpy(void *dest, const void *src, unsigned long n) { return NULL; }
void arch_dbg_write(const char *msg) {}
+void arch_shutdown(void) {}
vmx_cell_exit(cell);
flush_linux_cpu_caches(cpu_data);
}
+
+void arch_shutdown(void)
+{
+ vtd_shutdown();
+}
#include <asm/apic.h>
#include <asm/fault.h>
#include <asm/vmx.h>
-#include <asm/vtd.h>
static const struct segment invalid_seg = {
.access_rights = 0x10000
switch (guest_regs->rax) {
case JAILHOUSE_HC_DISABLE:
guest_regs->rax = shutdown(cpu_data);
- if (guest_regs->rax == 0) {
- vtd_shutdown();
+ if (guest_regs->rax == 0)
vmx_cpu_deactivate_vmm(guest_regs, cpu_data);
- }
break;
case JAILHOUSE_HC_CELL_CREATE:
guest_regs->rax = cell_create(cpu_data, guest_regs->rdi);
printk(" Closing Linux cell \"%s\"\n",
linux_cell.config->name);
+ arch_shutdown();
}
printk(" Releasing CPU %d\n", this_cpu);
int arch_cell_create(struct per_cpu *cpu_data, struct cell *cell);
void arch_cell_destroy(struct per_cpu *cpu_data, struct cell *cell);
+
+void arch_shutdown(void);