summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-11-20 18:47:59 -0500
committerIan Moffett <ian@osmora.org>2025-11-20 18:47:59 -0500
commitbd42d3870f6a1bf8cabf93fb3f3d4a25910307bd (patch)
treeb90fe4efdc875b77b4f9d92971483b6ffecf3b49 /sys
parent93a0bc5b7f6ca676fcae10df0a172bcbaca24c2f (diff)
kern/amd64+sys: Add cacheline alignment macro
Cacheline alignment is a mitigation against false sharing imposed by locality of a shared resource. Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/amd64/conf/link.ld4
-rw-r--r--sys/inc/sys/cdefs.h6
-rw-r--r--sys/inc/sys/param.h5
3 files changed, 15 insertions, 0 deletions
diff --git a/sys/arch/amd64/conf/link.ld b/sys/arch/amd64/conf/link.ld
index 9ae1a01..5b42aeb 100644
--- a/sys/arch/amd64/conf/link.ld
+++ b/sys/arch/amd64/conf/link.ld
@@ -33,6 +33,10 @@ SECTIONS
*(.data)
} :data
+ .cacheline_aligned : ALIGN(64) {
+ *(.cacheline_aligned)
+ }
+
.bss : {
*(COMMON)
*(.bss .bss.*)
diff --git a/sys/inc/sys/cdefs.h b/sys/inc/sys/cdefs.h
index 1da0392..43310f7 100644
--- a/sys/inc/sys/cdefs.h
+++ b/sys/inc/sys/cdefs.h
@@ -30,6 +30,8 @@
#ifndef _SYS_CDEFS_H_
#define _SYS_CDEFS_H_ 1
+#include <sys/param.h>
+
#define __asmv __asm__ __volatile__
#define __weak __attribute__((__weak__))
#define __strong __attribute__((__strong__))
@@ -48,4 +50,8 @@
#define __barrier() __asmv("" ::: "memory")
#define __static_assert _Static_assert
+#define __cacheline_aligned \
+ __aligned(COHERENCY_UNIT) \
+ __section(".cacheline_aligned")
+
#endif /* !_SYS_CDEFS_H_ */
diff --git a/sys/inc/sys/param.h b/sys/inc/sys/param.h
index 96e270e..f8e939e 100644
--- a/sys/inc/sys/param.h
+++ b/sys/inc/sys/param.h
@@ -32,6 +32,11 @@
#include <sys/types.h>
+/* XXX: Should be arch overridable */
+#if !defined(COHERENCY_UNIT)
+#define COHERENCY_UNIT 64
+#endif /* !COHERENCY_UNIT */
+
/* Bit related macros */
#define ISSET(v, f) ((v) & (f))
#define BIT(n) (1ULL << (n))