freebsd-dev/sys/vm
John Baldwin 0c0b25ae91 Implement preemption of kernel threads natively in the scheduler rather
than as one-off hacks in various other parts of the kernel:
- Add a function maybe_preempt() that is called from sched_add() to
  determine if a thread about to be added to a run queue should be
  preempted to directly.  If it is not safe to preempt or if the new
  thread does not have a high enough priority, then the function returns
  false and sched_add() adds the thread to the run queue.  If the thread
  should be preempted to but the current thread is in a nested critical
  section, then the flag TDF_OWEPREEMPT is set and the thread is added
  to the run queue.  Otherwise, mi_switch() is called immediately and the
  thread is never added to the run queue since it is switch to directly.
  When exiting an outermost critical section, if TDF_OWEPREEMPT is set,
  then clear it and call mi_switch() to perform the deferred preemption.
- Remove explicit preemption from ithread_schedule() as calling
  setrunqueue() now does all the correct work.  This also removes the
  do_switch argument from ithread_schedule().
- Do not use the manual preemption code in mtx_unlock if the architecture
  supports native preemption.
- Don't call mi_switch() in a loop during shutdown to give ithreads a
  chance to run if the architecture supports native preemption since
  the ithreads will just preempt DELAY().
- Don't call mi_switch() from the page zeroing idle thread for
  architectures that support native preemption as it is unnecessary.
- Native preemption is enabled on the same archs that supported ithread
  preemption, namely alpha, i386, and amd64.

This change should largely be a NOP for the default case as committed
except that we will do fewer context switches in a few cases and will
avoid the run queues completely when preempting.

Approved by:	scottl (with his re@ hat)
2004-07-02 20:21:44 +00:00
..
default_pager.c Access the swap_pagers' ->putpages() through swappagerops instead 2003-08-06 12:05:48 +00:00
device_pager.c Do the dreaded s/dev_t/struct cdev */ 2004-06-16 09:47:26 +00:00
phys_pager.c Zero the physical page only if it is invalid and not prezeroed. 2004-04-25 07:58:59 +00:00
pmap.h - pmap_kenter_temporary() is unused by machine-independent code. Therefore, 2004-04-10 22:41:46 +00:00
swap_pager.c In swap_pager_getpages(), bp->b_dev can be NULL, particularly for the 2004-06-23 15:15:07 +00:00
swap_pager.h Remove advertising clause from University of California Regent's license, 2004-04-06 20:15:37 +00:00
uma_core.c Make uma_mtx MTX_RECURSE. Here's why: 2004-06-23 21:59:03 +00:00
uma_dbg.c Bring in mbuma to replace mballoc. 2004-05-31 21:46:06 +00:00
uma_dbg.h
uma_int.h Bring in mbuma to replace mballoc. 2004-05-31 21:46:06 +00:00
uma.h Fix a comment above uma_zsecond_create(), describing its arguments. 2004-06-01 01:36:26 +00:00
vm_contig.c Make contigmalloc() more reliable: 2004-06-15 01:02:00 +00:00
vm_extern.h To date, unwiring a fictitious page has produced a panic. The reason 2004-05-22 04:53:51 +00:00
vm_fault.c To date, unwiring a fictitious page has produced a panic. The reason 2004-05-22 04:53:51 +00:00
vm_glue.c - Don't use a variable to point to the user area that we only use once. 2004-07-02 03:45:07 +00:00
vm_init.c The demise of vm_pager_map_page() in revision 1.93 of vm/vm_pager.c permits 2004-04-08 19:08:49 +00:00
vm_kern.c Bring in mbuma to replace mballoc. 2004-05-31 21:46:06 +00:00
vm_kern.h Remove advertising clause from University of California Regent's license, 2004-04-06 20:15:37 +00:00
vm_map.c Use MIN() macro rather than ulmin() inline, and fix stray tab 2004-06-28 19:58:39 +00:00
vm_map.h Remove an unused field from the vmspace structure. 2004-06-26 19:16:35 +00:00
vm_meter.c Remove advertising clause from University of California Regent's license, 2004-04-06 20:15:37 +00:00
vm_mmap.c Deorbit COMPAT_SUNOS. 2004-06-11 11:16:26 +00:00
vm_object.c Initialize result->backing_object_offset before linking result onto the list of 2004-06-28 20:26:35 +00:00
vm_object.h Remove advertising clause from University of California Regent's license, 2004-04-06 20:15:37 +00:00
vm_page.c Remove spl() calls. Update comments to reflect the removal of spl() calls. 2004-06-19 04:19:47 +00:00
vm_page.h Update stale comments regarding page coloring. 2004-06-05 21:06:42 +00:00
vm_pageout.c Call vm_pageout_page_stats() with the page queues lock held. 2004-06-24 04:08:43 +00:00
vm_pageout.h Remove advertising clause from University of California Regent's license, 2004-04-06 20:15:37 +00:00
vm_pageq.c Remove references to L1 in the comments, according to Alan they are 2004-06-07 19:33:05 +00:00
vm_pager.c The demise of vm_pager_map_page() in revision 1.93 of vm/vm_pager.c permits 2004-04-08 19:08:49 +00:00
vm_pager.h The demise of vm_pager_map_page() in revision 1.93 of vm/vm_pager.c permits 2004-04-08 19:08:49 +00:00
vm_param.h Second half of the dev_t cleanup. 2004-06-17 17:16:53 +00:00
vm_unix.c Remove advertising clause from University of California Regent's license, 2004-04-06 20:15:37 +00:00
vm_zeroidle.c Implement preemption of kernel threads natively in the scheduler rather 2004-07-02 20:21:44 +00:00
vm.h Remove advertising clause from University of California Regent's license, 2004-04-06 20:15:37 +00:00
vnode_pager.c Make vm_page's PG_ZERO flag immutable between the time of the page's 2004-05-06 05:03:23 +00:00
vnode_pager.h Remove advertising clause from University of California Regent's license, 2004-04-06 20:15:37 +00:00