From 6cf939d9e97dbdf3fb06aaeb4b5c3fd6f5155273 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Sat, 8 Sep 2007 17:13:19 +0000 Subject: Make the ast on sparc64 per-process instead of global. Necessary to make signal delivery more reliable once we go smp (although the code for that is still missing). "in principle, this looks good" art@ --- sys/arch/sparc64/include/cpu.h | 14 +++++--------- sys/arch/sparc64/include/proc.h | 1 + 2 files changed, 6 insertions(+), 9 deletions(-) (limited to 'sys/arch/sparc64/include') diff --git a/sys/arch/sparc64/include/cpu.h b/sys/arch/sparc64/include/cpu.h index 25ecdad817a..6331ae2761e 100644 --- a/sys/arch/sparc64/include/cpu.h +++ b/sys/arch/sparc64/include/cpu.h @@ -1,4 +1,4 @@ -/* $OpenBSD: cpu.h,v 1.41 2007/09/04 20:36:52 kettenis Exp $ */ +/* $OpenBSD: cpu.h,v 1.42 2007/09/08 17:13:17 kettenis Exp $ */ /* $NetBSD: cpu.h,v 1.28 2001/06/14 22:56:58 thorpej Exp $ */ /* @@ -159,13 +159,13 @@ struct clockframe { void setsoftnet(void); -extern int want_ast; +#define aston(p) ((p)->p_md.md_astpending = 1) /* * Preempt the current process if in interrupt from user mode, * or after the current trap/syscall if in system mode. */ -#define need_resched(ci) (ci->ci_want_resched = 1, want_ast = 1) +extern void need_resched(struct cpu_info *); /* * This is used during profiling to integrate system time. @@ -177,13 +177,9 @@ extern int want_ast; * buffer pages are invalid. On the sparc, request an ast to send us * through trap(), marking the proc as needing a profiling tick. */ -#define need_proftick(p) do { want_ast = 1; } while (0) +#define need_proftick(p) aston(p) -/* - * Notify the current process (p) that it has a signal pending, - * process as soon as possible. - */ -#define signotify(p) (want_ast = 1) +void signotify(struct proc *); /* * Only one process may own the FPU state. diff --git a/sys/arch/sparc64/include/proc.h b/sys/arch/sparc64/include/proc.h index a39c6f04f61..84d8a86f7ac 100644 --- a/sys/arch/sparc64/include/proc.h +++ b/sys/arch/sparc64/include/proc.h @@ -47,6 +47,7 @@ struct mdproc { struct trapframe64 *md_tf; /* trap/syscall registers */ struct fpstate64 *md_fpstate; /* fpu state, if any; always resident */ u_long md_flags; + __volatile int md_astpending; }; /* md_flags */ -- cgit v1.2.3