Changeset View
Changeset View
Standalone View
Standalone View
sys/compat/linuxkpi/common/include/linux/page-flags.h
- This file was copied from sys/compat/linuxkpi/common/include/linux/smp.h.
/*- | /*- | ||||
* Copyright (c) 2017 Mark Johnston <markj@FreeBSD.org> | * SPDX-License-Identifier: BSD-2-Clause-FreeBSD | ||||
* | * | ||||
* Copyright (c) 2010 Isilon Systems, Inc. | |||||
* Copyright (c) 2016 Matthew Macy (mmacy@mattmacy.io) | |||||
* Copyright (c) 2017 Mellanox Technologies, Ltd. | |||||
* Copyright (c) 2021 Vladimir Kondratyev <wulf@FreeBSD.org> | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
* modification, are permitted provided that the following conditions are | * modification, are permitted provided that the following conditions are | ||||
* met: | * met: | ||||
* 1. Redistributions of source code must retain the above copyright | * 1. Redistributions of source code must retain the above copyright | ||||
* notice, this list of conditions and the following disclaimer. | * notice, this list of conditions and the following disclaimer. | ||||
* 2. Redistributions in binary form must reproduce the above copyright | * 2. Redistributions in binary form must reproduce the above copyright | ||||
* notice, this list of conditions and the following disclaimer in | * notice, this list of conditions and the following disclaimer in | ||||
* the documentation and/or other materials provided with the | * the documentation and/or other materials provided with the | ||||
* distribution. | * distribution. | ||||
* | * | ||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
* SUCH DAMAGE. | * SUCH DAMAGE. | ||||
* | |||||
* $FreeBSD$ | |||||
*/ | */ | ||||
#ifndef _LINUXKPI_LINUX_SMP_H_ | #ifndef _LINUXKPI_LINUX_PAGEFLAGS_H_ | ||||
#define _LINUXKPI_LINUX_SMP_H_ | #define _LINUXKPI_LINUX_PAGEFLAGS_H_ | ||||
/* | #define PageHighMem(p) (0) | ||||
* Important note about the use of the function provided below: | |||||
* | |||||
* The callback function passed to on_each_cpu() is called from a | |||||
* so-called critical section, and if you need a mutex you will have | |||||
* to rewrite the code to use native FreeBSD mtx spinlocks instead of | |||||
* the spinlocks provided by the LinuxKPI! Be very careful to not call | |||||
* any LinuxKPI functions inside the on_each_cpu()'s callback | |||||
* function, because they may sleep, unlike in native Linux. | |||||
* | |||||
* Enabling witness(4) when testing, can catch such issues. | |||||
*/ | |||||
#define on_each_cpu(cb, data, wait) ({ \ | |||||
CTASSERT(wait); \ | |||||
linux_on_each_cpu(cb, data); \ | |||||
}) | |||||
extern int linux_on_each_cpu(void (*)(void *), void *); | #endif /* _LINUXKPI_LINUX_PAGEFLAGS_H_ */ | ||||
#endif /* _LINUXKPI_LINUX_SMP_H_ */ |