#include <ihk/debug.h>
#include <ihk/cpu.h>
#include <cls.h>
#include <ihk/monitor.h>

extern struct cpu_local_var *clv;
extern void eventfd(int type);
extern void arch_print_stack();

void panic(const char *msg)
{
	if (clv) {
		struct ihk_os_cpu_monitor *monitor = cpu_local_var(monitor);
		//kprintf("%s: calling eventfd\n", __FUNCTION__);
		monitor->status = IHK_OS_MONITOR_PANIC;
		eventfd(IHK_OS_EVENTFD_TYPE_STATUS);
	}
	cpu_disable_interrupt();

	kprintf("%s\n", msg);

	arch_print_stack();

	while (1) {
		cpu_halt();
	}
}

extern void arch_show_interrupt_context(const void*);

void ihk_mc_debug_show_interrupt_context(const void *reg)
{
	arch_show_interrupt_context(reg);
}

