diff --git a/arch/x86/kernel/cpu.c b/arch/x86/kernel/cpu.c index 067433f5..6a83759c 100644 --- a/arch/x86/kernel/cpu.c +++ b/arch/x86/kernel/cpu.c @@ -977,7 +977,7 @@ void handle_interrupt(int vector, struct x86_user_context *regs) else { list_for_each_entry(h, &handlers[vector - 32], list) { if (h->func) { - h->func(h->priv); + h->func(h->priv, vector); } } } diff --git a/executer/kernel/mcctrl/ikc.c b/executer/kernel/mcctrl/ikc.c index 791471f1..60174335 100644 --- a/executer/kernel/mcctrl/ikc.c +++ b/executer/kernel/mcctrl/ikc.c @@ -216,13 +216,6 @@ static void mcctrl_ikc_init(ihk_os_t os, int cpu, unsigned long rphys, struct ih static int connect_handler_ikc2linux(struct ihk_ikc_channel_info *param) { - struct ihk_ikc_channel_desc *c; - int linux_cpu; - ihk_os_t os = param->channel->remote_os; - - c = param->channel; - linux_cpu = c->recv.queue->read_cpu; - param->packet_handler = syscall_packet_handler; return 0; diff --git a/kernel/host.c b/kernel/host.c index a3bb2e9b..a55c49bd 100644 --- a/kernel/host.c +++ b/kernel/host.c @@ -728,6 +728,6 @@ void init_host_ikc2mckernel(void) } dkprintf("connected.\n"); - ihk_ikc_set_intr_channel(NULL, param.channel, ihk_ikc_get_processor_id()); + ihk_ikc_set_regular_channel(NULL, param.channel, ihk_ikc_get_processor_id()); } diff --git a/kernel/mem.c b/kernel/mem.c index e1a198d5..ed437829 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -717,7 +717,7 @@ static struct ihk_mc_pa_ops allocator = { void sbox_write(int offset, unsigned int value); static int page_hash_count_pages(void); -static void query_free_mem_interrupt_handler(void *priv) +static void query_free_mem_interrupt_handler(void *priv, int vector) { int i, pages = 0; diff --git a/lib/include/ihk/cpu.h b/lib/include/ihk/cpu.h index 71600773..bb4de8e4 100644 --- a/lib/include/ihk/cpu.h +++ b/lib/include/ihk/cpu.h @@ -29,7 +29,7 @@ unsigned long cpu_disable_interrupt_save(void); struct ihk_mc_interrupt_handler { struct list_head list; - void (*func)(void *); + void (*func)(void *, int vector); void *priv; }; int ihk_mc_register_interrupt_handler(int vector, @@ -38,7 +38,8 @@ int ihk_mc_unregister_interrupt_handler(int vector, struct ihk_mc_interrupt_handler *h); enum ihk_mc_gv_type { - IHK_GV_IKC = 1, + IHK_GV_IKC_MASTER = 0, + IHK_GV_IKC_REGULAR = 1, IHK_GV_QUERY_FREE_MEM = 2 }; @@ -109,7 +110,8 @@ enum ihk_asr_type { int ihk_mc_arch_set_special_register(enum ihk_asr_type, unsigned long value); int ihk_mc_arch_get_special_register(enum ihk_asr_type, unsigned long *value); -extern unsigned int ihk_ikc_irq; +extern unsigned int ihk_ikc_master_irq; +extern unsigned int ihk_ikc_regular_irq; extern unsigned int ihk_ikc_irq_apicid; extern int gettime_local_support;