-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'pr-arm32-ti-in-task' of git://git.kernel.org/pub/scm/linux…
…/kernel/git/ardb/linux into devel-stable ARM: support THREAD_INFO_IN_TASK Move thread_info off the stack and into the task struct, as is done by many other architectures. This requires a method to find the task struct of the task currently running on the CPU, which is provided in this case by the user space TLS (Thread Local Storage) register. This implies that the feature is only supported on CPUs that implement this register, i.e., ARM v6k or later. Kindly tested by Amit and reviewed by Linus. The first patch is against the GCC plugins subsystem, but was reviewed by the maintainer and can be taken through the ARM tree.
- Loading branch information
Showing
20 changed files
with
174 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-only */ | ||
/* | ||
* Copyright (c) 2021 Keith Packard <keithp@keithp.com> | ||
* Copyright (c) 2021 Google, LLC <ardb@kernel.org> | ||
*/ | ||
|
||
#ifndef _ASM_ARM_CURRENT_H | ||
#define _ASM_ARM_CURRENT_H | ||
|
||
#ifndef __ASSEMBLY__ | ||
|
||
struct task_struct; | ||
|
||
static inline void set_current(struct task_struct *cur) | ||
{ | ||
if (!IS_ENABLED(CONFIG_CURRENT_POINTER_IN_TPIDRURO)) | ||
return; | ||
|
||
/* Set TPIDRURO */ | ||
asm("mcr p15, 0, %0, c13, c0, 3" :: "r"(cur) : "memory"); | ||
} | ||
|
||
#ifdef CONFIG_CURRENT_POINTER_IN_TPIDRURO | ||
|
||
static inline struct task_struct *get_current(void) | ||
{ | ||
struct task_struct *cur; | ||
|
||
#if __has_builtin(__builtin_thread_pointer) | ||
/* | ||
* Use the __builtin helper when available - this results in better | ||
* code, especially when using GCC in combination with the per-task | ||
* stack protector, as the compiler will recognize that it needs to | ||
* load the TLS register only once in every function. | ||
*/ | ||
cur = __builtin_thread_pointer(); | ||
#else | ||
asm("mrc p15, 0, %0, c13, c0, 3" : "=r"(cur)); | ||
#endif | ||
return cur; | ||
} | ||
|
||
#define current get_current() | ||
#else | ||
#include <asm-generic/current.h> | ||
#endif /* CONFIG_CURRENT_POINTER_IN_TPIDRURO */ | ||
|
||
#endif /* __ASSEMBLY__ */ | ||
|
||
#endif /* _ASM_ARM_CURRENT_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.