diff options
| author | Your Name <[email protected]> | 2023-07-18 08:33:41 +0000 |
|---|---|---|
| committer | Your Name <[email protected]> | 2023-07-18 08:33:41 +0000 |
| commit | c6c83e45719d3774bf723536f323e317eb9a384b (patch) | |
| tree | e80c5a2f5029cc5dc6da4f4a59ecb86d16eb273e | |
| parent | d1528589b422729a8f9b10fce153425bc8ed5949 (diff) | |
add system call uintr_event(int fd)temp2
| -rw-r--r-- | arch/x86/entry/syscalls/syscall_32.tbl | 1 | ||||
| -rw-r--r-- | arch/x86/entry/syscalls/syscall_64.tbl | 1 | ||||
| -rw-r--r-- | arch/x86/include/asm/uintr.h | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/uintr_fd.c | 9 | ||||
| -rw-r--r-- | include/linux/syscalls.h | 1 | ||||
| -rw-r--r-- | include/uapi/asm-generic/unistd.h | 4 | ||||
| -rw-r--r-- | kernel/sys_ni.c | 1 | ||||
| -rwxr-xr-x | scripts/checksyscalls.sh | 1 |
8 files changed, 21 insertions, 1 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 diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index ddb37e59acaa..792263090fcf 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -1067,6 +1067,7 @@ asmlinkage long sys_uintr_create_fd(u64 vector, unsigned int flags); asmlinkage long sys_uintr_register_sender(int uintr_fd, unsigned int flags); asmlinkage long sys_uintr_unregister_sender(int uintr_fd, unsigned int flags); asmlinkage long sys_uintr_wait(u64 usec, unsigned int flags); +asmlinkage long sys_uintr_event(unsigned int flags); /* pciconfig: alpha, arm, arm64, ia64, sparc */ asmlinkage long sys_pciconfig_read(unsigned long bus, unsigned long dfn, diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h index b9a8b344270a..477f5f427530 100644 --- a/include/uapi/asm-generic/unistd.h +++ b/include/uapi/asm-generic/unistd.h @@ -892,9 +892,11 @@ __SYSCALL(__NR_uintr_register_sender, sys_uintr_register_sender) __SYSCALL(__NR_uintr_unregister_sender, sys_uintr_unregister_sender) #define __NR_uintr_wait 454 __SYSCALL(__NR_uintr_wait, sys_uintr_wait) +#define __NR_uintr_event 455 +__SYSCALL(__NR_uintr_event, sys_uintr_event) #undef __NR_syscalls -#define __NR_syscalls 455 +#define __NR_syscalls 456 /* * 32 bit systems traditionally used different diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c index 5d8b92ac197b..36477d52eb73 100644 --- a/kernel/sys_ni.c +++ b/kernel/sys_ni.c @@ -364,6 +364,7 @@ COND_SYSCALL(uintr_create_fd); COND_SYSCALL(uintr_register_sender); COND_SYSCALL(uintr_unregister_sender); COND_SYSCALL(uintr_wait); +COND_SYSCALL(uintr_event); /* * Architecture specific weak syscall entries. diff --git a/scripts/checksyscalls.sh b/scripts/checksyscalls.sh index 0969580d829c..857106a48d2d 100755 --- a/scripts/checksyscalls.sh +++ b/scripts/checksyscalls.sh @@ -210,6 +210,7 @@ cat << EOF #define __IGNORE_uintr_register_sender #define __IGNORE_uintr_unregister_sender #define __IGNORE_uintr_wait +#define __IGNORE_uintr_event /* ... including the "new" 32-bit uid syscalls */ #define __IGNORE_lchown32 |
