Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

um: Turn signals_* into thread-local variables

Turn signals_enabled, signals_pending and signals_active into
thread-local variables. This enables us to control and track
signals independently on each CPU thread. This is a preparation
for adding SMP support.

Signed-off-by: Tiwei Bie <tiwei.btw@antgroup.com>
Link: https://patch.msgid.link/20251027001815.1666872-3-tiwei.bie@linux.dev
Signed-off-by: Johannes Berg <johannes.berg@intel.com>

authored by

Tiwei Bie and committed by
Johannes Berg
9e5a9f1c 6aaf00d1

+13 -8
+2 -2
arch/um/include/asm/irqflags.h
··· 2 2 #ifndef __UM_IRQFLAGS_H 3 3 #define __UM_IRQFLAGS_H 4 4 5 - extern int signals_enabled; 5 + int um_get_signals(void); 6 6 int um_set_signals(int enable); 7 7 void block_signals(void); 8 8 void unblock_signals(void); ··· 10 10 #define arch_local_save_flags arch_local_save_flags 11 11 static inline unsigned long arch_local_save_flags(void) 12 12 { 13 - return signals_enabled; 13 + return um_get_signals(); 14 14 } 15 15 16 16 #define arch_local_irq_restore arch_local_irq_restore
+1 -2
arch/um/include/shared/longjmp.h
··· 5 5 #include <sysdep/archsetjmp.h> 6 6 #include <os.h> 7 7 8 - extern int signals_enabled; 9 8 extern int setjmp(jmp_buf); 10 9 extern void longjmp(jmp_buf, int); 11 10 ··· 14 15 15 16 #define UML_SETJMP(buf) ({ \ 16 17 int n, enable; \ 17 - enable = *(volatile int *)&signals_enabled; \ 18 + enable = um_get_signals(); \ 18 19 n = setjmp(*buf); \ 19 20 if(n != 0) \ 20 21 um_set_signals_trace(enable); \
+1
arch/um/include/shared/os.h
··· 243 243 extern int change_sig(int signal, int on); 244 244 extern void block_signals(void); 245 245 extern void unblock_signals(void); 246 + extern int um_get_signals(void); 246 247 extern int um_set_signals(int enable); 247 248 extern int um_set_signals_trace(int enable); 248 249 extern void deliver_alarm(void);
+1 -1
arch/um/kernel/ksyms.c
··· 6 6 #include <linux/module.h> 7 7 #include <os.h> 8 8 9 + EXPORT_SYMBOL(um_get_signals); 9 10 EXPORT_SYMBOL(um_set_signals); 10 - EXPORT_SYMBOL(signals_enabled); 11 11 12 12 EXPORT_SYMBOL(os_stat_fd); 13 13 EXPORT_SYMBOL(os_stat_file);
+8 -3
arch/um/os-Linux/signal.c
··· 68 68 #define SIGCHLD_BIT 2 69 69 #define SIGCHLD_MASK (1 << SIGCHLD_BIT) 70 70 71 - int signals_enabled; 71 + static __thread int signals_enabled; 72 72 #if IS_ENABLED(CONFIG_UML_TIME_TRAVEL_SUPPORT) 73 73 static int signals_blocked, signals_blocked_pending; 74 74 #endif 75 - static unsigned int signals_pending; 76 - static unsigned int signals_active = 0; 75 + static __thread unsigned int signals_pending; 76 + static __thread unsigned int signals_active; 77 77 78 78 static void sig_handler(int sig, struct siginfo *si, mcontext_t *mc) 79 79 { ··· 340 340 um_trace_signals_on(); 341 341 signals_enabled = 1; 342 342 } 343 + } 344 + 345 + int um_get_signals(void) 346 + { 347 + return signals_enabled; 343 348 } 344 349 345 350 int um_set_signals(int enable)