diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-09-11 22:34:09 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-09-11 22:34:09 -0400 |
| commit | 01b0c014eeb0bb857a5dc572cd108be7becddfe7 (patch) | |
| tree | d6f1a089081aadb09e66add27f7c5137d076ac80 /include | |
| parent | 3ebb0540c20d6670396ccee9ff6794c095fa9311 (diff) | |
| parent | e527b22c3f63c02832ac4cb8ed0ec3a9b638bbdf (diff) | |
Merge branch 'akpm' (patches from Andrew)
Merge fourth patch-bomb from Andrew Morton:
- sys_membarier syscall
- seq_file interface changes
- a few misc fixups
* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
revert "ocfs2/dlm: use list_for_each_entry instead of list_for_each"
mm/early_ioremap: add explicit #include of asm/early_ioremap.h
fs/seq_file: convert int seq_vprint/seq_printf/etc... returns to void
selftests: enhance membarrier syscall test
selftests: add membarrier syscall test
sys_membarrier(): system-wide memory barrier (generic, x86)
MODSIGN: fix a compilation warning in extract-cert
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/seq_file.h | 19 | ||||
| -rw-r--r-- | include/linux/syscalls.h | 2 | ||||
| -rw-r--r-- | include/uapi/asm-generic/unistd.h | 4 | ||||
| -rw-r--r-- | include/uapi/linux/Kbuild | 1 | ||||
| -rw-r--r-- | include/uapi/linux/membarrier.h | 53 |
5 files changed, 69 insertions, 10 deletions
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index adeadbd6d7bf..dde00defbaa5 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h | |||
| @@ -114,13 +114,18 @@ int seq_open(struct file *, const struct seq_operations *); | |||
| 114 | ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); | 114 | ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); |
| 115 | loff_t seq_lseek(struct file *, loff_t, int); | 115 | loff_t seq_lseek(struct file *, loff_t, int); |
| 116 | int seq_release(struct inode *, struct file *); | 116 | int seq_release(struct inode *, struct file *); |
| 117 | int seq_escape(struct seq_file *, const char *, const char *); | ||
| 118 | int seq_putc(struct seq_file *m, char c); | ||
| 119 | int seq_puts(struct seq_file *m, const char *s); | ||
| 120 | int seq_write(struct seq_file *seq, const void *data, size_t len); | 117 | int seq_write(struct seq_file *seq, const void *data, size_t len); |
| 121 | 118 | ||
| 122 | __printf(2, 3) int seq_printf(struct seq_file *, const char *, ...); | 119 | __printf(2, 0) |
| 123 | __printf(2, 0) int seq_vprintf(struct seq_file *, const char *, va_list args); | 120 | void seq_vprintf(struct seq_file *m, const char *fmt, va_list args); |
| 121 | __printf(2, 3) | ||
| 122 | void seq_printf(struct seq_file *m, const char *fmt, ...); | ||
| 123 | void seq_putc(struct seq_file *m, char c); | ||
| 124 | void seq_puts(struct seq_file *m, const char *s); | ||
| 125 | void seq_put_decimal_ull(struct seq_file *m, char delimiter, | ||
| 126 | unsigned long long num); | ||
| 127 | void seq_put_decimal_ll(struct seq_file *m, char delimiter, long long num); | ||
| 128 | void seq_escape(struct seq_file *m, const char *s, const char *esc); | ||
| 124 | 129 | ||
| 125 | void seq_hex_dump(struct seq_file *m, const char *prefix_str, int prefix_type, | 130 | void seq_hex_dump(struct seq_file *m, const char *prefix_str, int prefix_type, |
| 126 | int rowsize, int groupsize, const void *buf, size_t len, | 131 | int rowsize, int groupsize, const void *buf, size_t len, |
| @@ -138,10 +143,6 @@ int single_release(struct inode *, struct file *); | |||
| 138 | void *__seq_open_private(struct file *, const struct seq_operations *, int); | 143 | void *__seq_open_private(struct file *, const struct seq_operations *, int); |
| 139 | int seq_open_private(struct file *, const struct seq_operations *, int); | 144 | int seq_open_private(struct file *, const struct seq_operations *, int); |
| 140 | int seq_release_private(struct inode *, struct file *); | 145 | int seq_release_private(struct inode *, struct file *); |
| 141 | int seq_put_decimal_ull(struct seq_file *m, char delimiter, | ||
| 142 | unsigned long long num); | ||
| 143 | int seq_put_decimal_ll(struct seq_file *m, char delimiter, | ||
| 144 | long long num); | ||
| 145 | 146 | ||
| 146 | static inline struct user_namespace *seq_user_ns(struct seq_file *seq) | 147 | static inline struct user_namespace *seq_user_ns(struct seq_file *seq) |
| 147 | { | 148 | { |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 08001317aee7..a460e2ef2843 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -885,4 +885,6 @@ asmlinkage long sys_execveat(int dfd, const char __user *filename, | |||
| 885 | const char __user *const __user *argv, | 885 | const char __user *const __user *argv, |
| 886 | const char __user *const __user *envp, int flags); | 886 | const char __user *const __user *envp, int flags); |
| 887 | 887 | ||
| 888 | asmlinkage long sys_membarrier(int cmd, int flags); | ||
| 889 | |||
| 888 | #endif | 890 | #endif |
diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h index e016bd9b1a04..8da542a2874d 100644 --- a/include/uapi/asm-generic/unistd.h +++ b/include/uapi/asm-generic/unistd.h | |||
| @@ -709,9 +709,11 @@ __SYSCALL(__NR_memfd_create, sys_memfd_create) | |||
| 709 | __SYSCALL(__NR_bpf, sys_bpf) | 709 | __SYSCALL(__NR_bpf, sys_bpf) |
| 710 | #define __NR_execveat 281 | 710 | #define __NR_execveat 281 |
| 711 | __SC_COMP(__NR_execveat, sys_execveat, compat_sys_execveat) | 711 | __SC_COMP(__NR_execveat, sys_execveat, compat_sys_execveat) |
| 712 | #define __NR_membarrier 282 | ||
| 713 | __SYSCALL(__NR_membarrier, sys_membarrier) | ||
| 712 | 714 | ||
| 713 | #undef __NR_syscalls | 715 | #undef __NR_syscalls |
| 714 | #define __NR_syscalls 282 | 716 | #define __NR_syscalls 283 |
| 715 | 717 | ||
| 716 | /* | 718 | /* |
| 717 | * All syscalls below here should go away really, | 719 | * All syscalls below here should go away really, |
diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild index 70ff1d9abf0d..f7b2db44eb4b 100644 --- a/include/uapi/linux/Kbuild +++ b/include/uapi/linux/Kbuild | |||
| @@ -252,6 +252,7 @@ header-y += mdio.h | |||
| 252 | header-y += media.h | 252 | header-y += media.h |
| 253 | header-y += media-bus-format.h | 253 | header-y += media-bus-format.h |
| 254 | header-y += mei.h | 254 | header-y += mei.h |
| 255 | header-y += membarrier.h | ||
| 255 | header-y += memfd.h | 256 | header-y += memfd.h |
| 256 | header-y += mempolicy.h | 257 | header-y += mempolicy.h |
| 257 | header-y += meye.h | 258 | header-y += meye.h |
diff --git a/include/uapi/linux/membarrier.h b/include/uapi/linux/membarrier.h new file mode 100644 index 000000000000..e0b108bd2624 --- /dev/null +++ b/include/uapi/linux/membarrier.h | |||
| @@ -0,0 +1,53 @@ | |||
| 1 | #ifndef _UAPI_LINUX_MEMBARRIER_H | ||
| 2 | #define _UAPI_LINUX_MEMBARRIER_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * linux/membarrier.h | ||
| 6 | * | ||
| 7 | * membarrier system call API | ||
| 8 | * | ||
| 9 | * Copyright (c) 2010, 2015 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | ||
| 10 | * | ||
| 11 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 12 | * of this software and associated documentation files (the "Software"), to deal | ||
| 13 | * in the Software without restriction, including without limitation the rights | ||
| 14 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 15 | * copies of the Software, and to permit persons to whom the Software is | ||
| 16 | * furnished to do so, subject to the following conditions: | ||
| 17 | * | ||
| 18 | * The above copyright notice and this permission notice shall be included in | ||
| 19 | * all copies or substantial portions of the Software. | ||
| 20 | * | ||
| 21 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 22 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 23 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 24 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 25 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 26 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| 27 | * SOFTWARE. | ||
| 28 | */ | ||
| 29 | |||
| 30 | /** | ||
| 31 | * enum membarrier_cmd - membarrier system call command | ||
| 32 | * @MEMBARRIER_CMD_QUERY: Query the set of supported commands. It returns | ||
| 33 | * a bitmask of valid commands. | ||
| 34 | * @MEMBARRIER_CMD_SHARED: Execute a memory barrier on all running threads. | ||
| 35 | * Upon return from system call, the caller thread | ||
| 36 | * is ensured that all running threads have passed | ||
| 37 | * through a state where all memory accesses to | ||
| 38 | * user-space addresses match program order between | ||
| 39 | * entry to and return from the system call | ||
| 40 | * (non-running threads are de facto in such a | ||
| 41 | * state). This covers threads from all processes | ||
| 42 | * running on the system. This command returns 0. | ||
| 43 | * | ||
| 44 | * Command to be passed to the membarrier system call. The commands need to | ||
| 45 | * be a single bit each, except for MEMBARRIER_CMD_QUERY which is assigned to | ||
| 46 | * the value 0. | ||
| 47 | */ | ||
| 48 | enum membarrier_cmd { | ||
| 49 | MEMBARRIER_CMD_QUERY = 0, | ||
| 50 | MEMBARRIER_CMD_SHARED = (1 << 0), | ||
| 51 | }; | ||
| 52 | |||
| 53 | #endif /* _UAPI_LINUX_MEMBARRIER_H */ | ||
