summaryrefslogtreecommitdiff
path: root/arch/x86/include/asm/current.h
diff options
context:
space:
mode:
authorBrian Gerst <brgerst@gmail.com>2025-03-03 11:52:37 -0500
committerIngo Molnar <mingo@kernel.org>2025-03-04 20:30:33 +0100
commit972f9cdff924ca53715019b63b4d4aed69d23b1e (patch)
tree9dff5ed5e93f359e37cfea3af5bc4d9c5bd0e431 /arch/x86/include/asm/current.h
parentab2bb9c084f7e3b641ceba91efc33b3adcd1846e (diff)
x86/percpu: Move pcpu_hot to percpu hot section
Also change the alignment of the percpu hot section: - PERCPU_SECTION(INTERNODE_CACHE_BYTES) + PERCPU_SECTION(L1_CACHE_BYTES) As vSMP will muck with INTERNODE_CACHE_BYTES that invalidates the too-large-section assert we do: ASSERT(__per_cpu_hot_end - __per_cpu_hot_start <= 64, "percpu cache hot section too large") [ mingo: Added INTERNODE_CACHE_BYTES fix & explanation. ] Signed-off-by: Brian Gerst <brgerst@gmail.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Acked-by: Uros Bizjak <ubizjak@gmail.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/r/20250303165246.2175811-3-brgerst@gmail.com
Diffstat (limited to 'arch/x86/include/asm/current.h')
-rw-r--r--arch/x86/include/asm/current.h28
1 files changed, 11 insertions, 17 deletions
diff --git a/arch/x86/include/asm/current.h b/arch/x86/include/asm/current.h
index bf5953883ec3..60bc66edca83 100644
--- a/arch/x86/include/asm/current.h
+++ b/arch/x86/include/asm/current.h
@@ -13,32 +13,26 @@
struct task_struct;
struct pcpu_hot {
- union {
- struct {
- struct task_struct *current_task;
- int preempt_count;
- int cpu_number;
+ struct task_struct *current_task;
+ int preempt_count;
+ int cpu_number;
#ifdef CONFIG_MITIGATION_CALL_DEPTH_TRACKING
- u64 call_depth;
+ u64 call_depth;
#endif
- unsigned long top_of_stack;
- void *hardirq_stack_ptr;
- u16 softirq_pending;
+ unsigned long top_of_stack;
+ void *hardirq_stack_ptr;
+ u16 softirq_pending;
#ifdef CONFIG_X86_64
- bool hardirq_stack_inuse;
+ bool hardirq_stack_inuse;
#else
- void *softirq_stack_ptr;
+ void *softirq_stack_ptr;
#endif
- };
- u8 pad[64];
- };
};
-static_assert(sizeof(struct pcpu_hot) == 64);
-DECLARE_PER_CPU_ALIGNED(struct pcpu_hot, pcpu_hot);
+DECLARE_PER_CPU_CACHE_HOT(struct pcpu_hot, pcpu_hot);
/* const-qualified alias to pcpu_hot, aliased by linker. */
-DECLARE_PER_CPU_ALIGNED(const struct pcpu_hot __percpu_seg_override,
+DECLARE_PER_CPU_CACHE_HOT(const struct pcpu_hot __percpu_seg_override,
const_pcpu_hot);
static __always_inline struct task_struct *get_current(void)