> Date: Sat, 11 Jan 2020 17:41:00 +0100
> From: Martin Pieuchot <[email protected]>
>
> Before converting network timeouts to run in a thread context they were
> executed in a soft-interrupt handler. This design implied that timeouts
> were serialized.
>
> The current "softclock" thread runs on CPU0 to limit border effects due
> to the conversion from soft-interrupt to thread context. However we
> should raise the IPL level of this thread to ensure no other timeout can
> run in the middle of another one.
>
> Diff below does that, ok?
Makes sense. ok kettenis@
> Index: kern/kern_timeout.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/kern_timeout.c,v
> retrieving revision 1.70
> diff -u -p -r1.70 kern_timeout.c
> --- kern/kern_timeout.c 3 Jan 2020 20:11:11 -0000 1.70
> +++ kern/kern_timeout.c 11 Jan 2020 16:33:40 -0000
> @@ -554,6 +554,7 @@ softclock_thread(void *arg)
> struct cpu_info *ci;
> struct sleep_state sls;
> struct timeout *to;
> + int s;
>
> KERNEL_ASSERT_LOCKED();
>
> @@ -565,6 +566,7 @@ softclock_thread(void *arg)
> KASSERT(ci != NULL);
> sched_peg_curproc(ci);
>
> + s = splsoftclock();
> for (;;) {
> sleep_setup(&sls, &timeout_proc, PSWP, "bored");
> sleep_finish(&sls, CIRCQ_EMPTY(&timeout_proc));
> @@ -579,6 +581,7 @@ softclock_thread(void *arg)
> tostat.tos_thread_wakeups++;
> mtx_leave(&timeout_mutex);
> }
> + splx(s);
> }
>
> #ifndef SMALL_KERNEL
>
>