* [PATCH v5 0/4] Align atomic storage
@ 2025-12-16 6:31 Finn Thain
2025-12-16 6:31 ` [PATCH v5 4/4] atomic: Add option for weaker alignment check Finn Thain
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Finn Thain @ 2025-12-16 6:31 UTC (permalink / raw)
To: Peter Zijlstra, Will Deacon
Cc: Andrew Morton, Andrii Nakryiko, Arnd Bergmann, Alexei Starovoitov,
Boqun Feng, bpf, Rich Felker, Daniel Borkmann, Dinh Nguyen,
Eduard Zingerman, Gary Guo, Geert Uytterhoeven,
John Paul Adrian Glaubitz, Guo Ren, Hao Luo, John Fastabend,
Jiri Olsa, Jonas Bonn, KP Singh, linux-arch, linux-csky,
linux-kernel, linux-m68k, linux-openrisc, linux-sh, Mark Rutland,
Martin KaFai Lau, Stanislav Fomichev, Stafford Horne, Song Liu,
Stefan Kristiansson, Yonghong Song, Yoshinori Sato
This series adds the __aligned attribute to atomic_t and atomic64_t
definitions in include/linux and include/asm-generic (respectively)
to get natural alignment of both types on csky, m68k, microblaze,
nios2, openrisc and sh.
This series also adds Kconfig options to enable a new run-time warning
to help reveal misaligned atomic accesses on platforms which don't
trap that.
The performance impact is expected to vary across platforms and workloads.
The measurements I made on m68k show that some workloads run faster and
others slower.
---
Changed since v4:
- Dropped parisc header file patch as it's been merged already.
- Submitted as PATCH instead of RFC.
Changed since v3:
- Rebased on v6.17.
- New patch to resolve header dependency issue on parisc.
- Dropped documentation patch.
Changed since v2:
- Specify natural alignment for atomic64_t.
- CONFIG_DEBUG_ATOMIC checks for natural alignment again.
- New patch to add weakened alignment check.
- New patch for explicit alignment in BPF header.
---
Finn Thain (3):
bpf: Explicitly align bpf_res_spin_lock
atomic: Specify alignment for atomic_t and atomic64_t
atomic: Add option for weaker alignment check
Peter Zijlstra (1):
atomic: Add alignment check to instrumented atomic operations
include/asm-generic/atomic64.h | 2 +-
include/asm-generic/rqspinlock.h | 2 +-
include/linux/instrumented.h | 15 +++++++++++++++
include/linux/types.h | 2 +-
kernel/bpf/rqspinlock.c | 1 -
lib/Kconfig.debug | 18 ++++++++++++++++++
6 files changed, 36 insertions(+), 4 deletions(-)
--
2.49.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v5 1/4] bpf: Explicitly align bpf_res_spin_lock
2025-12-16 6:31 [PATCH v5 0/4] Align atomic storage Finn Thain
2025-12-16 6:31 ` [PATCH v5 4/4] atomic: Add option for weaker alignment check Finn Thain
@ 2025-12-16 6:31 ` Finn Thain
2025-12-16 7:24 ` Arnd Bergmann
2025-12-16 6:31 ` [PATCH v5 2/4] atomic: Specify alignment for atomic_t and atomic64_t Finn Thain
` (2 subsequent siblings)
4 siblings, 1 reply; 9+ messages in thread
From: Finn Thain @ 2025-12-16 6:31 UTC (permalink / raw)
To: Peter Zijlstra, Will Deacon
Cc: Andrew Morton, Arnd Bergmann, Boqun Feng, Gary Guo, Mark Rutland,
linux-arch, linux-kernel, linux-m68k, Alexei Starovoitov,
Daniel Borkmann, Andrii Nakryiko, Martin KaFai Lau,
Eduard Zingerman, Song Liu, Yonghong Song, John Fastabend,
KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
Geert Uytterhoeven, bpf
Align bpf_res_spin_lock to avoid a BUILD_BUG_ON() when the alignment
changes, as it will do on m68k when, in a subsequent patch, the minimum
alignment of the atomic_t member of struct rqspinlock gets increased
from 2 to 4. Drop the BUILD_BUG_ON() as it becomes redundant.
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-m68k@lists.linux-m68k.org
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
---
include/asm-generic/rqspinlock.h | 2 +-
kernel/bpf/rqspinlock.c | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/include/asm-generic/rqspinlock.h b/include/asm-generic/rqspinlock.h
index 6d4244d643df..eac2dcd31b83 100644
--- a/include/asm-generic/rqspinlock.h
+++ b/include/asm-generic/rqspinlock.h
@@ -28,7 +28,7 @@ struct rqspinlock {
*/
struct bpf_res_spin_lock {
u32 val;
-};
+} __aligned(__alignof__(struct rqspinlock));
struct qspinlock;
#ifdef CONFIG_QUEUED_SPINLOCKS
diff --git a/kernel/bpf/rqspinlock.c b/kernel/bpf/rqspinlock.c
index a00561b1d3e5..02f1f671e624 100644
--- a/kernel/bpf/rqspinlock.c
+++ b/kernel/bpf/rqspinlock.c
@@ -692,7 +692,6 @@ __bpf_kfunc int bpf_res_spin_lock(struct bpf_res_spin_lock *lock)
int ret;
BUILD_BUG_ON(sizeof(rqspinlock_t) != sizeof(struct bpf_res_spin_lock));
- BUILD_BUG_ON(__alignof__(rqspinlock_t) != __alignof__(struct bpf_res_spin_lock));
preempt_disable();
ret = res_spin_lock((rqspinlock_t *)lock);
--
2.49.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 2/4] atomic: Specify alignment for atomic_t and atomic64_t
2025-12-16 6:31 [PATCH v5 0/4] Align atomic storage Finn Thain
2025-12-16 6:31 ` [PATCH v5 4/4] atomic: Add option for weaker alignment check Finn Thain
2025-12-16 6:31 ` [PATCH v5 1/4] bpf: Explicitly align bpf_res_spin_lock Finn Thain
@ 2025-12-16 6:31 ` Finn Thain
2025-12-16 7:04 ` Guo Ren
2025-12-16 7:18 ` Arnd Bergmann
2025-12-16 6:31 ` [PATCH v5 3/4] atomic: Add alignment check to instrumented atomic operations Finn Thain
2025-12-16 19:49 ` [PATCH v5 0/4] Align atomic storage Andrew Morton
4 siblings, 2 replies; 9+ messages in thread
From: Finn Thain @ 2025-12-16 6:31 UTC (permalink / raw)
To: Peter Zijlstra, Will Deacon
Cc: Andrew Morton, Arnd Bergmann, Boqun Feng, Gary Guo, Mark Rutland,
linux-arch, linux-kernel, linux-m68k, Guo Ren, linux-csky,
Geert Uytterhoeven, Dinh Nguyen, Jonas Bonn, Stefan Kristiansson,
Stafford Horne, linux-openrisc, Yoshinori Sato, Rich Felker,
John Paul Adrian Glaubitz, linux-sh
Some recent commits incorrectly assumed 4-byte alignment of locks.
That assumption fails on Linux/m68k (and, interestingly, would have
failed on Linux/cris also). The jump label implementation makes a
similar alignment assumption.
The expectation that atomic_t and atomic64_t variables will be naturally
aligned seems reasonable, as indeed they are on 64-bit architectures.
But atomic64_t isn't naturally aligned on csky, m68k, microblaze, nios2,
openrisc and sh. Neither atomic_t nor atomic64_t are naturally aligned
on m68k.
This patch brings a little uniformity by specifying natural alignment
for atomic types. One benefit is that atomic64_t variables do not get
split across a page boundary. The cost is that some structs grow which
leads to cache misses and wasted memory.
Cc: Guo Ren <guoren@kernel.org>
Cc: linux-csky@vger.kernel.org
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-m68k@lists.linux-m68k.org
Cc: Dinh Nguyen <dinguyen@kernel.org>
Cc: Jonas Bonn <jonas@southpole.se>
Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
Cc: Stafford Horne <shorne@gmail.com>
Cc: linux-openrisc@vger.kernel.org
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Rich Felker <dalias@libc.org>
Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Cc: linux-sh@vger.kernel.org
Link: https://lore.kernel.org/lkml/CAFr9PX=MYUDGJS2kAvPMkkfvH+0-SwQB_kxE4ea0J_wZ_pk=7w@mail.gmail.com
Link: https://lore.kernel.org/lkml/CAMuHMdW7Ab13DdGs2acMQcix5ObJK0O2dG_Fxzr8_g58Rc1_0g@mail.gmail.com/
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
---
Changed since v2:
- Specify natural alignment for atomic64_t.
Changed since v1:
- atomic64_t now gets an __aligned attribute too.
- The 'Fixes' tag has been dropped because Lance sent a different fix
for commit e711faaafbe5 ("hung_task: replace blocker_mutex with encoded
blocker") that's suitable for -stable.
---
include/asm-generic/atomic64.h | 2 +-
include/linux/types.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/asm-generic/atomic64.h b/include/asm-generic/atomic64.h
index 100d24b02e52..f22ccfc0df98 100644
--- a/include/asm-generic/atomic64.h
+++ b/include/asm-generic/atomic64.h
@@ -10,7 +10,7 @@
#include <linux/types.h>
typedef struct {
- s64 counter;
+ s64 __aligned(sizeof(s64)) counter;
} atomic64_t;
#define ATOMIC64_INIT(i) { (i) }
diff --git a/include/linux/types.h b/include/linux/types.h
index 6dfdb8e8e4c3..a225a518c2c3 100644
--- a/include/linux/types.h
+++ b/include/linux/types.h
@@ -179,7 +179,7 @@ typedef phys_addr_t resource_size_t;
typedef unsigned long irq_hw_number_t;
typedef struct {
- int counter;
+ int __aligned(sizeof(int)) counter;
} atomic_t;
#define ATOMIC_INIT(i) { (i) }
--
2.49.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 3/4] atomic: Add alignment check to instrumented atomic operations
2025-12-16 6:31 [PATCH v5 0/4] Align atomic storage Finn Thain
` (2 preceding siblings ...)
2025-12-16 6:31 ` [PATCH v5 2/4] atomic: Specify alignment for atomic_t and atomic64_t Finn Thain
@ 2025-12-16 6:31 ` Finn Thain
2025-12-16 19:49 ` [PATCH v5 0/4] Align atomic storage Andrew Morton
4 siblings, 0 replies; 9+ messages in thread
From: Finn Thain @ 2025-12-16 6:31 UTC (permalink / raw)
To: Peter Zijlstra, Will Deacon
Cc: Andrew Morton, Arnd Bergmann, Boqun Feng, Gary Guo, Mark Rutland,
linux-arch, linux-kernel, linux-m68k
From: Peter Zijlstra <peterz@infradead.org>
Add a Kconfig option for debug builds which logs a warning when an
instrumented atomic operation takes place that's misaligned.
Some platforms don't trap for this.
Link: https://lore.kernel.org/lkml/20250901093600.GF4067720@noisy.programming.kicks-ass.net/
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
---
Changed since v2:
- Always check for natural alignment.
---
Checkpatch.pl says...
ERROR: Missing Signed-off-by: line by nominal patch author 'Peter Zijlstra <peterz@infradead.org>'
---
include/linux/instrumented.h | 4 ++++
lib/Kconfig.debug | 10 ++++++++++
2 files changed, 14 insertions(+)
diff --git a/include/linux/instrumented.h b/include/linux/instrumented.h
index 711a1f0d1a73..402a999a0d6b 100644
--- a/include/linux/instrumented.h
+++ b/include/linux/instrumented.h
@@ -7,6 +7,7 @@
#ifndef _LINUX_INSTRUMENTED_H
#define _LINUX_INSTRUMENTED_H
+#include <linux/bug.h>
#include <linux/compiler.h>
#include <linux/kasan-checks.h>
#include <linux/kcsan-checks.h>
@@ -67,6 +68,7 @@ static __always_inline void instrument_atomic_read(const volatile void *v, size_
{
kasan_check_read(v, size);
kcsan_check_atomic_read(v, size);
+ WARN_ON_ONCE(IS_ENABLED(CONFIG_DEBUG_ATOMIC) && ((unsigned long)v & (size - 1)));
}
/**
@@ -81,6 +83,7 @@ static __always_inline void instrument_atomic_write(const volatile void *v, size
{
kasan_check_write(v, size);
kcsan_check_atomic_write(v, size);
+ WARN_ON_ONCE(IS_ENABLED(CONFIG_DEBUG_ATOMIC) && ((unsigned long)v & (size - 1)));
}
/**
@@ -95,6 +98,7 @@ static __always_inline void instrument_atomic_read_write(const volatile void *v,
{
kasan_check_write(v, size);
kcsan_check_atomic_read_write(v, size);
+ WARN_ON_ONCE(IS_ENABLED(CONFIG_DEBUG_ATOMIC) && ((unsigned long)v & (size - 1)));
}
/**
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 713cc94caa02..d080d23d9a87 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1356,6 +1356,16 @@ config DEBUG_PREEMPT
depending on workload as it triggers debugging routines for each
this_cpu operation. It should only be used for debugging purposes.
+config DEBUG_ATOMIC
+ bool "Debug atomic variables"
+ depends on DEBUG_KERNEL
+ help
+ If you say Y here then the kernel will add a runtime alignment check
+ to atomic accesses. Useful for architectures that do not have trap on
+ mis-aligned access.
+
+ This option has potentially significant overhead.
+
menu "Lock Debugging (spinlocks, mutexes, etc...)"
config LOCK_DEBUGGING_SUPPORT
--
2.49.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v5 4/4] atomic: Add option for weaker alignment check
2025-12-16 6:31 [PATCH v5 0/4] Align atomic storage Finn Thain
@ 2025-12-16 6:31 ` Finn Thain
2025-12-16 6:31 ` [PATCH v5 1/4] bpf: Explicitly align bpf_res_spin_lock Finn Thain
` (3 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Finn Thain @ 2025-12-16 6:31 UTC (permalink / raw)
To: Peter Zijlstra, Will Deacon
Cc: Andrew Morton, Arnd Bergmann, Boqun Feng, Gary Guo, Mark Rutland,
linux-arch, linux-kernel, linux-m68k
Add a new Kconfig symbol to make CONFIG_DEBUG_ATOMIC more useful on
those architectures which do not align dynamic allocations to 8-byte
boundaries. Without this, CONFIG_DEBUG_ATOMIC produces excessive
WARN splats.
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
---
Changed since v3:
- Dropped #include <linux/cache.h> to avoid a build failure on arm64.
- Rewrote Kconfig help text to better describe preferred alignment.
- Refactored to avoid line-wrapping and duplication.
---
include/linux/instrumented.h | 17 ++++++++++++++---
lib/Kconfig.debug | 8 ++++++++
2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/include/linux/instrumented.h b/include/linux/instrumented.h
index 402a999a0d6b..ca946c5860be 100644
--- a/include/linux/instrumented.h
+++ b/include/linux/instrumented.h
@@ -56,6 +56,17 @@ static __always_inline void instrument_read_write(const volatile void *v, size_t
kcsan_check_read_write(v, size);
}
+static __always_inline void instrument_atomic_check_alignment(const volatile void *v, size_t size)
+{
+ if (IS_ENABLED(CONFIG_DEBUG_ATOMIC)) {
+ unsigned int mask = size - 1;
+
+ if (IS_ENABLED(CONFIG_DEBUG_ATOMIC_LARGEST_ALIGN))
+ mask &= sizeof(struct { long x; } __aligned_largest) - 1;
+ WARN_ON_ONCE((unsigned long)v & mask);
+ }
+}
+
/**
* instrument_atomic_read - instrument atomic read access
* @v: address of access
@@ -68,7 +79,7 @@ static __always_inline void instrument_atomic_read(const volatile void *v, size_
{
kasan_check_read(v, size);
kcsan_check_atomic_read(v, size);
- WARN_ON_ONCE(IS_ENABLED(CONFIG_DEBUG_ATOMIC) && ((unsigned long)v & (size - 1)));
+ instrument_atomic_check_alignment(v, size);
}
/**
@@ -83,7 +94,7 @@ static __always_inline void instrument_atomic_write(const volatile void *v, size
{
kasan_check_write(v, size);
kcsan_check_atomic_write(v, size);
- WARN_ON_ONCE(IS_ENABLED(CONFIG_DEBUG_ATOMIC) && ((unsigned long)v & (size - 1)));
+ instrument_atomic_check_alignment(v, size);
}
/**
@@ -98,7 +109,7 @@ static __always_inline void instrument_atomic_read_write(const volatile void *v,
{
kasan_check_write(v, size);
kcsan_check_atomic_read_write(v, size);
- WARN_ON_ONCE(IS_ENABLED(CONFIG_DEBUG_ATOMIC) && ((unsigned long)v & (size - 1)));
+ instrument_atomic_check_alignment(v, size);
}
/**
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index d080d23d9a87..60f9deef00fd 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1366,6 +1366,14 @@ config DEBUG_ATOMIC
This option has potentially significant overhead.
+config DEBUG_ATOMIC_LARGEST_ALIGN
+ bool "Check alignment only up to __aligned_largest"
+ depends on DEBUG_ATOMIC
+ help
+ If you say Y here then the check for natural alignment of
+ atomic accesses will be constrained to the compiler's largest
+ alignment for scalar types.
+
menu "Lock Debugging (spinlocks, mutexes, etc...)"
config LOCK_DEBUGGING_SUPPORT
--
2.49.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v5 2/4] atomic: Specify alignment for atomic_t and atomic64_t
2025-12-16 6:31 ` [PATCH v5 2/4] atomic: Specify alignment for atomic_t and atomic64_t Finn Thain
@ 2025-12-16 7:04 ` Guo Ren
2025-12-16 7:18 ` Arnd Bergmann
1 sibling, 0 replies; 9+ messages in thread
From: Guo Ren @ 2025-12-16 7:04 UTC (permalink / raw)
To: Finn Thain
Cc: Peter Zijlstra, Will Deacon, Andrew Morton, Arnd Bergmann,
Boqun Feng, Gary Guo, Mark Rutland, linux-arch, linux-kernel,
linux-m68k, linux-csky, Geert Uytterhoeven, Dinh Nguyen,
Jonas Bonn, Stefan Kristiansson, Stafford Horne, linux-openrisc,
Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz, linux-sh
On Tue, Dec 16, 2025 at 2:38 PM Finn Thain <fthain@linux-m68k.org> wrote:
>
> Some recent commits incorrectly assumed 4-byte alignment of locks.
> That assumption fails on Linux/m68k (and, interestingly, would have
> failed on Linux/cris also). The jump label implementation makes a
> similar alignment assumption.
>
> The expectation that atomic_t and atomic64_t variables will be naturally
> aligned seems reasonable, as indeed they are on 64-bit architectures.
> But atomic64_t isn't naturally aligned on csky, m68k, microblaze, nios2,
> openrisc and sh. Neither atomic_t nor atomic64_t are naturally aligned
> on m68k.
>
> This patch brings a little uniformity by specifying natural alignment
> for atomic types. One benefit is that atomic64_t variables do not get
> split across a page boundary. The cost is that some structs grow which
> leads to cache misses and wasted memory.
>
> Cc: Guo Ren <guoren@kernel.org>
> Cc: linux-csky@vger.kernel.org
> Cc: Geert Uytterhoeven <geert@linux-m68k.org>
> Cc: linux-m68k@lists.linux-m68k.org
> Cc: Dinh Nguyen <dinguyen@kernel.org>
> Cc: Jonas Bonn <jonas@southpole.se>
> Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
> Cc: Stafford Horne <shorne@gmail.com>
> Cc: linux-openrisc@vger.kernel.org
> Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
> Cc: Rich Felker <dalias@libc.org>
> Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
> Cc: linux-sh@vger.kernel.org
> Link: https://lore.kernel.org/lkml/CAFr9PX=MYUDGJS2kAvPMkkfvH+0-SwQB_kxE4ea0J_wZ_pk=7w@mail.gmail.com
> Link: https://lore.kernel.org/lkml/CAMuHMdW7Ab13DdGs2acMQcix5ObJK0O2dG_Fxzr8_g58Rc1_0g@mail.gmail.com/
> Signed-off-by: Finn Thain <fthain@linux-m68k.org>
> ---
> Changed since v2:
> - Specify natural alignment for atomic64_t.
> Changed since v1:
> - atomic64_t now gets an __aligned attribute too.
> - The 'Fixes' tag has been dropped because Lance sent a different fix
> for commit e711faaafbe5 ("hung_task: replace blocker_mutex with encoded
> blocker") that's suitable for -stable.
> ---
> include/asm-generic/atomic64.h | 2 +-
> include/linux/types.h | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/asm-generic/atomic64.h b/include/asm-generic/atomic64.h
> index 100d24b02e52..f22ccfc0df98 100644
> --- a/include/asm-generic/atomic64.h
> +++ b/include/asm-generic/atomic64.h
> @@ -10,7 +10,7 @@
> #include <linux/types.h>
>
> typedef struct {
> - s64 counter;
> + s64 __aligned(sizeof(s64)) counter;
This alignment is okay for all.
Acked-by: Guo Ren <guoren@kernel.org>
> } atomic64_t;
>
> #define ATOMIC64_INIT(i) { (i) }
> diff --git a/include/linux/types.h b/include/linux/types.h
> index 6dfdb8e8e4c3..a225a518c2c3 100644
> --- a/include/linux/types.h
> +++ b/include/linux/types.h
> @@ -179,7 +179,7 @@ typedef phys_addr_t resource_size_t;
> typedef unsigned long irq_hw_number_t;
>
> typedef struct {
> - int counter;
> + int __aligned(sizeof(int)) counter;
> } atomic_t;
>
> #define ATOMIC_INIT(i) { (i) }
> --
> 2.49.1
>
--
Best Regards
Guo Ren
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 2/4] atomic: Specify alignment for atomic_t and atomic64_t
2025-12-16 6:31 ` [PATCH v5 2/4] atomic: Specify alignment for atomic_t and atomic64_t Finn Thain
2025-12-16 7:04 ` Guo Ren
@ 2025-12-16 7:18 ` Arnd Bergmann
1 sibling, 0 replies; 9+ messages in thread
From: Arnd Bergmann @ 2025-12-16 7:18 UTC (permalink / raw)
To: Finn Thain, Peter Zijlstra, Will Deacon
Cc: Andrew Morton, Boqun Feng, Gary Guo, Mark Rutland, Linux-Arch,
linux-kernel, linux-m68k, guoren, linux-csky@vger.kernel.org,
Geert Uytterhoeven, Dinh Nguyen, Jonas Bonn, Stefan Kristiansson,
Stafford Horne, linux-openrisc@vger.kernel.org, Yoshinori Sato,
Rich Felker, John Paul Adrian Glaubitz, linux-sh
On Tue, Dec 16, 2025, at 07:31, Finn Thain wrote:
> Some recent commits incorrectly assumed 4-byte alignment of locks.
> That assumption fails on Linux/m68k (and, interestingly, would have
> failed on Linux/cris also). The jump label implementation makes a
> similar alignment assumption.
>
> The expectation that atomic_t and atomic64_t variables will be naturally
> aligned seems reasonable, as indeed they are on 64-bit architectures.
> But atomic64_t isn't naturally aligned on csky, m68k, microblaze, nios2,
> openrisc and sh. Neither atomic_t nor atomic64_t are naturally aligned
> on m68k.
>
> This patch brings a little uniformity by specifying natural alignment
> for atomic types. One benefit is that atomic64_t variables do not get
> split across a page boundary. The cost is that some structs grow which
> leads to cache misses and wasted memory.
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 1/4] bpf: Explicitly align bpf_res_spin_lock
2025-12-16 6:31 ` [PATCH v5 1/4] bpf: Explicitly align bpf_res_spin_lock Finn Thain
@ 2025-12-16 7:24 ` Arnd Bergmann
0 siblings, 0 replies; 9+ messages in thread
From: Arnd Bergmann @ 2025-12-16 7:24 UTC (permalink / raw)
To: Finn Thain, Peter Zijlstra, Will Deacon
Cc: Andrew Morton, Boqun Feng, Gary Guo, Mark Rutland, Linux-Arch,
linux-kernel, linux-m68k, Alexei Starovoitov, Daniel Borkmann,
Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
Hao Luo, Jiri Olsa, Geert Uytterhoeven, bpf
On Tue, Dec 16, 2025, at 07:31, Finn Thain wrote:
> Align bpf_res_spin_lock to avoid a BUILD_BUG_ON() when the alignment
> changes, as it will do on m68k when, in a subsequent patch, the minimum
> alignment of the atomic_t member of struct rqspinlock gets increased
> from 2 to 4. Drop the BUILD_BUG_ON() as it becomes redundant.
>
> Cc: Geert Uytterhoeven <geert@linux-m68k.org>
> Cc: linux-m68k@lists.linux-m68k.org
> Acked-by: Alexei Starovoitov <ast@kernel.org>
> Signed-off-by: Finn Thain <fthain@linux-m68k.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v5 0/4] Align atomic storage
2025-12-16 6:31 [PATCH v5 0/4] Align atomic storage Finn Thain
` (3 preceding siblings ...)
2025-12-16 6:31 ` [PATCH v5 3/4] atomic: Add alignment check to instrumented atomic operations Finn Thain
@ 2025-12-16 19:49 ` Andrew Morton
4 siblings, 0 replies; 9+ messages in thread
From: Andrew Morton @ 2025-12-16 19:49 UTC (permalink / raw)
To: Finn Thain
Cc: Peter Zijlstra, Will Deacon, Andrii Nakryiko, Arnd Bergmann,
Alexei Starovoitov, Boqun Feng, bpf, Rich Felker, Daniel Borkmann,
Dinh Nguyen, Eduard Zingerman, Gary Guo, Geert Uytterhoeven,
John Paul Adrian Glaubitz, Guo Ren, Hao Luo, John Fastabend,
Jiri Olsa, Jonas Bonn, KP Singh, linux-arch, linux-csky,
linux-kernel, linux-m68k, linux-openrisc, linux-sh, Mark Rutland,
Martin KaFai Lau, Stanislav Fomichev, Stafford Horne, Song Liu,
Stefan Kristiansson, Yonghong Song, Yoshinori Sato
On Tue, 16 Dec 2025 17:31:05 +1100 Finn Thain <fthain@linux-m68k.org> wrote:
> This series adds the __aligned attribute to atomic_t and atomic64_t
> definitions in include/linux and include/asm-generic (respectively)
> to get natural alignment of both types on csky, m68k, microblaze,
> nios2, openrisc and sh.
>
> This series also adds Kconfig options to enable a new run-time warning
> to help reveal misaligned atomic accesses on platforms which don't
> trap that.
>
> The performance impact is expected to vary across platforms and workloads.
> The measurements I made on m68k show that some workloads run faster and
> others slower.
Looks nice, thanks.
I don't know which tree this is aimed at. I grabbed a copy for
mm.git's mm-nonmm-unstable tree, can drop it again if this pops up in
linux-next via another route.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-12-16 19:49 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-16 6:31 [PATCH v5 0/4] Align atomic storage Finn Thain
2025-12-16 6:31 ` [PATCH v5 4/4] atomic: Add option for weaker alignment check Finn Thain
2025-12-16 6:31 ` [PATCH v5 1/4] bpf: Explicitly align bpf_res_spin_lock Finn Thain
2025-12-16 7:24 ` Arnd Bergmann
2025-12-16 6:31 ` [PATCH v5 2/4] atomic: Specify alignment for atomic_t and atomic64_t Finn Thain
2025-12-16 7:04 ` Guo Ren
2025-12-16 7:18 ` Arnd Bergmann
2025-12-16 6:31 ` [PATCH v5 3/4] atomic: Add alignment check to instrumented atomic operations Finn Thain
2025-12-16 19:49 ` [PATCH v5 0/4] Align atomic storage Andrew Morton
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).