Path: blob/main/sys/compat/linuxkpi/common/include/linux/cpu.h
39604 views
/*-1* SPDX-License-Identifier: BSD-2-Clause2*3* Copyright (c) 2020-2021 The FreeBSD Foundation4*5* This software was developed by Björn Zeeb under sponsorship from6* the FreeBSD Foundation.7*8* Redistribution and use in source and binary forms, with or without9* modification, are permitted provided that the following conditions10* are met:11* 1. Redistributions of source code must retain the above copyright12* notice, this list of conditions and the following disclaimer.13* 2. Redistributions in binary form must reproduce the above copyright14* notice, this list of conditions and the following disclaimer in the15* documentation and/or other materials provided with the distribution.16*17* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND18* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE19* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE20* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE21* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL22* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS23* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)24* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT25* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY26* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF27* SUCH DAMAGE.28*/2930#ifndef _LINUXKPI_LINUX_CPU_H31#define _LINUXKPI_LINUX_CPU_H3233#include <sys/types.h>34#include <sys/systm.h>35#include <sys/cpuset.h>36#include <sys/smp.h>37#include <linux/compiler.h>38#include <linux/slab.h>3940typedef cpuset_t cpumask_t;4142extern cpumask_t cpu_online_mask;4344cpumask_t *lkpi_get_static_single_cpu_mask(int);4546static __inline int47cpumask_next(int cpuid, cpumask_t mask)48{4950/*51* -1 can be an input to cpuid according to logic in drivers52* but is never a valid cpuid in a set!53*/54KASSERT((cpuid >= -1 && cpuid <= MAXCPU), ("%s: invalid cpuid %d\n",55__func__, cpuid));56KASSERT(!CPU_EMPTY(&mask), ("%s: empty CPU mask", __func__));5758do {59cpuid++;60#ifdef SMP61if (cpuid > mp_maxid)62#endif63cpuid = 0;64} while (!CPU_ISSET(cpuid, &mask));65return (cpuid);66}6768static __inline void69cpumask_set_cpu(int cpu, cpumask_t *mask)70{7172CPU_SET(cpu, mask);73}7475#define cpumask_of(_cpu) (lkpi_get_static_single_cpu_mask(_cpu))7677#endif /* _LINUXKPI_LINUX_CPU_H */787980