diff options
author | mjg <mjg@FreeBSD.org> | 2017-03-14 20:39:06 +0000 |
---|---|---|
committer | mjg <mjg@FreeBSD.org> | 2017-03-14 20:39:06 +0000 |
commit | 57f28a25af7dd32fc8adea80c5ebb2b237cc86a6 (patch) | |
tree | 737cb08dda40f605ac675a646c2cc84187887b9a /sys/sys | |
parent | 8c08bfe0a237cbc568a58adcefa2b61e7a46fa9d (diff) | |
download | FreeBSD-src-57f28a25af7dd32fc8adea80c5ebb2b237cc86a6.zip FreeBSD-src-57f28a25af7dd32fc8adea80c5ebb2b237cc86a6.tar.gz |
MFC r312888:
Introduce __read_mostly and __exclusive_cache_line macros.
The intended use is to annotate frequently used globals which either rarely
change (and thus can be grouped in the same cacheline) or are an atomic counter
(which means it may benefit from being the only variable in the cacheline).
Linker script support is provided only for amd64. Architectures without it risk
having other variables put in, i.e. as if they were not annotated. This is
harmless from correctness point of view.
Diffstat (limited to 'sys/sys')
-rw-r--r-- | sys/sys/systm.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/sys/systm.h b/sys/sys/systm.h index 5421b12..02c5db8 100644 --- a/sys/sys/systm.h +++ b/sys/sys/systm.h @@ -131,6 +131,12 @@ void kassert_panic(const char *fmt, ...) __printflike(1, 2); #define SCHEDULER_STOPPED() __predict_false(curthread->td_stopsched) /* + * Align variables. + */ +#define __read_mostly __section(".data.read_mostly") +#define __exclusive_cache_line __aligned(CACHE_LINE_SIZE) \ + __section(".data.exclusive_cache_line") +/* * XXX the hints declarations are even more misplaced than most declarations * in this file, since they are needed in one file (per arch) and only used * in two files. |