75 lines
2.2 KiB
Diff
75 lines
2.2 KiB
Diff
diff --git a/arch/arm64/kernel/include/syscall_list.h b/arch/arm64/kernel/include/syscall_list.h
|
|
index 5dd6243..0f172a3 100644
|
|
--- a/arch/arm64/kernel/include/syscall_list.h
|
|
+++ b/arch/arm64/kernel/include/syscall_list.h
|
|
@@ -128,6 +128,8 @@ SYSCALL_HANDLED(731, util_indicate_clone)
|
|
SYSCALL_HANDLED(732, get_system)
|
|
SYSCALL_HANDLED(733, util_register_desc)
|
|
|
|
+SYSCALL_HANDLED(750, int_and_sleep)
|
|
+
|
|
/* McKernel Specific */
|
|
SYSCALL_HANDLED(801, swapout)
|
|
SYSCALL_HANDLED(802, linux_mlock)
|
|
diff --git a/arch/x86_64/kernel/include/syscall_list.h b/arch/x86_64/kernel/include/syscall_list.h
|
|
index 8ef9bd0..2134212 100644
|
|
--- a/arch/x86_64/kernel/include/syscall_list.h
|
|
+++ b/arch/x86_64/kernel/include/syscall_list.h
|
|
@@ -170,6 +170,8 @@ SYSCALL_HANDLED(731, util_indicate_clone)
|
|
SYSCALL_HANDLED(732, get_system)
|
|
SYSCALL_HANDLED(733, util_register_desc)
|
|
|
|
+SYSCALL_HANDLED(750, int_and_sleep)
|
|
+
|
|
/* McKernel Specific */
|
|
SYSCALL_HANDLED(801, swapout)
|
|
SYSCALL_HANDLED(802, linux_mlock)
|
|
diff --git a/kernel/syscall.c b/kernel/syscall.c
|
|
index 97935a7..a603791 100644
|
|
--- a/kernel/syscall.c
|
|
+++ b/kernel/syscall.c
|
|
@@ -9429,6 +9429,43 @@ SYSCALL_DECLARE(util_register_desc)
|
|
return 0;
|
|
}
|
|
|
|
+volatile long wk;
|
|
+volatile long x;
|
|
+volatile long y;
|
|
+volatile long z;
|
|
+
|
|
+static void int_func(void *arg)
|
|
+{
|
|
+ long i;
|
|
+
|
|
+ kprintf("int_func start\n");
|
|
+ for (i = 0; i < 100000000L; i++)
|
|
+ wk += x * y + z;
|
|
+ kprintf("int_func end\n");
|
|
+}
|
|
+
|
|
+SYSCALL_DECLARE(int_and_sleep)
|
|
+{
|
|
+ struct ihk_mc_interrupt_handler *int_handler;
|
|
+ long flag;
|
|
+
|
|
+ int_handler = kmalloc(sizeof(struct ihk_mc_interrupt_handler), IHK_MC_AP_NOWAIT);
|
|
+ memset(int_handler, '\0', sizeof(struct ihk_mc_interrupt_handler));
|
|
+ INIT_LIST_HEAD(&int_handler->list);
|
|
+ int_handler->func = int_func;
|
|
+ int_handler->priv = NULL;
|
|
+ kprintf("ihk_mc_register_interrupt_handler\n");
|
|
+ ihk_mc_register_interrupt_handler(140, int_handler);
|
|
+ kprintf("ihk_mc_interrupt_cpu\n");
|
|
+ flag = cpu_disable_interrupt_save();
|
|
+ ihk_mc_interrupt_cpu(ihk_mc_get_processor_id(), 140);
|
|
+ cpu_restore_interrupt(flag);
|
|
+ kprintf("ihk_mc_unregister_interrupt_handler\n");
|
|
+ ihk_mc_unregister_interrupt_handler(140, int_handler);
|
|
+ kfree(int_handler);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
void
|
|
reset_cputime()
|
|
{
|