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