Re: [PATCH v5 2/4] atomic: Specify alignment for atomic_t and atomic64_t

Guo Ren <[email protected]>
Newsgroups gmane.linux.ports.sh.devel,gmane.linux.kernel.cross-arch,gmane.linux.kernel
Message-ID <CAJF2gTRH0bBO4cmoorSwPj5CqcfGp5kGj-QPxoS_AkfhjeACAA@mail.gmail.com>
On Tue, Dec 16, 2025 at 2:38 PM Finn Thain <[email protected]> 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 <[email protected]>
> Cc: [email protected]
> Cc: Geert Uytterhoeven <[email protected]>
> Cc: [email protected]
> Cc: Dinh Nguyen <[email protected]>
> Cc: Jonas Bonn <[email protected]>
> Cc: Stefan Kristiansson <[email protected]>
> Cc: Stafford Horne <[email protected]>
> Cc: [email protected]
> Cc: Yoshinori Sato <[email protected]>
> Cc: Rich Felker <[email protected]>
> Cc: John Paul Adrian Glaubitz <[email protected]>
> Cc: [email protected]
> 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 <[email protected]>
> ---
> 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 <[email protected]>

>  } 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.