From bd42d3870f6a1bf8cabf93fb3f3d4a25910307bd Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Thu, 20 Nov 2025 18:47:59 -0500 Subject: 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 --- sys/arch/amd64/conf/link.ld | 4 ++++ sys/inc/sys/cdefs.h | 6 ++++++ sys/inc/sys/param.h | 5 +++++ 3 files changed, 15 insertions(+) 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 + #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 +/* 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)) -- cgit v1.2.3