Subject: CVS commit: [vmlocking] src/sys
To: None <source-changes@NetBSD.org>
From: Andrew Doran <ad@netbsd.org>
List: source-changes
Date: 11/01/2007 21:58:29
Module Name:	src
Committed By:	ad
Date:		Thu Nov  1 21:58:29 UTC 2007

Modified Files:
	src/sys/arch/amd64/amd64 [vmlocking]: machdep.c
	src/sys/arch/i386/i386 [vmlocking]: machdep.c
	src/sys/arch/x86/include [vmlocking]: cpuvar.h
	src/sys/arch/x86/x86 [vmlocking]: x86_machdep.c
	src/sys/compat/mach [vmlocking]: mach_thread.c
	src/sys/kern [vmlocking]: init_sysctl.c kern_clock.c kern_condvar.c
	    kern_cpu.c kern_fork.c kern_idle.c kern_kthread.c kern_lock.c
	    kern_lwp.c kern_proc.c kern_sleepq.c kern_softint.c kern_synch.c
	    kern_timeout.c kern_turnstile.c sched_4bsd.c sched_m2.c
	    subr_xcall.c sys_aio.c sys_lwp.c tty.c
	src/sys/sys [vmlocking]: cpu_data.h lwp.h param.h proc.h sched.h
	    sleepq.h userret.h
	src/sys/uvm [vmlocking]: uvm_glue.c

Log Message:
- Fix interactivity problems under high load. Beacuse soft interrupts
  are being stacked on top of regular LWPs, more often than not aston()
  was being called on a soft interrupt thread instead of a user thread,
  meaning that preemption was not happening on EOI.

- Don't use bool in a couple of data structures. Sub-word writes are not
  always atomic and may clobber other fields in the containing word.

- For SCHED_4BSD, make p_estcpu per thread (l_estcpu). Rework how the
  dynamic priority level is calculated - it's much better behaved now.

- Kill the l_usrpri/l_priority split now that priorities are no longer
  directly assigned by tsleep(). There are three fields describing LWP
  priority:

        l_priority: Dynamic priority calculated by the scheduler.
                This does not change for kernel/realtime threads,
                and always stays within the correct band. Eg for
                timeshared LWPs it never moves out of the user
                priority range. This is basically what l_usrpri
                was before.

        l_inheritedprio: Lent to the LWP due to priority inheritance
                (turnstiles).

        l_kpriority: A boolean value set true the first time an LWP
                sleeps within the kernel. This indicates that the LWP
                should get a priority boost as compensation for blocking.
                lwp_eprio() now does the equivalent of sched_kpri() if
                the flag is set. The flag is cleared in userret().

- Keep track of scheduling class (OTHER, FIFO, RR) in struct lwp, and use
  this to make decisions in a few places where we previously tested for a
  kernel thread.

- Partially fix itimers and usr/sys/intr time accounting in the presence
  of software interrupts.

- Use kthread_create() to create idle LWPs. Move priority definitions
  from the various modules into sys/param.h.

- newlwp -> lwp_create


To generate a diff of this commit:
cvs rdiff -r1.52.2.9 -r1.52.2.10 src/sys/arch/amd64/amd64/machdep.c
cvs rdiff -r1.601.2.10 -r1.601.2.11 src/sys/arch/i386/i386/machdep.c
cvs rdiff -r1.8.2.3 -r1.8.2.4 src/sys/arch/x86/include/cpuvar.h
cvs rdiff -r1.8.2.3 -r1.8.2.4 src/sys/arch/x86/x86/x86_machdep.c
cvs rdiff -r1.39.6.3 -r1.39.6.4 src/sys/compat/mach/mach_thread.c
cvs rdiff -r1.98.2.9 -r1.98.2.10 src/sys/kern/init_sysctl.c
cvs rdiff -r1.106.6.8 -r1.106.6.9 src/sys/kern/kern_clock.c
cvs rdiff -r1.5.2.8 -r1.5.2.9 src/sys/kern/kern_condvar.c
cvs rdiff -r1.2.2.8 -r1.2.2.9 src/sys/kern/kern_cpu.c
cvs rdiff -r1.136.2.9 -r1.136.2.10 src/sys/kern/kern_fork.c
cvs rdiff -r1.1.6.3 -r1.1.6.4 src/sys/kern/kern_idle.c
cvs rdiff -r1.16.6.12 -r1.16.6.13 src/sys/kern/kern_kthread.c
cvs rdiff -r1.110.2.18 -r1.110.2.19 src/sys/kern/kern_lock.c
cvs rdiff -r1.61.2.24 -r1.61.2.25 src/sys/kern/kern_lwp.c
cvs rdiff -r1.107.2.17 -r1.107.2.18 src/sys/kern/kern_proc.c
cvs rdiff -r1.7.2.19 -r1.7.2.20 src/sys/kern/kern_sleepq.c
cvs rdiff -r1.1.2.19 -r1.1.2.20 src/sys/kern/kern_softint.c
cvs rdiff -r1.186.2.20 -r1.186.2.21 src/sys/kern/kern_synch.c
cvs rdiff -r1.21.4.5 -r1.21.4.6 src/sys/kern/kern_timeout.c
cvs rdiff -r1.6.2.7 -r1.6.2.8 src/sys/kern/kern_turnstile.c
cvs rdiff -r1.1.6.12 -r1.1.6.13 src/sys/kern/sched_4bsd.c
cvs rdiff -r1.3.2.5 -r1.3.2.6 src/sys/kern/sched_m2.c
cvs rdiff -r1.1.2.5 -r1.1.2.6 src/sys/kern/subr_xcall.c
cvs rdiff -r1.5.2.10 -r1.5.2.11 src/sys/kern/sys_aio.c
cvs rdiff -r1.12.2.11 -r1.12.2.12 src/sys/kern/sys_lwp.c
cvs rdiff -r1.193.2.13 -r1.193.2.14 src/sys/kern/tty.c
cvs rdiff -r1.7.6.9 -r1.7.6.10 src/sys/sys/cpu_data.h
cvs rdiff -r1.56.2.17 -r1.56.2.18 src/sys/sys/lwp.h
cvs rdiff -r1.255.4.14 -r1.255.4.15 src/sys/sys/param.h
cvs rdiff -r1.243.2.8 -r1.243.2.9 src/sys/sys/proc.h
cvs rdiff -r1.33.2.10 -r1.33.2.11 src/sys/sys/sched.h
cvs rdiff -r1.5.2.4 -r1.5.2.5 src/sys/sys/sleepq.h
cvs rdiff -r1.11.4.1 -r1.11.4.2 src/sys/sys/userret.h
cvs rdiff -r1.104.2.11 -r1.104.2.12 src/sys/uvm/uvm_glue.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.