[RFC v8 05/20] um: extend arch_switch_to for alternate SUBARCH
Hajime Tazaki
thehajime at gmail.com
Tue Jan 19 21:27:10 EST 2021
This commit introduces additional argument of previous task when
context switch happens. New SUBARCH can use the new information to
switch tasks in a subarch-specific manner.
The patch is particularly required by library mode, implemented as a
SUBARCH of UML. Having access to the previous thread will be required
in the library mode for it to implement thread switching correctly.
Signed-off-by: Hajime Tazaki <thehajime at gmail.com>
---
arch/um/kernel/process.c | 6 +++---
arch/x86/um/ptrace_32.c | 2 +-
arch/x86/um/syscalls_64.c | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
index 2a986ece5478..9b0a36f64339 100644
--- a/arch/um/kernel/process.c
+++ b/arch/um/kernel/process.c
@@ -83,7 +83,7 @@ static inline void set_current(struct task_struct *task)
{ external_pid(), task });
}
-extern void arch_switch_to(struct task_struct *to);
+extern void arch_switch_to(struct task_struct *from, struct task_struct *to);
void *__switch_to(struct task_struct *from, struct task_struct *to)
{
@@ -91,7 +91,7 @@ void *__switch_to(struct task_struct *from, struct task_struct *to)
set_current(to);
switch_threads(&from->thread.switch_buf, &to->thread.switch_buf);
- arch_switch_to(current);
+ arch_switch_to(from, to);
return current->thread.prev_sched;
}
@@ -149,7 +149,7 @@ void fork_handler(void)
* arch_switch_to isn't needed. We could want to apply this to
* improve performance. -bb
*/
- arch_switch_to(current);
+ arch_switch_to(NULL, current);
current->thread.prev_sched = NULL;
diff --git a/arch/x86/um/ptrace_32.c b/arch/x86/um/ptrace_32.c
index 2497bac56066..0f184710d4ca 100644
--- a/arch/x86/um/ptrace_32.c
+++ b/arch/x86/um/ptrace_32.c
@@ -11,7 +11,7 @@
extern int arch_switch_tls(struct task_struct *to);
-void arch_switch_to(struct task_struct *to)
+void arch_switch_to(struct task_struct *from, struct task_struct *to)
{
int err = arch_switch_tls(to);
if (!err)
diff --git a/arch/x86/um/syscalls_64.c b/arch/x86/um/syscalls_64.c
index 58f51667e2e4..2ef9474d2bd2 100644
--- a/arch/x86/um/syscalls_64.c
+++ b/arch/x86/um/syscalls_64.c
@@ -80,7 +80,7 @@ SYSCALL_DEFINE2(arch_prctl, int, option, unsigned long, arg2)
return arch_prctl(current, option, (unsigned long __user *) arg2);
}
-void arch_switch_to(struct task_struct *to)
+void arch_switch_to(struct task_struct *from, struct task_struct *to)
{
if ((to->thread.arch.fs == 0) || (to->mm == NULL))
return;
--
2.21.0 (Apple Git-122.2)
More information about the linux-um
mailing list