~ [ 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 ] ~

  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_GLOBAL:  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  * @MEMBARRIER_CMD_GLOBAL_EXPEDITED:
 44  *                          Execute a memory barrier on all running threads
 45  *                          of all processes which previously registered
 46  *                          with MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED.
 47  *                          Upon return from system call, the caller thread
 48  *                          is ensured that all running threads have passed
 49  *                          through a state where all memory accesses to
 50  *                          user-space addresses match program order between
 51  *                          entry to and return from the system call
 52  *                          (non-running threads are de facto in such a
 53  *                          state). This only covers threads from processes
 54  *                          which registered with
 55  *                          MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED.
 56  *                          This command returns 0. Given that
 57  *                          registration is about the intent to receive
 58  *                          the barriers, it is valid to invoke
 59  *                          MEMBARRIER_CMD_GLOBAL_EXPEDITED from a
 60  *                          non-registered process.
 61  * @MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED:
 62  *                          Register the process intent to receive
 63  *                          MEMBARRIER_CMD_GLOBAL_EXPEDITED memory
 64  *                          barriers. Always returns 0.
 65  * @MEMBARRIER_CMD_PRIVATE_EXPEDITED:
 66  *                          Execute a memory barrier on each running
 67  *                          thread belonging to the same process as the current
 68  *                          thread. Upon return from system call, the
 69  *                          caller thread is ensured that all its running
 70  *                          threads siblings have passed through a state
 71  *                          where all memory accesses to user-space
 72  *                          addresses match program order between entry
 73  *                          to and return from the system call
 74  *                          (non-running threads are de facto in such a
 75  *                          state). This only covers threads from the
 76  *                          same process as the caller thread. This
 77  *                          command returns 0 on success. The
 78  *                          "expedited" commands complete faster than
 79  *                          the non-expedited ones, they never block,
 80  *                          but have the downside of causing extra
 81  *                          overhead. A process needs to register its
 82  *                          intent to use the private expedited command
 83  *                          prior to using it, otherwise this command
 84  *                          returns -EPERM.
 85  * @MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED:
 86  *                          Register the process intent to use
 87  *                          MEMBARRIER_CMD_PRIVATE_EXPEDITED. Always
 88  *                          returns 0.
 89  * @MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE:
 90  *                          In addition to provide memory ordering
 91  *                          guarantees described in
 92  *                          MEMBARRIER_CMD_PRIVATE_EXPEDITED, ensure
 93  *                          the caller thread, upon return from system
 94  *                          call, that all its running threads siblings
 95  *                          have executed a core serializing
 96  *                          instruction. (architectures are required to
 97  *                          guarantee that non-running threads issue
 98  *                          core serializing instructions before they
 99  *                          resume user-space execution). This only
100  *                          covers threads from the same process as the
101  *                          caller thread. This command returns 0 on
102  *                          success. The "expedited" commands complete
103  *                          faster than the non-expedited ones, they
104  *                          never block, but have the downside of
105  *                          causing extra overhead. If this command is
106  *                          not implemented by an architecture, -EINVAL
107  *                          is returned. A process needs to register its
108  *                          intent to use the private expedited sync
109  *                          core command prior to using it, otherwise
110  *                          this command returns -EPERM.
111  * @MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE:
112  *                          Register the process intent to use
113  *                          MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE.
114  *                          If this command is not implemented by an
115  *                          architecture, -EINVAL is returned.
116  *                          Returns 0 on success.
117  * @MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ:
118  *                          Ensure the caller thread, upon return from
119  *                          system call, that all its running thread
120  *                          siblings have any currently running rseq
121  *                          critical sections restarted if @flags
122  *                          parameter is 0; if @flags parameter is
123  *                          MEMBARRIER_CMD_FLAG_CPU,
124  *                          then this operation is performed only
125  *                          on CPU indicated by @cpu_id. If this command is
126  *                          not implemented by an architecture, -EINVAL
127  *                          is returned. A process needs to register its
128  *                          intent to use the private expedited rseq
129  *                          command prior to using it, otherwise
130  *                          this command returns -EPERM.
131  * @MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ:
132  *                          Register the process intent to use
133  *                          MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ.
134  *                          If this command is not implemented by an
135  *                          architecture, -EINVAL is returned.
136  *                          Returns 0 on success.
137  * @MEMBARRIER_CMD_SHARED:
138  *                          Alias to MEMBARRIER_CMD_GLOBAL. Provided for
139  *                          header backward compatibility.
140  * @MEMBARRIER_CMD_GET_REGISTRATIONS:
141  *                          Returns a bitmask of previously issued
142  *                          registration commands.
143  *
144  * Command to be passed to the membarrier system call. The commands need to
145  * be a single bit each, except for MEMBARRIER_CMD_QUERY which is assigned to
146  * the value 0.
147  */
148 enum membarrier_cmd {
149         MEMBARRIER_CMD_QUERY                                    = 0,
150         MEMBARRIER_CMD_GLOBAL                                   = (1 << 0),
151         MEMBARRIER_CMD_GLOBAL_EXPEDITED                         = (1 << 1),
152         MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED                = (1 << 2),
153         MEMBARRIER_CMD_PRIVATE_EXPEDITED                        = (1 << 3),
154         MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED               = (1 << 4),
155         MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE              = (1 << 5),
156         MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE     = (1 << 6),
157         MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ                   = (1 << 7),
158         MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ          = (1 << 8),
159         MEMBARRIER_CMD_GET_REGISTRATIONS                        = (1 << 9),
160 
161         /* Alias for header backward compatibility. */
162         MEMBARRIER_CMD_SHARED                   = MEMBARRIER_CMD_GLOBAL,
163 };
164 
165 enum membarrier_cmd_flag {
166         MEMBARRIER_CMD_FLAG_CPU         = (1 << 0),
167 };
168 
169 #endif /* _UAPI_LINUX_MEMBARRIER_H */
170 

~ [ 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