2804 lines
		
	
	
	
		
			73 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			2804 lines
		
	
	
	
		
			73 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| <!DOCTYPE HTML PUBLIC "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension//EN" [
 | |
| <!ENTITY base CDATA "..">
 | |
| <!ENTITY date "$FreeBSD: www/en/smp/index.sgml,v 1.177 2008/08/20 21:59:45 ed Exp $">
 | |
| <!ENTITY title "FreeBSD SMPng Project">
 | |
| <!ENTITY email 'freebsd-smp'>
 | |
| <!ENTITY % navinclude.developers "INCLUDE">
 | |
| 
 | |
| <!-- Status levels -->
 | |
| <!ENTITY status.done "<font color=green>Done</font>">
 | |
| <!ENTITY status.wip "<font color=blue>In progress</font>">
 | |
| <!ENTITY status.stalled "<font color=purple>Stalled</font>">
 | |
| <!ENTITY status.new "<font color=red>Not Started</font>">
 | |
| <!ENTITY status.resolved "<font color=green>Resolved</font>">
 | |
| <!ENTITY status.unresolved "<font color=red>Unresolved</font>">
 | |
| 
 | |
| <!-- The list of contributors was moved to a separate file so that it can
 | |
|   be used by other documents in the FreeBSD web site. -->
 | |
| 
 | |
| <!ENTITY % developers SYSTEM "../developers.sgml"> %developers;
 | |
| 
 | |
| ]>
 | |
| 
 | |
| <html>
 | |
|   &header;
 | |
| 
 | |
|     <h2>Contents</h2>
 | |
|     <ul>
 | |
|       <li><a href="#goal">Project Goal</a></li>
 | |
|       <li><a href="#status">Project Status</a></li>
 | |
|       <li><a href="#history">Project History</a></li>
 | |
|       <li><a href="#plan">Project Plan (Historical)</a></li>
 | |
|       <li><a href="#resources">Resources and Links</a></li>
 | |
|       <li><a href="#subsystems">Subsystems and Staffing (Historical)</a></li>
 | |
|       <li><a href="#status">Tasks (Historical)</a></li>
 | |
|       <li><a href="#issues">Known Issues (Historical)</a></li>
 | |
|       <li><a href="#news">News (Historical)</a></li>
 | |
|     </ul>
 | |
| 
 | |
|     <a name="goal"></a>
 | |
|     <h2>Project Goal</h2>
 | |
| 
 | |
|     <p>The FreeBSD Next Generation Symmetric Multi-Processing Project,
 | |
|       generally referred to as SMPng, had the goal of introducing parallelism
 | |
|       into the FreeBSD kernel.
 | |
|       While earlier versions of FreeBSD (3.x, 4.x) supported parallel
 | |
|       execution of user processes, the kernel was limited to running on a
 | |
|       single processor at a time, using a "Giant lock" around the kernel to
 | |
|       prevent more than one kernel thread or interrupt handler from executing
 | |
|       at once.
 | |
|       For many interesting workloads, Giant-locked kernels give substantial
 | |
|       speed-up when compared with uniprocessor systems, as significant
 | |
|       computation occurs in user processes--especially for applications such
 | |
|       as rendering and compilation.
 | |
|       However, for kernel-intensive applications, such as intensive network
 | |
|       or file system I/O, contention on the kernel lock results in little or
 | |
|       no speed-up.
 | |
|       The goal of the SMPng Project was to decompose the Giant lock into a
 | |
|       number of smaller locks, resulting in reduced contention (and improved
 | |
|       SMP performance).
 | |
|       Important steps along the way included redesigning significant portions
 | |
|       of the FreeBSD kernel architecture around the notion of ubiquitous
 | |
|       parallelism: that at any moment, many processors might enter the kernel
 | |
|       at the same time.
 | |
|       This included the introduction of more mature threading and
 | |
|       synchronization primitives, interrupt threads, cache-aware allocation
 | |
|       and scheduling, and topology-aware scheduling. </p>
 | |
| 
 | |
|     <p>The FreeBSD Project wishes to recognize the contributions of the
 | |
|       BSD/OS development team, including architectural direction and
 | |
|       suggestions, as well as for initial locking strategies for some system
 | |
|       components, and source code for some of the starting primitives, not to
 | |
|       mention BSDI's contributions in staffing and resources for early parts
 | |
|       of this project.  Likewise, we wish to recognize significant
 | |
|       sponsorship of SMPng work by Yahoo!, Isilon, and the FreeBSD
 | |
|       Foundation.</p>
 | |
| 
 | |
|     <a name="status"></a>
 | |
|     <h2>Project Status</h2>
 | |
| 
 | |
|     <p>While limited sections of the FreeBSD kernel still require Giant,
 | |
|       especially more obscure device drivers and file systems, most parts of
 | |
|       the kernel now neither require nor run with the Giant lock.
 | |
|       As of FreeBSD 6.0, the SMPng Project is considered "complete", in that
 | |
|       the goal of moving to parallelized kernel operation has been met for
 | |
|       most significant parts of the kernel.
 | |
|       This web page is largely historical, and is not up-to-date with respect
 | |
|       to the completion status of items in the task list, etc.</p>
 | |
| 
 | |
|     <a name="history"></a>
 | |
|     <h2>Project History</h2>
 | |
| 
 | |
|     <p>SMPng debuted in FreeBSD 5.0-RELEASE in January of 2003, and involved
 | |
|       over five years of continuous development by a large number of members
 | |
|       of the FreeBSD development team as well as many external contributors.
 | |
|       Since 5.0, the implementation has substantially matured; in the 5.0
 | |
|       release, the basic architectural changes required to support SMPng were
 | |
|       complete, including new kernel memory allocators, synchronization
 | |
|       routines, the move to ithreads, and the removal of the Giant lock from
 | |
|       activities such as process scheduling and several common forms of IPC.
 | |
|       Since 5.0, the architecture has been refined in a number of ways,
 | |
|       including optimizing synchronization approaches, stability and
 | |
|       performance testing on larger systems (up to 32 processor threads), and the
 | |
|       removal of Giant from several significant parts of the operating
 | |
|       system, including large parts of Virtual Memory (VM), the Virtual File
 | |
|       System (VFS), UNIX File System (UFS), most parts of the network stack,
 | |
|       including IPv4, IPV6, FAST_IPSEC, UNIX domain sockets, and NetGraph,
 | |
|       and also from inter-process communication primitives.
 | |
|       The SMP-aware kernel slab allocator is now used almost universally, and
 | |
|       the focus has changed from "make it work", to "optimize it".
 | |
|       Simultaneous work on KSE 1:1 and M:N threading has also allowed
 | |
|       applications to take advantage of new kernel parallelism.
 | |
|       The FreeBSD 5.3 kernel introduced Giant-free network stack execution
 | |
|       for most relevant code paths, and the FreeBSD 6.0 kernel introduced
 | |
|       MPSAFE VFS, as well as wide-spread performance optimization.</p>
 | |
| 
 | |
|     <p>Continuing work on SMPng in the 6.x branch has included work sweeping
 | |
|       up the "loose ends" that remain under Giant, such as parts of NFS, and
 | |
|       less commonly used network stack components.</p>
 | |
| 
 | |
|     <p>Throughout SMPng, an important focus was performance measurement and
 | |
|       optimization, which build on and refine the SMPng architecture: the
 | |
|       introduction of features such as the kernel trace facility (KTR),
 | |
|       hardware performance monitor counters (hwpmc), lock profiling, and
 | |
|       improved memory monitoring play important roles in this process.
 | |
|       Other important debugging and testing facilities include WITNESS, a
 | |
|       run-time kernel lock order verifier, and wide-spread use of lock
 | |
|       assertions and run-time invariants testing.</p>
 | |
| 
 | |
|     <a name="plan"></a>
 | |
|     <h2>Project Plan (Historical)</h2>
 | |
| 
 | |
|     <p>This web page contains information relating to the SMPng effort;
 | |
|       because of the immense scope of the work and rapid pace of development,
 | |
|       it captures only a subset of what has been done.  As the base SMPng
 | |
|       Project, moving towards fine-grained locking, is complete, this
 | |
|       information is largely historical, and does not attempt to capture
 | |
|       more recent work on locking and multi-processor performance.</p>
 | |
| 
 | |
|     <p>The task list below is not intended to be complete, but does
 | |
|       represent a set of relevant and/or important components of the
 | |
|       overall work.  The "Responsible" field identifies a developer who
 | |
|       has expressed willingness to be responsible for completing the
 | |
|       identified task; this doesn't preclude others working on it,
 | |
|       but suggests that coordination with the responsible party might
 | |
|       be appropriate so as to avoid unnecessary duplication of work,
 | |
|       and to maximize forward progress.  If beginning work on a new
 | |
|       area of substantial size, or one that appears unclaimed, it may
 | |
|       be worth dropping an e-mail to the FreeBSD SMP mailing list to
 | |
|       see if any progress has been made.</p>
 | |
| 
 | |
|     <p>The definition of the date field varies depending on the status
 | |
|       of a task.  For completed tasks, it refers to the date completed
 | |
|       or reported completed.  For in-progress tasks, it refers to the
 | |
|       date of the last update of the entry.  For stalled tasks, it
 | |
|       refers to the date that the task was declared stalled.  For
 | |
|       new tasks, it refers to the date the task was added to the list.</p>
 | |
| 
 | |
|     <p>Locking down of individual device drivers is tracked at
 | |
|       <a href="http://www.FreeBSD.org/projects/busdma/">the busdma and
 | |
|       SMPng driver conversion web page</a>.</p>
 | |
| 
 | |
|     <p>Network stack locking information is available at &a.rwatson;'s
 | |
|       <a href="http://www.watson.org/~robert/freebsd/netperf/">netperf web
 | |
|       page</a> and the FreeBSD.org <a href="../projects/netperf/">Netperf
 | |
|       web page</a>.
 | |
|       An SMP <a href="../projects/netperf/cluster.html">network performance
 | |
|       cluster</a> has also been created for the purposes of testing.</p>
 | |
| 
 | |
|     <p>Tasks are sorted first by status, then by date.</p>
 | |
| 
 | |
|     <a name="resources"></a>
 | |
|     <h2>Resources and Links</h2>
 | |
| 
 | |
|     <ul>
 | |
|       <li><p>Most SMP-related discussion takes place on the
 | |
| 	  <a href="mailto:freebsd-smp@FreeBSD.org">freebsd-smp</a>
 | |
| 	  mailing list.  You can read more about mailing lists in the
 | |
| 	  <a href="../doc/en_US.ISO8859-1/books/handbook/eresources.html#ERESOURCES-MAIL">
 | |
| 	  Resources on the Internet</a> appendix of the
 | |
| 	  <a href="../doc/en_US.ISO8859-1/books/handbook/index.html">FreeBSD Handbook</a>.</p></li>
 | |
| 
 | |
|       <li><p>Steve Passe has been maintaining a
 | |
| 	  <a href="http://people.FreeBSD.org/~fsmp/SMP/SMP.html">SMP
 | |
| 	  project page</a> that contains additional information, and
 | |
| 	  goes back further in time than this web page.</p></li>
 | |
| 
 | |
|       <li><p>&a.rwatson; is maintaining a page for SMP-related network
 | |
| 	  performance work for the <a href="../projects/netperf/">Netperf
 | |
| 	  project</a>.  In addition, he has a <a
 | |
| 	  href="http://www.watson.org/~robert/freebsd/netperf/">a personal
 | |
| 	  web page with a change log and other information</a>.</p></li>
 | |
| 
 | |
|       <li><p><a href="http://www.osnews.com/">OSNews</a> has run an
 | |
| 	interview with FreeBSD developers &a.rwatson;, &a.jhb;, and
 | |
| 	&a.scottl;, who talk about many features in 6.x, including recent
 | |
| 	SMPng work, SMPVFS, and more.  The <a
 | |
| 	href="http://www.osnews.com/story.php?news_id=10951">article is
 | |
| 	here</a>.</p></li>
 | |
| 
 | |
|       <li><p>A series of man pages on kernel synchronization and threading
 | |
| 	  primitives can be found here:</p>
 | |
| 
 | |
| 	    <ul>
 | |
| 	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=mutex&apropos=0&sektion=9">Kernel Mutexes (mutex(9))</a></li>
 | |
| 
 | |
| 	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=mtx_pool&apropos=0&sektion=9">Kernel Mutex Pools (mtx_pool(9))</a></li>
 | |
| 
 | |
| 	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=critical&apropos=0&sektion=9">Kernel Critical Sections (critical(9))</a></li>
 | |
| 
 | |
| 	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=sx&apropos=0&sektion=9">Kernel Shared/Exclusive Locks (sx(9))</a></li>
 | |
| 
 | |
| 	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=condvar&apropos=0&sektion=9">Kernel Condition Variables (condvar(9))</a></li>
 | |
| 
 | |
| 	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=sema&apropos=0&sektion=9">Kernel Semaphores (sema(9))</a></li>
 | |
| 
 | |
| 	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=sleep&apropos=0&sektion=9">Kernel sleep/wakeup API (sleep(9))</a></li>
 | |
| 
 | |
| 	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=kthread&apropos=0&sektion=9">Kernel Threads (kthread(9))</a></li>
 | |
| 
 | |
| 	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=ithread&apropos=0&sektion=9">Interrupt Threads (ithread(9))</a></li>
 | |
| 
 | |
| 	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=swi&apropos=0&sektion=9">Software Interrupt Threads (swi(9))</a></li>
 | |
| 	    </ul>
 | |
| 
 | |
| 	  <br>
 | |
| 	  <p>In addition, the old <a href="http://www.freebsd.org/cgi/man.cgi?query=spl&apropos=0&sektion=9">SPL man page</a> may be of interest, as it reflects the previous SMP synchronization model.</p>
 | |
| 	</li>
 | |
| 
 | |
|       <li><p>
 | |
| 	  Hiten Pandya's <a
 | |
| 	  href="http://storm.uk.FreeBSD.org/~hiten/smp_synch_rules.html">
 | |
| 	  SMP kernel synchronization rules</a>.</p></li>
 | |
| 
 | |
|       <li><p>&a.dillon; maintained a
 | |
| 	  <a href="http://apollo.backplane.com/FreeBSDSmp/">web page</a>
 | |
| 	  that documented the work he was doing on the SMP project.</p></li>
 | |
| 
 | |
|       <li>
 | |
| 	<p>
 | |
| 	  <a href="http://www.usenix.org/events/bsdcon02/full_papers/baldwin/baldwin_html/index.html">
 | |
| 	  "Locking in the Multithreaded FreeBSD Kernel" USENIX paper by &a.jhb;</a>.
 | |
| 	</p>
 | |
|       </li>
 | |
| 
 | |
|       <li>
 | |
| 	<p>
 | |
| 	  <a href="http://www.usenix.org/publications/library/proceedings/bsdcon03/tech/hsu.html">
 | |
| 	"Reasoning about SMP in FreeBSD" BSDCon'03 paper by &a.hsu;</a>.
 | |
| 	</p>
 | |
|       </li>
 | |
| 
 | |
|       <li>
 | |
| 	<p>
 | |
| 	  <a href="http://www.usenix.org/publications/library/proceedings/bsdcon03/tech/roberson.html">
 | |
| 	"ULE: A Modern Scheduler for FreeBSD" BSDCon'03 paper by &a.jeff;</a>.
 | |
| 	</p>
 | |
|       </li>
 | |
| 
 | |
|       <li>
 | |
| 	<p>
 | |
| 	  <a href="http://www.watson.org/~robert/freebsd/netperf/20051027-eurobsdcon2005-netperf.pdf">"Introduction to Multithreading and Multiprocessing in the FreeBSD SMPng Network Stack" EuroBSDCon 2005 paper by &a.rwatson;</a>.
 | |
| 	</p>
 | |
|       </li>
 | |
| 
 | |
|     </ul>
 | |
| 
 | |
|     <a name="subsystems"></a>
 | |
|     <h2>Subsystems and Staffing (Historical)</h2>
 | |
| 
 | |
|     <p>This is an incomplete list of high-level kernel subsystems and
 | |
|       current, active staff working on SMP architecture and stability.</p>
 | |
| 
 | |
|     <table class="tblbasic">
 | |
|       <tr class="heading">
 | |
| 	<th> Subsystem </th>
 | |
| 	<th> Status </th>
 | |
| 	<th> Last updated </th>
 | |
| 	<th> Staffing </th>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Newbus </td>
 | |
| 	<td> &status.wip; </td>
 | |
| 	<td> 5 October 2003 </td>
 | |
| 	<td> &a.imp;</td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> VM </td>
 | |
| 	<td> &status.wip; </td>
 | |
| 	<td> 4 October 2003 </td>
 | |
| 	<td> &a.alc;</td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Buffer cache </td>
 | |
| 	<td> &status.wip; </td>
 | |
| 	<td> 4 October 2003 </td>
 | |
| 	<td> &a.jeff;, &a.phk; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> VFS </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 24 January 2005 </td>
 | |
| 	<td> &a.jeff; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Processes and thread operations </td>
 | |
| 	<td> &status.wip; </td>
 | |
| 	<td> 5 May 2003 </td>
 | |
| 	<td> &a.jhb; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Scheduler </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &a.jhb;, &a.jeff; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> GEOM </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 5 February 2003 </td>
 | |
| 	<td> &a.phk; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> File descriptors </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 5 February 2003 </td>
 | |
| 	<td> &a.alfred;, &a.tanimura;, &a.rwatson; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> TTY subsystem </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 20 August 2008 </td>
 | |
| 	<td> &a.ed; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Pipe IPC </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 4 October 2003 </td>
 | |
| 	<td> &a.alfred; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Socket structures and system calls </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 25 November 2004 </td>
 | |
| 	<td> &a.sam;, &a.rwatson; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> KQueue </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 24 November 2004 </td>
 | |
| 	<td> &a.jmg;, &a.green; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> IPv4 </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &a.jennifer;, &a.hsu;, &a.sam;, &a.rwatson;, &a.gnn; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> IPv6 </td>
 | |
| 	<td> &status.wip; </td>
 | |
| 	<td> 01 July 2005 </td>
 | |
| 	<td> &a.rwatson;, &a.gnn; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> IPX/SPX </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 09 January 2005 </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> netatalk </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 02 February 2005 </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Network stack infrastructure </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 28 August 2004 </td>
 | |
| 	<td> &a.hsu;, &a.sam;, &a.rwatson;, &a.mlaier;, &a.luigi;, Maurycy Pawlowski-Wieronski <maurycy@fouk.org>, &a.brooks;,
 | |
| 	  &a.rik; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> NFS Client </td>
 | |
| 	<td> &status.done; </td>
 | |
| 	<td> 19 May 2006 </td>
 | |
| 	<td> &a.mohans; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> NFS Server </td>
 | |
| 	<td> &status.wip; </td>
 | |
| 	<td> 24 February 2007 </td>
 | |
| 	<td> &a.rwatson;, &a.jeff; </td>
 | |
|       </tr>
 | |
| 
 | |
|     </table>
 | |
| 
 | |
|     <a name="status"></a>
 | |
|     <h2>Tasks (Historical)</h2>
 | |
| 
 | |
|     <p>Following is an incomplete list of general tasks.</p>
 | |
| 
 | |
|     <table class="tblbasic">
 | |
|       <tr class="heading">
 | |
| 	<th> Task </th>
 | |
| 	<th> Responsible </th>
 | |
| 	<th> Last updated </th>
 | |
| 	<th> Status </th>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Convert the giant lock from spinning to blocking, add the
 | |
| 	  scheduler lock, add per-CPU idle processes. </td>
 | |
| 	<td> &a.dillon; </td>
 | |
| 	<td> 25 June 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Port the BSD/OS locking primitives (i386). </td>
 | |
| 	<td> &a.jake; </td>
 | |
| 	<td> 3 July 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Implement heavy-weight interrupt threads (i386). </td>
 | |
| 	<td> &a.grog; </td>
 | |
| 	<td> 3 August 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Rewrite the low level interrupt code (i386 UP). </td>
 | |
| 	<td> &a.grog; </td>
 | |
| 	<td> 3 August 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Demonstrated reasonable stability (self-hosted buildworld)
 | |
| 	  (i386 UP). </td>
 | |
| 	<td> -smp developers </td>
 | |
| 	<td> 12 August 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Port the BSD/OS locking primitives (alpha). </td>
 | |
| 	<td> &a.dfr; </td>
 | |
| 	<td> 24 August 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Stub out (disable) spl()s. </td>
 | |
| 	<td> &a.grog; </td>
 | |
| 	<td> 30 August 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Port the BSD/OS ktr code. </td>
 | |
| 	<td> &a.grog;, &a.jhb; </td>
 | |
| 	<td> 30 August 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Rewrite the low level interrupt code (i386 SMP). </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 1 September 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Demonstrated reasonable stability (self-hosted buildworld)
 | |
| 	  (i386 SMP). </td>
 | |
| 	<td> -smp developers </td>
 | |
| 	<td> 6 September 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Demonstrated reasonable stability (self-hosted buildworld)
 | |
| 	  (alpha). </td>
 | |
| 	<td> -smp developers </td>
 | |
| 	<td> 6 September 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make malloc and friends thread-safe. </td>
 | |
| 	<td> &a.jasone; </td>
 | |
| 	<td> 10 September 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Implement msleep(), make tsleep() an msleep() wrapper. </td>
 | |
| 	<td> &a.jake; </td>
 | |
| 	<td> 11 September 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make fxp driver thread-safe. </td>
 | |
| 	<td> &a.cp; </td>
 | |
| 	<td> 17 September 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make mbuf's thread-safe. </td>
 | |
| 	<td> &a.bmilekic; </td>
 | |
| 	<td> 29 September 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock manager re-work. </td>
 | |
| 	<td> &a.jasone; </td>
 | |
| 	<td> 3 October 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Implement heavy-weight interrupt threads (alpha). </td>
 | |
| 	<td> &a.jhb;, &a.dfr; </td>
 | |
| 	<td> 5 October 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Rewrite the low level interrupt code (alpha). </td>
 | |
| 	<td> &a.dfr;, &a.jhb; </td>
 | |
| 	<td> 5 October 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Process accounting. </td>
 | |
| 	<td> &a.tegge;, &a.jhb; </td>
 | |
| 	<td> 5 October 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make ethernet drivers thread-safe. </td>
 | |
| 	<td> &a.wpaul; </td>
 | |
| 	<td> 15 October 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make the mutex headers mostly machine-independent. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 20 October 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Rename SMP_DEBUG to MUTEX_DEBUG. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 20 October 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Give each soft interrupt its own thread. </td>
 | |
| 	<td> &a.cp; </td>
 | |
| 	<td> 25 October 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make sf_bufs (sendfile(2)) thread-safe. </td>
 | |
| 	<td> &a.bmilekic; </td>
 | |
| 	<td> 5 November 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make the witness code work correctly. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 18 November 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Split the ktr-specific code out of db_interface.c. </td>
 | |
| 	<td> &a.jhb;  </td>
 | |
| 	<td> 15 December 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Convert the sio driver to using a spin mutex. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 18 December 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
|   	
 | |
|       <tr>
 | |
| 	<td> Implement condition variables. </td>
 | |
| 	<td> &a.jake;, &a.jasone; </td>
 | |
| 	<td> 15 January 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add a flag to mtx_init() (MTX_RECURSE) that denotes
 | |
| 	  whether a mutex is allowed to recurse. </td>
 | |
| 	<td> &a.bmilekic; </td>
 | |
| 	<td> 19 January 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make the zone allocator thread-safe. </td>
 | |
| 	<td> &a.des; </td>
 | |
| 	<td> 21 January 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Convert simplelocks to mutexes. </td>
 | |
| 	<td> &a.jasone; </td>
 | |
| 	<td> 24 January 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make kernel preemptive with respect to interrupts. </td>
 | |
| 	<td> &a.jake; </td>
 | |
| 	<td> 31 January 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Cleanup of mutex API. </td>
 | |
| 	<td> &a.bmilekic; </td>
 | |
| 	<td> 8 February 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Remove COM_LOCK. </td>
 | |
| 	<td> &a.markm; </td>
 | |
| 	<td> 11 February 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Merge various scheduling classes into one run queue.
 | |
| 	  Modify scheduler to support preemptable kernel. </td>
 | |
| 	<td> &a.jake; </td>
 | |
| 	<td> 11 February 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make priority propagation work correctly. </td>
 | |
| 	<td> &a.jake; </td>
 | |
| 	<td> 11 February 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make most of the interrupt thread code MI and shared
 | |
| 	  between hardware and software interrupts. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 18 February 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add protection to struct jail and jail-related functionality. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 20 February 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Implement sx (shared/exclusive) locks. </td>
 | |
| 	<td> &a.jasone; </td>
 | |
| 	<td> 5 March 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Generalize/improve witness to handle more complex locking
 | |
| 	  primitives (mtx, sx). </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 28 March 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Convert the allproc and proctree locks from lockmgr locks
 | |
| 	  to sx locks. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 28 March 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make mbuf system use condition variables instead of
 | |
| 	  msleep()/wakeup(). </td>
 | |
| 	<td> &a.bmilekic; </td>
 | |
| 	<td> 2 April 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Remove <sys/mutex.h> includes from other kernel
 | |
| 	  headers such as <vm/vm_zone.h>, <sys/resourcevar.h>,
 | |
| 	  <sys/ucred.h>, and <sys/mbuf.h>. </td>
 | |
| 	<td> &a.markm; </td>
 | |
| 	<td> 15 May 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Cleanup the various mp_machdep.c's, unify various SMP
 | |
| 	  API's such as IPI delivery, etc. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 15 May 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make most of the forward_* and forwarded_* functions MI. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 15 May 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Complete the MD support for SMP on the Alpha platform.</td>
 | |
| 	<td> &a.gallatin;, &a.dfr;, &a.jhb; </td>
 | |
| 	<td> 15 May 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Convert select() to use condition variables. </td>
 | |
| 	<td> &a.tanimura; </td>
 | |
| 	<td> 15 May 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add a "giant" lock around the VM subsystem. </td>
 | |
| 	<td> &a.alfred; </td>
 | |
| 	<td> 13 June 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Introduce a modified slab allocator for the mbuf subsystem. </td>
 | |
| 	<td> &a.bmilekic; </td>
 | |
| 	<td> 21 June 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add a witness_assert() function to handle lock assertions. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 27 June 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Extend sx locks to support try lock operations. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 27 June 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Document KTR. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 28 June 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make fork_return, fork_exit, ast, and userret MI. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 29 June 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make sched_lock's savecrit a per-process property saved
 | |
| 	  and restored in mi_switch and initialized in fork_exit. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 30 June 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make ast() loop. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 10 August 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add upgrade/downgrade sx lock operations. </td>
 | |
| 	<td> &a.kan;, &a.jasone; </td>
 | |
| 	<td> 13 August 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Implement semaphores. </td>
 | |
| 	<td> &a.jasone; </td>
 | |
| 	<td> 14 August 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add support for upgrade/downgrades in witness. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 23 August 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make most of cpu_wait() and cpu_exit() MI. </td>
 | |
| 	<td> &a.peter; </td>
 | |
| 	<td> 9 September 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Split NFS into client and server. </td>
 | |
| 	<td> &a.peter; </td>
 | |
| 	<td> 18 Oct 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock taskqueues. </td>
 | |
| 	<td> &a.arr;, &a.jhb; </td>
 | |
| 	<td> 25 October 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add a per-thread ucred reference. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 25 October 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make most of the per-CPU stuff MI. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 11 December 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make critical section saved state per-thread instead of per-lock
 | |
| 	  so that interlocking spin locks work properly. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 17 December 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Replace the APIC-specific imen_mtx with a MI-named icu_lock to
 | |
| 	  protect interrupt controllers and associated data within the kernel
 | |
| 	  for both i386 and alpha. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 20 December 2001 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Use the per-thread critical section nesting level in the mutex
 | |
| 	    and interrupt thread code to automatically determine when to not
 | |
| 	    preempt.  This makes the MTX_NOSWITCH, SWI_SWITCH, and
 | |
| 	    SWI_NOSWITCH flags obsolete as the kernel will be able to figure
 | |
| 	    out the proper behavior on its own. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 5 January 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock struct filedesc and struct file. </td>
 | |
| 	<td> &a.tanimura;, &a.alfred; </td>
 | |
| 	<td> 12 January 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock struct pgrp, struct session, and struct sigio. </td>
 | |
| 	<td> &a.tanimura; </td>
 | |
| 	<td> 23 February 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock pipe implementation, but not sigio/fown, VM interactions. </td>
 | |
| 	<td> &a.alfred; </td>
 | |
| 	<td> 27 February 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Move to explicit reference counting for soft vnode references.
 | |
| 	  </td>
 | |
| 	<td> &a.phk; </td>
 | |
| 	<td> 8 March 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Initialize mutex pools early enough that sx locks can be used
 | |
| 	  for VM. </td>
 | |
| 	<td> &a.green; </td>
 | |
| 	<td> 14 March 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
|         <td> Place a global lock (sellock) around selinfo structures to fix a
 | |
|           variety of lock order reversals, and make select() MP-safe. </td>
 | |
|         <td> &a.alfred;, &a.davidc; </td>
 | |
|         <td> 14 March 2002 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Push down Giant on read, write, pread, pwrite system calls,
 | |
| 	  acquiring Giant in the per-subsystem fileop layer for sockets, VFS,
 | |
| 	  etc.</td>
 | |
| 	<td> &a.alfred; </td>
 | |
| 	<td> 15 March 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down kernel module structures. </td>
 | |
| 	<td> &a.arr; </td>
 | |
| 	<td> 18 March 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down kernel linker globals.</td>
 | |
| 	<td> &a.arr; </td>
 | |
| 	<td> 18 March 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Rewrite kernel memory allocator to be a slab allocator that
 | |
| 	  uses per-cpu caches. </td>
 | |
| 	<td> &a.jeff; </td>
 | |
| 	<td> 21 March 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Replace incorrect use of MD critical section API to disable
 | |
| 	  interrupts with a specific interrupt disable API. </td>
 | |
| 	<td> &a.imp;, &a.dfr;, &a.benno;, &a.jhb; </td>
 | |
| 	<td> 21 March 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down access to the shared p_args "process arguments"
 | |
| 	  structure through appropriate protection of that structure and
 | |
| 	  references to it. </td>
 | |
| 	<td> &a.mini; </td>
 | |
| 	<td> 31 March 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Move from flags/tsleep lock to sx locks to protect sysctl
 | |
| 	  tree from updates during sysctl operations. </td>
 | |
| 	<td> &a.mini; </td>
 | |
| 	<td> 1 April 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Create/port userland tool to manage KTR event dumps. </td>
 | |
| 	<td> &a.jake; </td>
 | |
| 	<td> 1 April 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Create MTX_SYSINIT and SX_SYSINIT macros that allow for
 | |
| 	  initializing locks that are subsystem independent. </td>
 | |
| 	<td> &a.arr; </td>
 | |
| 	<td> 2 April 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
|  	<td> Lock down the global securelevel variable. </td>
 | |
| 	<td> &a.arr; </td>
 | |
| 	<td> 2 April 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make grow_stack() MI.  Possibly even a macro or inline. </td>
 | |
| 	<td> &a.alc; </td>
 | |
| 	<td> 6 April 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock use of p_fd, which otherwise can result in corrupted
 | |
| 	  p_fd panics during heavy operation.  Start with a global,
 | |
| 	  and move to per-proc locking. </td>
 | |
| 	<td> &a.alfred;, &a.tanimura; </td>
 | |
| 	<td> 8 April 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock struct pargs. </td>
 | |
| 	<td> &a.mini; </td>
 | |
| 	<td> 9 April 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock sysctl hierarchy. </td>
 | |
| 	<td> &a.mini; </td>
 | |
| 	<td> 9 April 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make {o,}sigreturn() MPSAFE. </td>
 | |
| 	<td> &a.alc; </td>
 | |
| 	<td> 11 April 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Rewrite kernel memory allocator so that Giant is not required
 | |
| 	  for malloc() or free(). </td>
 | |
| 	<td> &a.jeff; </td>
 | |
| 	<td> 2 May 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Replace complex shared/exclusive locking scheme in the VM
 | |
| 	  system with a purely exclusive lockmgr locking scheme, simplifying
 | |
| 	  locking and removing potential livelock/deadlock scenarios. </td>
 | |
| 	<td> &a.green;, &a.alc; </td>
 | |
| 	<td> 3 May 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Push down Giant into readv/writev system calls in style of
 | |
| 	  read/write/pread/pwrite once malloc no longer requires Giant in
 | |
| 	  the handling of iovec structures for uio. </td>
 | |
| 	<td> &a.alc; </td>
 | |
| 	<td> 9 May 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Push down Giant in mprotect(), minherit(), and madvise() so
 | |
| 	  that it is no longer acquired and released directly. </td>
 | |
| 	<td> &a.alc; </td>
 | |
| 	<td> 18 May 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Update suser() and p_can*() APIs to accept threads instead of
 | |
| 	  processes. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 18 May 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Broadly transition to td_ucred from p_ucred once KSE dependencies
 | |
| 	  are in place. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 18 May 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add a witness_sleep() check to uma_zalloc() to catch code
 | |
| 	  calling malloc() or uma_zalloc() while holding non-sleepable
 | |
| 	  locks. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 20 May 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Optimize UP support by changing spin locks to only perform
 | |
| 	  critical section enter and exits. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 21 May 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make sleep mutexes spin if the current lock holder is
 | |
| 	    executing on another CPU. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 21 May 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add support for the IA32 pause instruction to spin loops in
 | |
| 	  locks. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 21 May 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make KTRACE write into tracefiles asynchronously. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 7 June 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
|         <td> Remove Giant from modnext(2), modfnext(2),
 | |
|           modstat(2),and modfind(2).</td>
 | |
|         <td> &a.arr; </td>
 | |
|         <td> 25 June 2002 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Fix synchronization of TLB flushes and invlpg() on x86 SMP. </td>
 | |
| 	<td> &a.peter; </td>
 | |
| 	<td> 12 July 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add KTR(9) tracing for mutex contention. </td>
 | |
| 	<td> &a.iedowse; </td>
 | |
| 	<td> 26 Augist 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make cpu_coredump MI. </td>
 | |
| 	<td> &a.peter; </td>
 | |
| 	<td> 7 September 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add a subsystem lock to the accounting code. </td>
 | |
| 	<td> &a.arr; </td>
 | |
| 	<td> 11 September 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Allow KTR(9) to write trace records to alq(9) record facility.
 | |
| 	  </td>
 | |
| 	<td> &a.jeff; </td>
 | |
| 	<td> 22 September 2002 </tD>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Create mechanism in cdevsw structure to protect
 | |
| 	  thread-unsafe drivers. </td>
 | |
| 	<td> &a.phk; </td>
 | |
| 	<td> 27 September 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Fix SIGXPU and other #if 0'd things in mi_switch(). </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 30 September 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down TrustedBSD MAC implementation. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 11 November 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock eventhandlers. </td>
 | |
| 	<td> &a.msmith;, &a.mini;, &a.jhb; </td>
 | |
| 	<td> 11 March 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Fix PHOLD() so that it blocks to guarantee PS_INMEM. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 22 April 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Fix various procfs_machdep.c to not use sched_lock. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 22 April 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock all references to process credentials and remove Giant
 | |
| 	  from process credential-related system calls. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 1 May 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Merge the procsig and sigacts structures, move the new sigacts
 | |
| 	  structure out of the U-area and add appropriate locking. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
|         <td> 13 May 2003 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Remove Giant from the kill() and killpg() system calls. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
|         <td> 13 May 2003 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Enhance the mutex pool implementation to allow creation and
 | |
| 	  use of multiple, dynamically allocated pools with adjustable pool
 | |
| 	  sizes and mutex options. </td>
 | |
| 	<td> &a.truckman; </td>
 | |
|         <td> 16 July 2003 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Create mutex profiling tool for the kernel so as to measure
 | |
| 	  contention and behavior of kernel mutexes. </td>
 | |
| 	<td> &a.eivind;, &a.des; </td>
 | |
| 	<td> 31 March 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down linker_file_t structures in the kernel linker.</td>
 | |
| 	<td> &a.arr; </td>
 | |
| 	<td> 19 June 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock pipe implementation: VM optimizations. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 4 October 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
|         <td> Reimplement i386 interrupt and SMP code so that SMP kernels
 | |
| 	  work on UP boxes and SMP can be enabled in GENERIC. </td>
 | |
|         <td> &a.jhb; </td>
 | |
|         <td> 3 November 2003 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
|         <td> Implement generic turnstiles to use when blocking on non-sleepable
 | |
| 	  locks. </td>
 | |
|         <td> &a.jhb; </td>
 | |
|         <td> 11 November 2003 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Split witness_lock() into witness_checkorder() and
 | |
| 	  witness_lock().  witness_checkorder() would be called before
 | |
| 	  acquiring a lock to increase the changes of detecting and warning
 | |
| 	  about a reversal prior to deadlocking.  witness_lock() would
 | |
| 	  simply update witness' internal state to note that a lock has
 | |
| 	  been acquired. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 24 January 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock per-process resource limits. </td>
 | |
| 	<td> &a.mtm;, &a.jhb; </td>
 | |
| 	<td> 4 February 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
|         <td> Implement a sleep queue abstraction to be used by both msleep()
 | |
| 	  and condition variables.  This new abstraction should use a hash
 | |
| 	  table of sleep queues with a spin lock on each sleep queue chain
 | |
| 	  similar to turnstile chain locks to make sched_lock finger
 | |
| 	  grained.</td>
 | |
|         <td> &a.jhb; </td>
 | |
|         <td> 27 February 2004 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
|         <td> Remove Giant from jail(2). </td>
 | |
|         <td> &a.arr;, &a.rwatson; </td>
 | |
|         <td> 23 April 2004 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add subsystem locking to NFSv2, NFSv3 server, permitting upcalls
 | |
| 	  and other network-related elements to run Giant-free. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add KTR(9) tracing for UMA allocation/free events. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 05 August 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add KTR(9) tracing for GEOM I/O events. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 21 October 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add KTR(9) tracing for busdma events. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 23 October 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add KTR(9) tracing for critical sections. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 07 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make the kernel fully preemptive. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 24 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock pipe implementation: sigio/fown-related evil. </td>
 | |
| 	<td> &a.alfred; </td>
 | |
| 	<td> 24 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
|        <td> Lock down the SysV IPC code. </td>
 | |
| 	<td> &a.alfred; </td>
 | |
| 	<td> 24 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock contention measurement tool to measure heat of various
 | |
| 	  locks, including Giant, and permit more directed performance and
 | |
| 	  locking strategy optimization. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add KTR(9) tracing to scheduler run queues. </td>
 | |
| 	<td> &a.jeff; </td>
 | |
| 	<td> 26 December 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Review locking strategy and correctness of VFS operations
 | |
| 	  and fix up various failure modes associated with enabling
 | |
| 	  VFS locking assertions. </td>
 | |
| 	<td> &a.jeff; </td>
 | |
| 	<td> 01 January 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Document in-vnode locking strategy, clean it up. </td>
 | |
| 	<td> &a.jeff; </td>
 | |
| 	<td> 01 January 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Run cross-file system VFS without Giant, acquiring Giant
 | |
| 	  conditionally based on a file system flag. </td>
 | |
| 	<td> &a.jeff; </td>
 | |
| 	<td> 01 January 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Run UFS file system MPSAFE. </td>
 | |
| 	<td> &a.jeff; </td>
 | |
| 	<td> 01 January 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add KTR(9) tracing for buffer cache events. </td>
 | |
| 	<td> &a.jeff; </td>
 | |
| 	<td> 24 January 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Break out critical section and spin lock APIs, and re-optimize
 | |
| 	  critical sections to not disable interrupts in hardware due to
 | |
| 	  the high cost on some hardware architectures. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 04 April 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Modify uma(9) to use critical sections to protect per-CPU
 | |
| 	  statistics, instead of mutexdes, in order to optimize access. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 29 April 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Migrate malloc(9) to per-CPU statistics, and use critical
 | |
| 	  sections to optimize access to those statistics. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 29 May 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add KTR(9) support for KTR_VFS to trace additional VFS events,
 | |
| 	  rather than mechanically inserted KTR_VOP events. </td>
 | |
| 	<td> &a.jeff; </td>
 | |
| 	<td> 11 June 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Push the grabbing of Giant into Linux i386 ABI system calls.</td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 13 July 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Push the grabbing of Giant into Linux AXP ABI system calls.</td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 13 July 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Push the grabbing of Giant into SVR4 i386 ABI system calls.</td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 13 July 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Push the grabbing of Giant into OSF/1 AXP ABI system calls.</td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 13 July 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Push the grabbing of Giant into IBCS i386 ABI system calls.</td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 13 July 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add a new witness check for exiting threads to verify that
 | |
| 	  an exiting thread holds no locks. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 2 September 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
|         <td> Implement atomic_fetchadd() for ints. </td>
 | |
|         <td> &a.jhb; </td>
 | |
|         <td> 27 September 2005 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
|         <td> Implement a simple reference count API using atomic operations and
 | |
| 	  use this to replace locks that just protect a reference count. </td>
 | |
|         <td> &a.jhb; </td>
 | |
|         <td> 27 September 2005 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Split the interrupt handler list out of struct ithread into
 | |
| 	  its own structure and only start up kthreads for interrupt
 | |
| 	  vectors that actually have threaded interrupt handlers. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 25 October 2005 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock aio(4). </td>
 | |
| 	<td> &a.davidxu; </td>
 | |
| 	<td> 22 January 2006 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Implement reader/writer locks. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 27 January 2006 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
|         <td> Remove the MPSAFE syscall flag from the syscall table. </td>
 | |
|         <td> &a.jhb; </td>
 | |
|         <td> 28 July 2006 </td>
 | |
|         <td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add sufficient synchronization to printf to avoid printing
 | |
| 	  problems but not so much it doesn't work in debugging contexts. </td>
 | |
| 	<td> &a.jb; </td>
 | |
| 	<td> 1 November 2006 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Expand mutex profiling tool to also profile sx locks. </td>
 | |
| 	<td> &a.kmacy; </td>
 | |
| 	<td> 11 November 2006 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <!-- WIP -->
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock struct proc. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 20 February 2001 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down the tty subsystem. </td>
 | |
| 	<td> Dick Garner, Jeremy Scofield, &a.tmm;, &a.phk; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Fix clock locking to be the same on all platforms. </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 16 November 2001 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make use of process locking and process reference counting
 | |
| 	  to protect debugging interfaces (and procfs). </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 27 February 2002 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make use of process locking to protect process monitoring
 | |
| 	  sysctls, including those employed by 'ps' and related tools.
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 27 February 2002 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down newbus infrastructure to support driver
 | |
| 	  fine-graining. </td>
 | |
| 	<td> &a.imp; </td>
 | |
| 	<td> 28 February 2002 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> SMPng architecture document. </td>
 | |
| 	<td> &a.jhb;, &a.rwatson; </td>
 | |
| 	<td> 28 February 2002 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Move to shared lock for VOP_GETATTR() to reduce blocking during
 | |
| 	  frequent lightweight VFS operations.  Modify namei() to provide
 | |
| 	  a LOOKUP_SHARED flag to indicate when the lock required may be
 | |
| 	  shared instead of exclusive. </td>
 | |
| 	<td> &a.jeff; </td>
 | |
| 	<td> 11 March 2002 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Document existing vm_map locking and verify it's correctness. </td>
 | |
| 	<td> &a.alc; </td>
 | |
| 	<td> 18 May 2002 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Document existing vm_object locking and verify it's
 | |
| 	  correctness. </td>
 | |
| 	<td> &a.alc; </td>
 | |
| 	<td> 4 May 2002 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Implement lazy interrupt thread switching (context
 | |
| 	  stealing) on i386. </td>
 | |
| 	<td> &a.bmilekic;, &a.kan; </td>
 | |
| 	<td> 10 December 2002 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Implement lazy interrupt thread switching (context
 | |
| 	  stealing) on sparc64. </td>
 | |
| 	<td> &a.jake; </td>
 | |
| 	<td> 10 December 2002 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Switch from using lockmgr in VM to using a mutex or exclusive
 | |
| 	  sxlock.  Push down Giant on all VM except for vm_object/VFS and
 | |
| 	  vm_page/pmap components. </td>
 | |
| 	<td> &a.alc; </td>
 | |
| 	<td> 10 December 2002 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Modify device driver API to permit drivers to more easily
 | |
| 	  split "in interrupt context" and "in interrupt thread"
 | |
| 	  code so as to acknowledge interrupts faster.  This will permit
 | |
| 	  lower latency in interrupt handling. </td>
 | |
| 	<td> &a.piso; </td>
 | |
| 	<td> 24 February 2007 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <!-- Stalled -->
 | |
| 
 | |
|       <!-- Not Started -->
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Conditionalize atomic ops in the SMP code that are used
 | |
| 	  for debugging statistics. </td>
 | |
| 	<td> &a.peter; </td>
 | |
| 	<td> 15 March 2001 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Axe schedcpu() in favor of event driven priority updates as
 | |
| 	  much as possible. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 7 September 2001 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Fix *hold (e.g. crhold) to return reference to object. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 7 September 2001 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add witness checking for lockmgr locks. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 7 September 2001 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add ICU spin locks on ia64. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 4 January 2002 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add a witness_sleep() check to copyin/out() and s/fuword(). </td>
 | |
| 	<td> &a.jhb; </td>
 | |
| 	<td> 7 June 2002 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Remove Giant from mi_startup() and push Giant down into
 | |
| 	  individual SYSINIT functions.  Many SYSINIT functions probably do
 | |
| 	  not need Giant anyway. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 21 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
| <!--
 | |
|       <tr>
 | |
|         <td>  </td>
 | |
|         <td>   </td>
 | |
|         <td> D M 2002 </td>
 | |
|         <td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
| -->
 | |
|     </table>
 | |
| 
 | |
|     <p>This table lists the todo subtasks for multithreading the network
 | |
|       stack.</p>
 | |
| 
 | |
|     <table class="tblbasic">
 | |
|       <tr class="heading">
 | |
| 	<th> Task </th>
 | |
| 	<th> Responsible </th>
 | |
| 	<th> Last updated </th>
 | |
| 	<th> Status </th>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Protect network interface queues. </td>
 | |
| 	<td> &a.jlemon; </td>
 | |
| 	<td> 24 November 2000 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock up IP. </td>
 | |
| 	<td> &a.jennifer;, &a.hsu; </td>
 | |
| 	<td> 10 June 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock up TCP. </td>
 | |
| 	<td> &a.jennifer;, &a.hsu;, &a.sam;, &a.rwatson;</td>
 | |
| 	<td> 24 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock up UDP. </td>
 | |
| 	<td> &a.jennifer;, &a.hsu;, &a.rwatson; </td>
 | |
| 	<td> 24 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock ifaddr reference counts. </td>
 | |
| 	<td> &a.hsu; </td>
 | |
| 	<td> 18 December 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock up ifnet list. </td>
 | |
| 	<td> &a.hsu; </td>
 | |
| 	<td> 21 December 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock radix trees. </td>
 | |
| 	<td> &a.hsu; </td>
 | |
| 	<td> 23 December 2002 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock up ARP. </td>
 | |
| 	<td> &a.hsu; </td>
 | |
| 	<td> 16 January 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock up raw IP. </td>
 | |
| 	<td> &a.sam;, &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock divert sockets. </td>
 | |
| 	<td> &a.sam; </td>
 | |
| 	<td> 4 October 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock ipfw2. </td>
 | |
| 	<td> &a.sam; </td>
 | |
| 	<td> 4 October 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock DUMMYNET. </td>
 | |
| 	<td> &a.sam; </td>
 | |
| 	<td> 4 October 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock ethernet bridge. </td>
 | |
| 	<td> &a.sam; </td>
 | |
| 	<td> 4 October 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock IP fragment queues. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 4 October 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock routing entries. </td>
 | |
| 	<td> &a.sam; </td>
 | |
| 	<td> 4 October 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock FAST_IPSEC. </td>
 | |
| 	<td> &a.sam; </td>
 | |
| 	<td> 4 October 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Permit parallel entry into isr processing. </td>
 | |
| 	<td> &a.rwatson;, &a.sam; </td>
 | |
| 	<td> 11 October 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock if_disc "discard interface". </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 9 March 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock if_faith "IPv6-to-IPv4 TCP relay interface. " </td>
 | |
| 	<td> &a.sam;, &a.rwatson; </td>
 | |
| 	<td> 9 March 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock if_gif "generic tunnel interface". </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 9 March 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Review ECN tunnel support (ip_ecn.c). </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 9 March 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> if_tap global and softc locking. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> if_tun global and softc locking. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> netatalk/aarp.c locking. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Cache socket MAC label in inpcb label for IPv4 sockets so that
 | |
| 	  the label can be used safely at the inet layer without socket
 | |
| 	  locks. </tD>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> IP encapsulation subroutines (ip_encap.c). </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock globals in loopback interface (if_loop.c). </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Use m_tags in if_gif to limit looping configurations, rather
 | |
| 	  than a non-MPSAFE static coutner. </td>
 | |
| 	<td> &a.ru; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> netatalk DDP PCB locking. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock up syncache. </td>
 | |
| 	<td> &a.hsu;, &a.sam; </td>
 | |
| 	<td> 10 November 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Permit IP forwarding path to run Giant-free. </td>
 | |
| 	<td> &a.sam; </td>
 | |
| 	<td> 1 December 2003 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock &unix; domain protocols, fifofs. </td>
 | |
| 	<td> &a.sam;, &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Giant lock over NFS server to protect against so_upcall() w/o Giant </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock interface cloning meta-data. </td>
 | |
| 	<td> &a.brooks; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Apply combination of socket and socket buffer locks, label caching
 | |
| 	  to MAC labels on sockets so that they can be used safely without
 | |
| 	  Giant. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Make routing socket message dispatch use a netisr to avoid
 | |
| 	  re-entering the socket code from the routing code, resolving lock
 | |
| 	  order issues. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Introduce accept locking to protect accept incomplete and
 | |
| 	  complete queues on listen sockets. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Break out socket buffer wakeup, socket buffer append, socket
 | |
| 	  state change, socket buffer reserve, flush, etc, calls into
 | |
| 	  _locked() and unlocked versions, and avoid conditional locking.
 | |
| 	  </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down AARP, AppleTalk Address Resolution Protocol. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Fix pull/push cache data synchronization issues in sosend(),
 | |
| 	  soreceive(), allowing them to run Giant-free. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Protect socket global counters/limits and generation number
 | |
| 	  with a mutex. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down unit allocation meta-data in interface related
 | |
| 	  netgraph modules. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down socket buffer OOB fields across TCP/IP, IPX. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add MSG_NBIO so that fifofs can avoid frobbing SO_NBIO in
 | |
| 	  a manner that risks races. </td>
 | |
| 	<td> &a.truckman; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Protect all use of so_count with socket lock. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Move socket buffer related state from so_state to sb_state so
 | |
| 	  it can be properly locked by the socket buffer mutex. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Introduce a temporary global lock to lock the if_label field
 | |
| 	  used by the MAC Framework. </tD>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Push VFS-specific behavior out of fdrop_locked() and acquire
 | |
| 	  Giant in the fo_close per-object methods rather than
 | |
| 	  fdrop_locked(), so that pipes and sockets can run fo_close()
 | |
| 	  Giant-free. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Push Giant acquisition into fo_stat() file descriptor stat
 | |
| 	  operation, rather than acquiring it in fstat(), so that fstat()
 | |
| 	  on sockets and pipes can run Giant-free. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Don't hold socket locks over entry to protocol switch methods,
 | |
| 	  allowing protocol methods to acquire socket locks after protocol
 | |
| 	  locks in the lock order. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 July 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Port inpcb mutex locking, assertions from IPv4 to IPv6. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 8 August 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add IFF_NEEDSGIANT to allow if_start to run with Giant for
 | |
| 	  specific interfaces.  Defer if_start to task queue. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 8 August 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Push down Giant in stat(), fo_stat() to allow Giant-free stat
 | |
| 	  of pipes, sockets. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 8 August 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Add TCP lock assertions. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock socket layer. </td>
 | |
| 	<td> &a.sam;, &a.rwatson; </td>
 | |
| 	<td> 24 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Review TCP timer code. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Analyze and reduce cost of entropy gathering in network critical
 | |
| 	  paths. </td>
 | |
| 	<td> &a.rwatson;, &a.markm; </td>
 | |
| 	<td> 24 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Allow code to declare NET_NEEDS_GIANT(), forcing Giant over the
 | |
| 	  network stack if that code is compiled into the kernel. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 28 August 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Disable Giant over the network stack in the default
 | |
| 	  configuration. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 28 August 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Additional KTR tracing for UMA, callouts, interrupts, etc. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 07 November 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Move to using file descriptor reference counts instead of
 | |
| 	  socket reference counts for socket system calls, avoiding extra
 | |
| 	  reference couht operations. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 24 October 2004 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down netnatm. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> April 2006 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Default to direct dispatch from ithreads </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 28 November 2006 </td>
 | |
| 	<td> &status.done; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <!-- WIP -->
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock IPv6. </td>
 | |
| 	<td> &a.sam;, &a.rwatson;, &a.ume;, &a.mlaier; </td>
 | |
| 	<td> 8 August 2004 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> if_ppp global, per-softc locking. </td>
 | |
| 	<td> &a.rwatson;, Maurycy Pawlowski-Wieronski <maurycy@fouk.org> </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock struct ifnet. </td>
 | |
| 	<td> &a.mlaier;, &a.luigi;, Maurycy Pawlowski-Wieronski <maurycy@fouk.org> </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock IPv4, IPv6, atalk interface address lists. </td>
 | |
| 	<td> &a.mlaier;, &a.rwatson; </td>
 | |
| 	<td> 8 August 2004 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock consumers of BSD compress (bsd_comp.c) code to protect
 | |
| 	  compression state. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock global and softc state for six-to-four converter (if_stf.c). </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock down global and softc state for SLIP (if_sl.c). </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock global and softc state for SPPP (if_sppsubr.c). </td>
 | |
| 	<td> &a.rik;, &a.rwatson; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> IGMP locking. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 23 April 2004 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> IP ID locking. </td>
 | |
| 	<td> &a.ups; </td>
 | |
| 	<td> 24 June 2005 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Locking for polling(4). </td>
 | |
| 	<td> &a.pjd;, &a.glebius; </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> BPF locking needs some cleanup, there are some race conditions there relating to interface removal. </td>
 | |
| 	<td> &a.csjp; </td>
 | |
| 	<td> 2 June 2006 </td>
 | |
| 	<td> &status.wip; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <!-- Not Started -->
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Reduce contention upon locking a socket buffer by replacing
 | |
| 	     tsleep() and wakeup() with a condvar. </td>
 | |
| 	<td> &a.tanimura; </td>
 | |
| 	<td> 21 April 2002 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock if_ef "ethernet frame" driver. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 9 March 2004 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Further cleanup of socket state machine in order to facilitate finishing socking locking of state transitions. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock KAME IPSEC. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Only one of our ATM stacks is MPSAFE, the other two should be deleted or fixed. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock ND6 (IPv6 Neighbor Discovery). </td>
 | |
| 	<td> &a.gnn; </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock IPv6 multicast address lists. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock IPv4 and IPv6 global address lists. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Continued cleanup of the stack/device driver ownership and locking for struct ifnet needs to be done. Most fields are now either locked or assigned ownership. Some fields, such as if_flags, need a bit more cleanup due to device drivers modifying stack-owned fields. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> When interfaces are torn down, there are a number of races (not all associated with SMPng) that need to be thought about. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Lock if_vlan and inter-layer multicast address manipulation and synchronization in if_vlan. </td>
 | |
| 	<td> &a.glebius;, &a.yar; </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Further investigate locking in in_gif and in6_gif. </td>
 | |
| 	<td>   </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> FAST_IPSEC and KAME IPSEC's PF_KEY support likely needs an asynchronous dispatch to prevent socket lock ordering issues similar to what was done for PF_ROUTE. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Investigate how to eliminate the use of ACCEPT_LOCK(), which currently prevents races in the tear-down of sockets. </td>
 | |
| 	<td> &a.rwatson; </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Fix SMP problems with netgraph restructuring. </td>
 | |
| 	<td> &a.glebius; </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Verify locking in netgraph nodes and improve where necessary. </td>
 | |
| 	<td> &a.glebius; </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> More finely-grained locking for pf(4). </td>
 | |
| 	<td> &a.glebius; </td>
 | |
| 	<td> 19 October 2005 </td>
 | |
| 	<td> &status.new; </td>
 | |
|       </tr>
 | |
| 
 | |
|     </table>
 | |
| 
 | |
|     <a name="issues"></a>
 | |
|     <h2>Known Issues (Historical)</h2>
 | |
| 
 | |
|     <table class="tblbasic">
 | |
|       <tr class="heading">
 | |
| 	<th> Issue </th>
 | |
| 	<th> Last updated </th>
 | |
| 	<th> Status </th>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Idle processor time is not charged to the idle processes. </td>
 | |
| 	<td> 20 September 2000 </td>
 | |
| 	<td> &status.resolved; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> microuptime creeps backwards. </td>
 | |
| 	<td> 4 October 2000 </td>
 | |
| 	<td> &status.resolved; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> microuptime() went backwards </td>
 | |
| 	<td> 4 October 2000 </td>
 | |
| 	<td> &status.resolved; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Process accounting is not accurate (the more CPUs, the
 | |
| 	  closer to correct it is). </td>
 | |
| 	<td> 5 October 2000 </td>
 | |
| 	<td> &status.resolved; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> M_DEVBUF is probably the wrong memory pool for interrupt
 | |
| 	  stuff and we should think about creating a new malloc pool for
 | |
| 	  that stuff. </td>
 | |
| 	<td> 9 February 2001 </td>
 | |
| 	<td> &status.resolved; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> PC card eject panics due to a race condition in the
 | |
| 	  interrupt thread code. </td>
 | |
| 	<td> 15 March 2001 </td>
 | |
| 	<td> &status.resolved; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> SMP x86 boxes are seeing NCPU * 100 clk interrupts and
 | |
| 	  NCPU * 128 rtc interrupts. </td>
 | |
| 	<td> 15 May 2001 </td>
 | |
| 	<td> &status.resolved; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Witness will infinitely recurse when it acquires Giant after
 | |
| 	  sleeping with a sleepable lock. </td>
 | |
| 	<td> 27 June 2001 </td>
 | |
| 	<td> &status.resolved; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Serial gdb does not work if boot_ddb and boot_gdb options
 | |
| 	  are specified. </td>
 | |
| 	<td> 14 July 2002 </td>
 | |
| 	<td> &status.resolved; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Serial gdb does not work at 115200 baud. </td>
 | |
| 	<td> 14 July 2002 </td>
 | |
| 	<td> &status.resolved; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Serial gdb never regains control once 'cont' has been
 | |
| 	  entered. </td>
 | |
| 	<td> 14 July 2002 </td>
 | |
| 	<td> &status.resolved; </td>
 | |
|       </tr>
 | |
| 
 | |
|       <!-- unresolved -->
 | |
| 
 | |
|       <tr>
 | |
| 	<td> Profiling is broken. </td>
 | |
| 	<td> 20 February 2001 </td>
 | |
| 	<td> &status.unresolved; </td>
 | |
|       </tr>
 | |
| 
 | |
| <!--
 | |
|       <tr>
 | |
|         <td> </td>
 | |
|         <td> D M 2002 </td>
 | |
|         <td> &status.unresolved; </td>
 | |
|       </tr>
 | |
| 
 | |
| -->
 | |
|     </table>
 | |
| 
 | |
|     <a name="news"></a>
 | |
|     <h2>News (Historical)</h2>
 | |
| 
 | |
|     <p>The remainder of this page is structured as a
 | |
|       reverse-chronological log.</p>
 | |
| 
 | |
| <!--
 | |
| <b> D M 2002</b>
 | |
| <ul>
 | |
| 	<li> <p>  </p> </li>
 | |
| </ul>
 | |
| -->
 | |
|     <b>28 August 2004</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>&a.rwatson; threw the switch to change the network stack to run
 | |
| 	without the Giant lock by default, permitting the network stack to be
 | |
| 	run on multiple CPUs at a time, as well as to preempt and be
 | |
| 	preempted by other code.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
|     <b>30 October 2003</b>
 | |
|     <ul>
 | |
|       <li>
 | |
|       <p>&a.grog; submitted a
 | |
|         <a href="http://www.lemis.com/grog/SMPng/Singapore/">FreeBSD SMPng paper</a> 
 | |
|        	to the <a href="http://www.aeosc.org/">Asian Enterprise Open Source
 | |
|         Conference</a> in Singapore.  The paper presents a historical view of
 | |
|         SMPng development through 2001, but omits discussion of more recent
 | |
|         progress on the SMPng project, such as substantial performance enhancements
 | |
|         resulting from extensive lock pushdown in the storage subsystem, VM
 | |
|         subsystem, and major IPC subsystems.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>13 January 2002</b>
 | |
|     <ul>
 | |
|       <li>
 | |
|       <p>A <a href =
 | |
|         "http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=122646+0+archive/2002/freebsd-smp/20020113.freebsd-smp">
 | |
|         status report</a> was sent to the -smp mailing list.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>15 May 2001</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>&a.grog; has made his <a href =
 | |
| 	  "http://www.lemis.com/~grog/SMPng/USENIX/">USENIX paper</a> available,
 | |
| 	  which he will present in Boston at the end of June.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>22 March 2001</b>
 | |
|     <ul>
 | |
| 	<li>
 | |
| 	<p>A <a href =
 | |
| 	  "http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=41302+0+archive/2001/freebsd-smp/20010325.freebsd-smp">
 | |
| 	  status report</a> was sent to the -smp mailing list.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>5 March 2001</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>A <a href =
 | |
| 	  "http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=0+0+archive/2001/freebsd-smp/20010311.freebsd-smp">
 | |
| 	  status report</a> was sent to the -smp mailing list.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>24 January 2001</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>A <a href =
 | |
| 	  "http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=38125+0+archive/2001/freebsd-smp/20010128.freebsd-smp">
 | |
| 	  status report</a> was sent to the -smp mailing list.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>12 January 2001</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>A <a href =
 | |
| 	  "http://www.FreeBSD.org/cgi/getmsg.cgi?fetch=45111+48223+/usr/local/www/db/text/2001/freebsd-smp/20010114.freebsd-smp">
 | |
| 	  status report</a> was sent to the -smp mailing list.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>11 October 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>&a.jhb; and &a.cp; came up with a preliminary list of
 | |
| 	  <a href="http://storm.uk.FreeBSD.org/~hiten/smp_synch_rules.html">rules
 | |
| 	  </a> that should be followed when working on kernel
 | |
| 	  synchronization.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>6 September 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>The SMP code has been committed.  All further work is being
 | |
| 	  done in cvs rather than with patches.</p>
 | |
|       </li>
 | |
| 
 | |
|       <li>
 | |
| 	<p>An updated <a
 | |
| 	  href="http://people.FreeBSD.org/~jasone/smp/smpng_patch_9.7">patch</a>
 | |
| 	  is available for download.  This patch is probably what will
 | |
| 	  actually get committed.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>5 September 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>An updated <a
 | |
| 	  href="http://people.FreeBSD.org/~jasone/smp/smpng_patch_9.1">patch</a>
 | |
| 	  is available for download.  This patch makes rtc a fast
 | |
| 	  interrupt, uses locked instructions for mutexes in MP kernels,
 | |
| 	  and corrects mtx_*() linkage within modules.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>1 September 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>The code is working for the most part now on i386 (UP and MP).
 | |
| 	  Some additional coding is still necessary for the alpha,
 | |
| 	  which is being done now.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>30 August 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>Updated patches for i386 and alpha are available <a href =
 | |
| 	  "http://people.FreeBSD.org/~jasone/smp/smpng_patch8.6">here</a>.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>12 August 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>Updated patches for i386 are available <a href =
 | |
| 	  "http://www.FreeBSD.org/~jhb/patches/smpng.patch6">here</a>.
 | |
| 	  Process accounting still doesn't work correctly, but a number
 | |
| 	  of other improvements have been made.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>3 August 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>Patches with functional heavy-weight threads for the i386
 | |
| 	  platform are available <a href =
 | |
| 	  "http://people.FreeBSD.org/~grog/patches4.gz">here</a>.
 | |
| 	  There are a couple of minor issues with this patch set.
 | |
| 	  Specifically, process accounting doesn't work correctly.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>6 July 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>Sheldon Hearn has prepared a mutex(9) man page based on the
 | |
| 	  BSD/OS one, which is available <a href =
 | |
| 	  "http://people.FreeBSD.org/~jake/mutex.9">here</a>.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>5 July 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>&a.jake; put an updated patch <a href =
 | |
| 	  "http://people.FreeBSD.org/~jake/smpng.diff">here</a>.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>3 July 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>&a.jake; has the BSD/OS lock code working now, and has
 | |
| 	  incorporated the pertinent portions of &a.dillon;'s patches
 | |
| 	  (idle processes, some of the schedlock changes, etc.).
 | |
| 	  His patch set is available <a href =
 | |
| 	  "http://people.FreeBSD.org/~jake/smpng2.tar">here</a>.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>26 June 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>&a.cp; has provided the PostScript versions of his
 | |
| 	  presentation slides for the
 | |
| 	  <a href="http://people.FreeBSD.org/~jasone/smp/smp_meeting_slides_1.ps">first day</a> and
 | |
| 	  <a href="http://people.FreeBSD.org/~jasone/smp/smp_meeting_slides_2.ps">second day</a> of the
 | |
| 	  SMP meeting.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>25 June 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>Here's a copy of the
 | |
| 	  <a href="http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=226208+0+archive/2000/freebsd-smp/20000625.freebsd-smp">SMP meeting summary</a>
 | |
| 	  that was posted to the -smp mailing list.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|     <b>19 June 2000</b>
 | |
|     <ul>
 | |
|       <li>
 | |
| 	<p>Here's a copy of the
 | |
| 	  <a href="http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=154884+0+archive/2000/freebsd-current/20000625.freebsd-current">SMP project announcement</a>
 | |
| 	  that was posted to the -current mailing list.</p>
 | |
|       </li>
 | |
|     </ul>
 | |
| 
 | |
|   &footer;
 | |
|   </body>
 | |
| </html>
 |