From: Tiwei Bie <tiwei.bie@linux.dev>
To: richard@nod.at, anton.ivanov@cambridgegreys.com,
johannes@sipsolutions.net
Cc: linux-um@lists.infradead.org, linux-kernel@vger.kernel.org,
benjamin@sipsolutions.net, arnd@arndb.de, tiwei.btw@antgroup.com,
tiwei.bie@linux.dev
Subject: [PATCH v2 05/10] um: Determine sleep based on need_resched()
Date: Sun, 10 Aug 2025 13:51:31 +0800 [thread overview]
Message-ID: <20250810055136.897712-6-tiwei.bie@linux.dev> (raw)
In-Reply-To: <20250810055136.897712-1-tiwei.bie@linux.dev>
From: Tiwei Bie <tiwei.btw@antgroup.com>
With SMP and NO_HZ enabled, the CPU may still need to sleep even
if the timer is disarmed. Switch to deciding whether to sleep based
on pending resched. This is a preparation for adding SMP support.
Signed-off-by: Tiwei Bie <tiwei.btw@antgroup.com>
---
arch/um/include/shared/kern_util.h | 1 +
arch/um/kernel/process.c | 12 ++++++++++--
arch/um/os-Linux/time.c | 11 +++++------
3 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/arch/um/include/shared/kern_util.h b/arch/um/include/shared/kern_util.h
index 00ca3e12fd9a..3daaa5c4b35d 100644
--- a/arch/um/include/shared/kern_util.h
+++ b/arch/um/include/shared/kern_util.h
@@ -55,6 +55,7 @@ extern int __uml_cant_sleep(void);
extern int get_current_pid(void);
extern int copy_from_user_proc(void *to, void *from, int size);
extern char *uml_strdup(const char *string);
+int uml_need_resched(void);
extern unsigned long to_irq_stack(unsigned long *mask_out);
extern unsigned long from_irq_stack(int nested);
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
index 1be644de9e41..01b935c00454 100644
--- a/arch/um/kernel/process.c
+++ b/arch/um/kernel/process.c
@@ -209,10 +209,13 @@ int arch_dup_task_struct(struct task_struct *dst,
void um_idle_sleep(void)
{
- if (time_travel_mode != TT_MODE_OFF)
+ if (time_travel_mode != TT_MODE_OFF) {
time_travel_sleep();
- else
+ } else {
+ raw_local_irq_enable();
os_idle_sleep();
+ raw_local_irq_disable();
+ }
}
void arch_cpu_idle(void)
@@ -225,6 +228,11 @@ int __uml_cant_sleep(void) {
/* Is in_interrupt() really needed? */
}
+int uml_need_resched(void)
+{
+ return need_resched();
+}
+
extern exitcall_t __uml_exitcall_begin, __uml_exitcall_end;
void do_uml_exitcalls(void)
diff --git a/arch/um/os-Linux/time.c b/arch/um/os-Linux/time.c
index 4d5591d96d8c..f25a4196bab7 100644
--- a/arch/um/os-Linux/time.c
+++ b/arch/um/os-Linux/time.c
@@ -98,18 +98,17 @@ long long os_nsecs(void)
*/
void os_idle_sleep(void)
{
- struct itimerspec its;
sigset_t set, old;
- /* block SIGALRM while we analyze the timer state */
+ /* Block SIGALRM while performing the need_resched check. */
sigemptyset(&set);
sigaddset(&set, SIGALRM);
sigprocmask(SIG_BLOCK, &set, &old);
- /* check the timer, and if it'll fire then wait for it */
- timer_gettime(event_high_res_timer, &its);
- if (its.it_value.tv_sec || its.it_value.tv_nsec)
+ /* Sleep if no resched is pending. */
+ if (!uml_need_resched())
sigsuspend(&old);
- /* either way, restore the signal mask */
+
+ /* Restore the signal mask. */
sigprocmask(SIG_UNBLOCK, &set, NULL);
}
--
2.34.1
next prev parent reply other threads:[~2025-08-10 5:52 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-10 5:51 [PATCH v2 00/10] um: Add SMP support Tiwei Bie
2025-08-10 5:51 ` [PATCH v2 01/10] um: Stop tracking virtual CPUs via mm_cpumask() Tiwei Bie
2025-08-10 5:51 ` [PATCH v2 02/10] um: Remove unused cpu_data and current_cpu_data macros Tiwei Bie
2025-08-10 5:51 ` [PATCH v2 03/10] um: vdso: Implement __vdso_getcpu() via syscall Tiwei Bie
2025-09-10 11:59 ` Johannes Berg
2025-09-11 4:29 ` Tiwei Bie
2025-09-21 20:00 ` Thomas Weißschuh
2025-09-22 4:50 ` Tiwei Bie
2025-09-22 12:05 ` Thomas Weißschuh
2025-09-22 12:12 ` Johannes Berg
2025-09-22 14:01 ` Thomas Weißschuh
2025-09-22 15:14 ` Johannes Berg
2025-09-22 16:04 ` Thomas Weißschuh
2025-09-22 17:07 ` Johannes Berg
2025-09-25 17:08 ` Thomas Weißschuh
2025-10-21 13:20 ` Johannes Berg
2025-08-10 5:51 ` [PATCH v2 04/10] um: Turn signals_* into thread-local variables Tiwei Bie
2025-09-10 12:15 ` Johannes Berg
2025-09-11 4:34 ` Tiwei Bie
2025-09-11 7:37 ` Benjamin Berg
2025-09-11 8:06 ` Benjamin Berg
2025-09-12 0:30 ` Tiwei Bie
2025-09-12 7:58 ` Benjamin Berg
2025-09-12 13:27 ` Tiwei Bie
2025-09-11 9:44 ` Johannes Berg
2025-09-11 10:35 ` Benjamin Berg
2025-08-10 5:51 ` Tiwei Bie [this message]
2025-09-10 12:10 ` [PATCH v2 05/10] um: Determine sleep based on need_resched() Johannes Berg
2025-09-11 4:39 ` Tiwei Bie
2025-09-11 6:59 ` Johannes Berg
2025-09-12 0:59 ` Tiwei Bie
2025-09-11 9:27 ` Johannes Berg
2025-09-12 0:54 ` Tiwei Bie
2025-08-10 5:51 ` [PATCH v2 06/10] um: Define timers on a per-CPU basis Tiwei Bie
2025-08-10 9:49 ` kernel test robot
2025-08-10 5:51 ` [PATCH v2 07/10] um: Remove unused ipi_pipe field from cpuinfo_um Tiwei Bie
2025-08-10 5:51 ` [PATCH v2 08/10] um: Add initial SMP support Tiwei Bie
2025-09-11 9:32 ` Johannes Berg
2025-09-12 0:45 ` Tiwei Bie
2025-09-12 7:58 ` Johannes Berg
2025-08-10 5:51 ` [PATCH v2 09/10] asm-generic: percpu: Add assembly guard Tiwei Bie
2025-09-10 12:12 ` Johannes Berg
2025-08-10 5:51 ` [PATCH v2 10/10] um: Enable SMP support on x86 Tiwei Bie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250810055136.897712-6-tiwei.bie@linux.dev \
--to=tiwei.bie@linux.dev \
--cc=anton.ivanov@cambridgegreys.com \
--cc=arnd@arndb.de \
--cc=benjamin@sipsolutions.net \
--cc=johannes@sipsolutions.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-um@lists.infradead.org \
--cc=richard@nod.at \
--cc=tiwei.btw@antgroup.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.