xref: /dflybsd-src/share/man/man9/CPUMASK.9 (revision bd929a8f79a00da5969e3660b3100e3258365535)
1*bd929a8fSSascha Wildner.\"
2*bd929a8fSSascha Wildner.\" Copyright (c) 2016 The DragonFly Project.
3*bd929a8fSSascha Wildner.\" All rights reserved.
4*bd929a8fSSascha Wildner.\"
5*bd929a8fSSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
6*bd929a8fSSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
7*bd929a8fSSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
8*bd929a8fSSascha Wildner.\"    notice, this list of conditions and the following disclaimer in
9*bd929a8fSSascha Wildner.\"    the documentation and/or other materials provided with the
10*bd929a8fSSascha Wildner.\"    distribution.
11*bd929a8fSSascha Wildner.\" 3. Neither the name of The DragonFly Project nor the names of its
12*bd929a8fSSascha Wildner.\"    contributors may be used to endorse or promote products derived
13*bd929a8fSSascha Wildner.\"    from this software without specific, prior written permission.
14*bd929a8fSSascha Wildner.\"
15*bd929a8fSSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16*bd929a8fSSascha Wildner.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17*bd929a8fSSascha Wildner.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18*bd929a8fSSascha Wildner.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19*bd929a8fSSascha Wildner.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20*bd929a8fSSascha Wildner.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21*bd929a8fSSascha Wildner.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22*bd929a8fSSascha Wildner.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23*bd929a8fSSascha Wildner.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24*bd929a8fSSascha Wildner.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25*bd929a8fSSascha Wildner.\" SUCH DAMAGE.
26*bd929a8fSSascha Wildner.\"
27*bd929a8fSSascha Wildner.\"
28*bd929a8fSSascha Wildner.Dd July 24, 2016
29*bd929a8fSSascha Wildner.Dt CPUMASK 9
30*bd929a8fSSascha Wildner.Os
31*bd929a8fSSascha Wildner.Sh NAME
32*bd929a8fSSascha Wildner.Nm CPUMASK ,
33*bd929a8fSSascha Wildner.Nm ATOMIC_CPUMASK_COPY ,
34*bd929a8fSSascha Wildner.Nm ATOMIC_CPUMASK_NANDBIT ,
35*bd929a8fSSascha Wildner.Nm ATOMIC_CPUMASK_NANDMASK ,
36*bd929a8fSSascha Wildner.Nm ATOMIC_CPUMASK_ORBIT ,
37*bd929a8fSSascha Wildner.Nm ATOMIC_CPUMASK_ORMASK ,
38*bd929a8fSSascha Wildner.Nm ATOMIC_CPUMASK_TESTANDCLR ,
39*bd929a8fSSascha Wildner.Nm ATOMIC_CPUMASK_TESTANDSET ,
40*bd929a8fSSascha Wildner.Nm BSFCPUMASK ,
41*bd929a8fSSascha Wildner.Nm BSRCPUMASK ,
42*bd929a8fSSascha Wildner.Nm CPUMASK_ADDR ,
43*bd929a8fSSascha Wildner.Nm CPUMASK_ANDBIT ,
44*bd929a8fSSascha Wildner.Nm CPUMASK_ANDMASK ,
45*bd929a8fSSascha Wildner.Nm CPUMASK_ASSALLONES ,
46*bd929a8fSSascha Wildner.Nm CPUMASK_ASSBIT ,
47*bd929a8fSSascha Wildner.Nm CPUMASK_ASSBMASK ,
48*bd929a8fSSascha Wildner.Nm CPUMASK_ASSNBMASK ,
49*bd929a8fSSascha Wildner.Nm CPUMASK_ASSZERO ,
50*bd929a8fSSascha Wildner.Nm CPUMASK_CMPMASKEQ ,
51*bd929a8fSSascha Wildner.Nm CPUMASK_CMPMASKNEQ ,
52*bd929a8fSSascha Wildner.Nm CPUMASK_ISUP ,
53*bd929a8fSSascha Wildner.Nm CPUMASK_LOWMASK ,
54*bd929a8fSSascha Wildner.Nm CPUMASK_NANDBIT ,
55*bd929a8fSSascha Wildner.Nm CPUMASK_NANDMASK ,
56*bd929a8fSSascha Wildner.Nm CPUMASK_ORBIT ,
57*bd929a8fSSascha Wildner.Nm CPUMASK_ORMASK ,
58*bd929a8fSSascha Wildner.Nm CPUMASK_SIMPLE ,
59*bd929a8fSSascha Wildner.Nm CPUMASK_TESTBIT ,
60*bd929a8fSSascha Wildner.Nm CPUMASK_TESTMASK ,
61*bd929a8fSSascha Wildner.Nm CPUMASK_TESTNZERO ,
62*bd929a8fSSascha Wildner.Nm CPUMASK_TESTZERO ,
63*bd929a8fSSascha Wildner.Nm CPUMASK_XORMASK
64*bd929a8fSSascha Wildner.Nd Macros to manipulate cpumask_t fields
65*bd929a8fSSascha Wildner.Sh SYNOPSIS
66*bd929a8fSSascha Wildner.In machine/cpumask.h
67*bd929a8fSSascha Wildner.Fo ATOMIC_CPUMASK_COPY
68*bd929a8fSSascha Wildner.Fa "mask"
69*bd929a8fSSascha Wildner.Fa "val"
70*bd929a8fSSascha Wildner.Fc
71*bd929a8fSSascha Wildner.Fo ATOMIC_CPUMASK_NANDBIT
72*bd929a8fSSascha Wildner.Fa "mask"
73*bd929a8fSSascha Wildner.Fa "i"
74*bd929a8fSSascha Wildner.Fc
75*bd929a8fSSascha Wildner.Fo ATOMIC_CPUMASK_NANDMASK
76*bd929a8fSSascha Wildner.Fa "mask"
77*bd929a8fSSascha Wildner.Fa "val"
78*bd929a8fSSascha Wildner.Fc
79*bd929a8fSSascha Wildner.Fo ATOMIC_CPUMASK_ORBIT
80*bd929a8fSSascha Wildner.Fa "mask"
81*bd929a8fSSascha Wildner.Fa "i"
82*bd929a8fSSascha Wildner.Fc
83*bd929a8fSSascha Wildner.Fo ATOMIC_CPUMASK_ORMASK
84*bd929a8fSSascha Wildner.Fa "mask"
85*bd929a8fSSascha Wildner.Fa "val"
86*bd929a8fSSascha Wildner.Fc
87*bd929a8fSSascha Wildner.Fo ATOMIC_CPUMASK_TESTANDCLR
88*bd929a8fSSascha Wildner.Fa "mask"
89*bd929a8fSSascha Wildner.Fa "i"
90*bd929a8fSSascha Wildner.Fc
91*bd929a8fSSascha Wildner.Fo ATOMIC_CPUMASK_TESTANDSET
92*bd929a8fSSascha Wildner.Fa "mask"
93*bd929a8fSSascha Wildner.Fa "i"
94*bd929a8fSSascha Wildner.Fc
95*bd929a8fSSascha Wildner.Fo BSFCPUMASK
96*bd929a8fSSascha Wildner.Fa "val"
97*bd929a8fSSascha Wildner.Fc
98*bd929a8fSSascha Wildner.Fo BSRCPUMASK
99*bd929a8fSSascha Wildner.Fa "val"
100*bd929a8fSSascha Wildner.Fc
101*bd929a8fSSascha Wildner.Fo CPUMASK_ADDR
102*bd929a8fSSascha Wildner.Fa "mask"
103*bd929a8fSSascha Wildner.Fa "cpu"
104*bd929a8fSSascha Wildner.Fc
105*bd929a8fSSascha Wildner.Fo CPUMASK_ANDBIT
106*bd929a8fSSascha Wildner.Fa "mask"
107*bd929a8fSSascha Wildner.Fa "i"
108*bd929a8fSSascha Wildner.Fc
109*bd929a8fSSascha Wildner.Fo CPUMASK_ANDMASK
110*bd929a8fSSascha Wildner.Fa "mask"
111*bd929a8fSSascha Wildner.Fa "val"
112*bd929a8fSSascha Wildner.Fc
113*bd929a8fSSascha Wildner.Fo CPUMASK_ASSALLONES
114*bd929a8fSSascha Wildner.Fa "mask"
115*bd929a8fSSascha Wildner.Fc
116*bd929a8fSSascha Wildner.Fo CPUMASK_ASSBIT
117*bd929a8fSSascha Wildner.Fa "mask"
118*bd929a8fSSascha Wildner.Fa "i"
119*bd929a8fSSascha Wildner.Fc
120*bd929a8fSSascha Wildner.Fo CPUMASK_ASSBMASK
121*bd929a8fSSascha Wildner.Fa "mask"
122*bd929a8fSSascha Wildner.Fa "i"
123*bd929a8fSSascha Wildner.Fc
124*bd929a8fSSascha Wildner.Fo CPUMASK_ASSNBMASK
125*bd929a8fSSascha Wildner.Fa "mask"
126*bd929a8fSSascha Wildner.Fa "i"
127*bd929a8fSSascha Wildner.Fc
128*bd929a8fSSascha Wildner.Fo CPUMASK_ASSZERO
129*bd929a8fSSascha Wildner.Fa "mask"
130*bd929a8fSSascha Wildner.Fc
131*bd929a8fSSascha Wildner.Fo CPUMASK_CMPMASKEQ
132*bd929a8fSSascha Wildner.Fa "mask1"
133*bd929a8fSSascha Wildner.Fa "mask2"
134*bd929a8fSSascha Wildner.Fc
135*bd929a8fSSascha Wildner.Fo CPUMASK_CMPMASKNEQ
136*bd929a8fSSascha Wildner.Fa "mask1"
137*bd929a8fSSascha Wildner.Fa "mask2"
138*bd929a8fSSascha Wildner.Fc
139*bd929a8fSSascha Wildner.Fo CPUMASK_ISUP
140*bd929a8fSSascha Wildner.Fa "val"
141*bd929a8fSSascha Wildner.Fc
142*bd929a8fSSascha Wildner.Fo CPUMASK_LOWMASK
143*bd929a8fSSascha Wildner.Fa "val"
144*bd929a8fSSascha Wildner.Fc
145*bd929a8fSSascha Wildner.Fo CPUMASK_NANDBIT
146*bd929a8fSSascha Wildner.Fa "mask"
147*bd929a8fSSascha Wildner.Fa "i"
148*bd929a8fSSascha Wildner.Fc
149*bd929a8fSSascha Wildner.Fo CPUMASK_NANDMASK
150*bd929a8fSSascha Wildner.Fa "mask"
151*bd929a8fSSascha Wildner.Fa "val"
152*bd929a8fSSascha Wildner.Fc
153*bd929a8fSSascha Wildner.Fo CPUMASK_ORBIT
154*bd929a8fSSascha Wildner.Fa "mask"
155*bd929a8fSSascha Wildner.Fa "i"
156*bd929a8fSSascha Wildner.Fc
157*bd929a8fSSascha Wildner.Fo CPUMASK_ORMASK
158*bd929a8fSSascha Wildner.Fa "mask"
159*bd929a8fSSascha Wildner.Fa "val"
160*bd929a8fSSascha Wildner.Fc
161*bd929a8fSSascha Wildner.Fo CPUMASK_SIMPLE
162*bd929a8fSSascha Wildner.Fa "cpu"
163*bd929a8fSSascha Wildner.Fc
164*bd929a8fSSascha Wildner.Fo CPUMASK_TESTBIT
165*bd929a8fSSascha Wildner.Fa "val"
166*bd929a8fSSascha Wildner.Fa "i"
167*bd929a8fSSascha Wildner.Fc
168*bd929a8fSSascha Wildner.Fo CPUMASK_TESTMASK
169*bd929a8fSSascha Wildner.Fa "mask1"
170*bd929a8fSSascha Wildner.Fa "mask2"
171*bd929a8fSSascha Wildner.Fc
172*bd929a8fSSascha Wildner.Fo CPUMASK_TESTNZERO
173*bd929a8fSSascha Wildner.Fa "val"
174*bd929a8fSSascha Wildner.Fc
175*bd929a8fSSascha Wildner.Fo CPUMASK_TESTZERO
176*bd929a8fSSascha Wildner.Fa "val"
177*bd929a8fSSascha Wildner.Fc
178*bd929a8fSSascha Wildner.Fo CPUMASK_XORMASK
179*bd929a8fSSascha Wildner.Fa "mask"
180*bd929a8fSSascha Wildner.Fa "val"
181*bd929a8fSSascha Wildner.Fc
182*bd929a8fSSascha Wildner.Sh DESCRIPTION
183*bd929a8fSSascha WildnerThe
184*bd929a8fSSascha Wildner.Nm
185*bd929a8fSSascha Wildnermacros allow to safely manipulate the non standard type CPU bitmasks that uses
186*bd929a8fSSascha Wildner.Dv CPUMASK_ELEMENTS
187*bd929a8fSSascha Wildnerof 64-bit words in
188*bd929a8fSSascha Wildner.Vt cpumask_t
189*bd929a8fSSascha Wildnertype.
190*bd929a8fSSascha Wildner.Pp
191*bd929a8fSSascha WildnerDeclared CPU mask variables can be initialized using one of
192*bd929a8fSSascha Wildner.Dv CPUMASK_INITIALIZER_ALLONES ,
193*bd929a8fSSascha Wildner.Dv CPUMASK_INITIALIZER_ONLYONE
194*bd929a8fSSascha Wildnermacros.
195*bd929a8fSSascha Wildner.Pp
196*bd929a8fSSascha WildnerThe
197*bd929a8fSSascha Wildner.Nm BSFCPUMASK
198*bd929a8fSSascha Wildnerperforms a "bit scan forward" assembler instruction over whole
199*bd929a8fSSascha Wildner.Vt cpumask_t
200*bd929a8fSSascha Wildnertype, while the
201*bd929a8fSSascha Wildner.Nm BSRCPUMASK
202*bd929a8fSSascha Wildnerperforms a "bit scan reverse".
203*bd929a8fSSascha Wildner.Pp
204*bd929a8fSSascha WildnerKeep in mind that macros like
205*bd929a8fSSascha Wildner.Nm CPUMASK_SIMPLE
206*bd929a8fSSascha Wildnermight only work in 64-bit mask range as they are provided as a convenience to
207*bd929a8fSSascha Wildnerbuild more sophisticated macros.
208*bd929a8fSSascha Wildner.Pp
209*bd929a8fSSascha WildnerThe
210*bd929a8fSSascha Wildner.Nm
211*bd929a8fSSascha Wildnermacros with ATOMIC prefix perform
212*bd929a8fSSascha Wildner.Xr atomic 9
213*bd929a8fSSascha Wildneroperations on the given CPU mask.
214*bd929a8fSSascha Wildner.Pp
215*bd929a8fSSascha WildnerWhen adding, modifying or removing CPUMASK macros, it is important to be
216*bd929a8fSSascha Wildneraware that these interfaces may be used by libraries, applications,
217*bd929a8fSSascha Wildnerusers or documentation.
218*bd929a8fSSascha WildnerChanging the
219*bd929a8fSSascha Wildner.Vt cpumask_t
220*bd929a8fSSascha Wildnerlength defined by
221*bd929a8fSSascha Wildner.Dv CPUMASK_ELEMENTS
222*bd929a8fSSascha Wildnerrequires adjustment of both
223*bd929a8fSSascha Wildner.Nm
224*bd929a8fSSascha Wildnermacros and kernel assembly sources because
225*bd929a8fSSascha Wildner.Nm
226*bd929a8fSSascha Wildnerare implemented as non variably-sized macros.
227