summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/entry/syscalls/syscall_32.tbl1
-rw-r--r--arch/x86/entry/syscalls/syscall_64.tbl1
-rw-r--r--arch/x86/include/asm/uintr.h4
-rw-r--r--arch/x86/kernel/uintr_fd.c9
4 files changed, 15 insertions, 0 deletions
diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl
index d0e97f1f1173..a1575cd06bac 100644
--- a/arch/x86/entry/syscalls/syscall_32.tbl
+++ b/arch/x86/entry/syscalls/syscall_32.tbl
@@ -459,3 +459,4 @@
452 i386 uintr_register_sender sys_uintr_register_sender
453 i386 uintr_unregister_sender sys_uintr_unregister_sender
454 i386 uintr_wait sys_uintr_wait
+455 i386 uintr_event sys_uintr_event
diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl
index 444af44e5947..e3e0b47c40a2 100644
--- a/arch/x86/entry/syscalls/syscall_64.tbl
+++ b/arch/x86/entry/syscalls/syscall_64.tbl
@@ -376,6 +376,7 @@
452 common uintr_register_sender sys_uintr_register_sender
453 common uintr_unregister_sender sys_uintr_unregister_sender
454 common uintr_wait sys_uintr_wait
+455 common uintr_event sys_uintr_event
#
# Due to a historical design error, certain syscalls are numbered differently
diff --git a/arch/x86/include/asm/uintr.h b/arch/x86/include/asm/uintr.h
index a8bb151e4c8f..3e072bec04f2 100644
--- a/arch/x86/include/asm/uintr.h
+++ b/arch/x86/include/asm/uintr.h
@@ -64,12 +64,16 @@ void switch_uintr_return(void);
int uintr_receiver_wait(ktime_t *expires);
void uintr_wake_up_process(void);
+int do_uintr_event_init(int flag);
+void uintr_event_write(void);
+
#else /* !CONFIG_X86_USER_INTERRUPTS */
static inline void uintr_free(struct task_struct *task) {}
static inline void switch_uintr_prepare(struct task_struct *prev) {}
static inline void switch_uintr_return(void) {}
static inline void uintr_wake_up_process(void) {}
+void uintr_event_write(void) {}
#endif /* CONFIG_X86_USER_INTERRUPTS */
diff --git a/arch/x86/kernel/uintr_fd.c b/arch/x86/kernel/uintr_fd.c
index 8ddc6a7575bf..3287f8028d00 100644
--- a/arch/x86/kernel/uintr_fd.c
+++ b/arch/x86/kernel/uintr_fd.c
@@ -321,3 +321,12 @@ SYSCALL_DEFINE2(uintr_wait, u64, usec, unsigned int, flags)
expires = usec * NSEC_PER_USEC;
return uintr_receiver_wait(&expires);
}
+
+SYSCALL_DEFINE1(uintr_event, unsigned int, flags)
+{
+ if (!uintr_arch_enabled())
+ return -EOPNOTSUPP;
+
+ int fd = flags;
+ return do_uintr_event_init(fd);
+} \ No newline at end of file