~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/uapi/linux/membarrier.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /include/uapi/linux/membarrier.h (Version linux-6.12-rc7) and /include/uapi/linux/membarrier.h (Version linux-6.0.19)


  1 #ifndef _UAPI_LINUX_MEMBARRIER_H                    1 #ifndef _UAPI_LINUX_MEMBARRIER_H
  2 #define _UAPI_LINUX_MEMBARRIER_H                    2 #define _UAPI_LINUX_MEMBARRIER_H
  3                                                     3 
  4 /*                                                  4 /*
  5  * linux/membarrier.h                               5  * linux/membarrier.h
  6  *                                                  6  *
  7  * membarrier system call API                       7  * membarrier system call API
  8  *                                                  8  *
  9  * Copyright (c) 2010, 2015 Mathieu Desnoyers       9  * Copyright (c) 2010, 2015 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
 10  *                                                 10  *
 11  * Permission is hereby granted, free of charg     11  * Permission is hereby granted, free of charge, to any person obtaining a copy
 12  * of this software and associated documentati     12  * of this software and associated documentation files (the "Software"), to deal
 13  * in the Software without restriction, includ     13  * in the Software without restriction, including without limitation the rights
 14  * to use, copy, modify, merge, publish, distr     14  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 15  * copies of the Software, and to permit perso     15  * copies of the Software, and to permit persons to whom the Software is
 16  * furnished to do so, subject to the followin     16  * furnished to do so, subject to the following conditions:
 17  *                                                 17  *
 18  * The above copyright notice and this permiss     18  * The above copyright notice and this permission notice shall be included in
 19  * all copies or substantial portions of the S     19  * all copies or substantial portions of the Software.
 20  *                                                 20  *
 21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT W     21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 22  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE W     22  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 23  * FITNESS FOR A PARTICULAR PURPOSE AND NONINF     23  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 24  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR      24  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 25  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT     25  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 26  * OUT OF OR IN CONNECTION WITH THE SOFTWARE O     26  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 27  * SOFTWARE.                                       27  * SOFTWARE.
 28  */                                                28  */
 29                                                    29 
 30 /**                                                30 /**
 31  * enum membarrier_cmd - membarrier system cal     31  * enum membarrier_cmd - membarrier system call command
 32  * @MEMBARRIER_CMD_QUERY:   Query the set of s     32  * @MEMBARRIER_CMD_QUERY:   Query the set of supported commands. It returns
 33  *                          a bitmask of valid     33  *                          a bitmask of valid commands.
 34  * @MEMBARRIER_CMD_GLOBAL:  Execute a memory b     34  * @MEMBARRIER_CMD_GLOBAL:  Execute a memory barrier on all running threads.
 35  *                          Upon return from s     35  *                          Upon return from system call, the caller thread
 36  *                          is ensured that al     36  *                          is ensured that all running threads have passed
 37  *                          through a state wh     37  *                          through a state where all memory accesses to
 38  *                          user-space address     38  *                          user-space addresses match program order between
 39  *                          entry to and retur     39  *                          entry to and return from the system call
 40  *                          (non-running threa     40  *                          (non-running threads are de facto in such a
 41  *                          state). This cover     41  *                          state). This covers threads from all processes
 42  *                          running on the sys     42  *                          running on the system. This command returns 0.
 43  * @MEMBARRIER_CMD_GLOBAL_EXPEDITED:               43  * @MEMBARRIER_CMD_GLOBAL_EXPEDITED:
 44  *                          Execute a memory b     44  *                          Execute a memory barrier on all running threads
 45  *                          of all processes w     45  *                          of all processes which previously registered
 46  *                          with MEMBARRIER_CM     46  *                          with MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED.
 47  *                          Upon return from s     47  *                          Upon return from system call, the caller thread
 48  *                          is ensured that al     48  *                          is ensured that all running threads have passed
 49  *                          through a state wh     49  *                          through a state where all memory accesses to
 50  *                          user-space address     50  *                          user-space addresses match program order between
 51  *                          entry to and retur     51  *                          entry to and return from the system call
 52  *                          (non-running threa     52  *                          (non-running threads are de facto in such a
 53  *                          state). This only      53  *                          state). This only covers threads from processes
 54  *                          which registered w     54  *                          which registered with
 55  *                          MEMBARRIER_CMD_REG     55  *                          MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED.
 56  *                          This command retur     56  *                          This command returns 0. Given that
 57  *                          registration is ab     57  *                          registration is about the intent to receive
 58  *                          the barriers, it i     58  *                          the barriers, it is valid to invoke
 59  *                          MEMBARRIER_CMD_GLO     59  *                          MEMBARRIER_CMD_GLOBAL_EXPEDITED from a
 60  *                          non-registered pro     60  *                          non-registered process.
 61  * @MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED:      61  * @MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED:
 62  *                          Register the proce     62  *                          Register the process intent to receive
 63  *                          MEMBARRIER_CMD_GLO     63  *                          MEMBARRIER_CMD_GLOBAL_EXPEDITED memory
 64  *                          barriers. Always r     64  *                          barriers. Always returns 0.
 65  * @MEMBARRIER_CMD_PRIVATE_EXPEDITED:              65  * @MEMBARRIER_CMD_PRIVATE_EXPEDITED:
 66  *                          Execute a memory b     66  *                          Execute a memory barrier on each running
 67  *                          thread belonging t     67  *                          thread belonging to the same process as the current
 68  *                          thread. Upon retur     68  *                          thread. Upon return from system call, the
 69  *                          caller thread is e     69  *                          caller thread is ensured that all its running
 70  *                          threads siblings h     70  *                          threads siblings have passed through a state
 71  *                          where all memory a     71  *                          where all memory accesses to user-space
 72  *                          addresses match pr     72  *                          addresses match program order between entry
 73  *                          to and return from     73  *                          to and return from the system call
 74  *                          (non-running threa     74  *                          (non-running threads are de facto in such a
 75  *                          state). This only      75  *                          state). This only covers threads from the
 76  *                          same process as th     76  *                          same process as the caller thread. This
 77  *                          command returns 0      77  *                          command returns 0 on success. The
 78  *                          "expedited" comman     78  *                          "expedited" commands complete faster than
 79  *                          the non-expedited      79  *                          the non-expedited ones, they never block,
 80  *                          but have the downs     80  *                          but have the downside of causing extra
 81  *                          overhead. A proces     81  *                          overhead. A process needs to register its
 82  *                          intent to use the      82  *                          intent to use the private expedited command
 83  *                          prior to using it,     83  *                          prior to using it, otherwise this command
 84  *                          returns -EPERM.        84  *                          returns -EPERM.
 85  * @MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED:     85  * @MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED:
 86  *                          Register the proce     86  *                          Register the process intent to use
 87  *                          MEMBARRIER_CMD_PRI     87  *                          MEMBARRIER_CMD_PRIVATE_EXPEDITED. Always
 88  *                          returns 0.             88  *                          returns 0.
 89  * @MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE     89  * @MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE:
 90  *                          In addition to pro     90  *                          In addition to provide memory ordering
 91  *                          guarantees describ     91  *                          guarantees described in
 92  *                          MEMBARRIER_CMD_PRI     92  *                          MEMBARRIER_CMD_PRIVATE_EXPEDITED, ensure
 93  *                          the caller thread,     93  *                          the caller thread, upon return from system
 94  *                          call, that all its     94  *                          call, that all its running threads siblings
 95  *                          have executed a co     95  *                          have executed a core serializing
 96  *                          instruction. (arch     96  *                          instruction. (architectures are required to
 97  *                          guarantee that non     97  *                          guarantee that non-running threads issue
 98  *                          core serializing i     98  *                          core serializing instructions before they
 99  *                          resume user-space      99  *                          resume user-space execution). This only
100  *                          covers threads fro    100  *                          covers threads from the same process as the
101  *                          caller thread. Thi    101  *                          caller thread. This command returns 0 on
102  *                          success. The "expe    102  *                          success. The "expedited" commands complete
103  *                          faster than the no    103  *                          faster than the non-expedited ones, they
104  *                          never block, but h    104  *                          never block, but have the downside of
105  *                          causing extra over    105  *                          causing extra overhead. If this command is
106  *                          not implemented by    106  *                          not implemented by an architecture, -EINVAL
107  *                          is returned. A pro    107  *                          is returned. A process needs to register its
108  *                          intent to use the     108  *                          intent to use the private expedited sync
109  *                          core command prior    109  *                          core command prior to using it, otherwise
110  *                          this command retur    110  *                          this command returns -EPERM.
111  * @MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_    111  * @MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE:
112  *                          Register the proce    112  *                          Register the process intent to use
113  *                          MEMBARRIER_CMD_PRI    113  *                          MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE.
114  *                          If this command is    114  *                          If this command is not implemented by an
115  *                          architecture, -EIN    115  *                          architecture, -EINVAL is returned.
116  *                          Returns 0 on succe    116  *                          Returns 0 on success.
117  * @MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ:        117  * @MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ:
118  *                          Ensure the caller     118  *                          Ensure the caller thread, upon return from
119  *                          system call, that     119  *                          system call, that all its running thread
120  *                          siblings have any     120  *                          siblings have any currently running rseq
121  *                          critical sections     121  *                          critical sections restarted if @flags
122  *                          parameter is 0; if    122  *                          parameter is 0; if @flags parameter is
123  *                          MEMBARRIER_CMD_FLA    123  *                          MEMBARRIER_CMD_FLAG_CPU,
124  *                          then this operatio    124  *                          then this operation is performed only
125  *                          on CPU indicated b    125  *                          on CPU indicated by @cpu_id. If this command is
126  *                          not implemented by    126  *                          not implemented by an architecture, -EINVAL
127  *                          is returned. A pro    127  *                          is returned. A process needs to register its
128  *                          intent to use the     128  *                          intent to use the private expedited rseq
129  *                          command prior to u    129  *                          command prior to using it, otherwise
130  *                          this command retur    130  *                          this command returns -EPERM.
131  * @MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_    131  * @MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ:
132  *                          Register the proce    132  *                          Register the process intent to use
133  *                          MEMBARRIER_CMD_PRI    133  *                          MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ.
134  *                          If this command is    134  *                          If this command is not implemented by an
135  *                          architecture, -EIN    135  *                          architecture, -EINVAL is returned.
136  *                          Returns 0 on succe    136  *                          Returns 0 on success.
137  * @MEMBARRIER_CMD_SHARED:                        137  * @MEMBARRIER_CMD_SHARED:
138  *                          Alias to MEMBARRIE    138  *                          Alias to MEMBARRIER_CMD_GLOBAL. Provided for
139  *                          header backward co    139  *                          header backward compatibility.
140  * @MEMBARRIER_CMD_GET_REGISTRATIONS:          << 
141  *                          Returns a bitmask  << 
142  *                          registration comma << 
143  *                                                140  *
144  * Command to be passed to the membarrier syst    141  * Command to be passed to the membarrier system call. The commands need to
145  * be a single bit each, except for MEMBARRIER    142  * be a single bit each, except for MEMBARRIER_CMD_QUERY which is assigned to
146  * the value 0.                                   143  * the value 0.
147  */                                               144  */
148 enum membarrier_cmd {                             145 enum membarrier_cmd {
149         MEMBARRIER_CMD_QUERY                      146         MEMBARRIER_CMD_QUERY                                    = 0,
150         MEMBARRIER_CMD_GLOBAL                     147         MEMBARRIER_CMD_GLOBAL                                   = (1 << 0),
151         MEMBARRIER_CMD_GLOBAL_EXPEDITED           148         MEMBARRIER_CMD_GLOBAL_EXPEDITED                         = (1 << 1),
152         MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDIT    149         MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED                = (1 << 2),
153         MEMBARRIER_CMD_PRIVATE_EXPEDITED          150         MEMBARRIER_CMD_PRIVATE_EXPEDITED                        = (1 << 3),
154         MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDI    151         MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED               = (1 << 4),
155         MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_    152         MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE              = (1 << 5),
156         MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDI    153         MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE     = (1 << 6),
157         MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ     154         MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ                   = (1 << 7),
158         MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDI    155         MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ          = (1 << 8),
159         MEMBARRIER_CMD_GET_REGISTRATIONS       << 
160                                                   156 
161         /* Alias for header backward compatibi    157         /* Alias for header backward compatibility. */
162         MEMBARRIER_CMD_SHARED                     158         MEMBARRIER_CMD_SHARED                   = MEMBARRIER_CMD_GLOBAL,
163 };                                                159 };
164                                                   160 
165 enum membarrier_cmd_flag {                        161 enum membarrier_cmd_flag {
166         MEMBARRIER_CMD_FLAG_CPU         = (1 <    162         MEMBARRIER_CMD_FLAG_CPU         = (1 << 0),
167 };                                                163 };
168                                                   164 
169 #endif /* _UAPI_LINUX_MEMBARRIER_H */             165 #endif /* _UAPI_LINUX_MEMBARRIER_H */
170                                                   166 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php