and IPv6. Indicate IPv4, UDP, and TCP was committed into the tree June of last year. Add some more completed and already committed networking items: ifaddr ref counts, syncache, the ifnet list, radix trees, and ARP. Add some completed, not yet committed, networking work: raw IP, divert sockets, and Unix domain protocols. Add some networking work in progress: routing. Add some networking todo items: IPv6.
1892 lines
46 KiB
Text
1892 lines
46 KiB
Text
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" [
|
|
<!ENTITY base CDATA "..">
|
|
<!ENTITY date "$FreeBSD: www/en/smp/index.sgml,v 1.103 2003/02/24 16:33:05 brueffer Exp $">
|
|
<!ENTITY title "FreeBSD SMP Project">
|
|
<!ENTITY email 'freebsd-smp'>
|
|
<!ENTITY % includes SYSTEM "../includes.sgml"> %includes;
|
|
|
|
<!-- 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 seperate 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="#plan">Project Plan</a></li>
|
|
<li><a href="#resources">Resources and Links</a></li>
|
|
<li><a href="#subsystems">Subsystems and Staffing</a></li>
|
|
<li><a href="#status">Tasks</a></li>
|
|
<li><a href="#issues">Known Issues</a></li>
|
|
<li><a href="#news">News</a></li>
|
|
</ul>
|
|
|
|
<a name="goal"></a>
|
|
<h2>Project Goal</h2>
|
|
|
|
<p>The FreeBSD SMP project, often referred to as SMPng (SMP next
|
|
generation), is focused on implementing fine-grained SMP support
|
|
for the FreeBSD 5.0 kernel (scheduled for November 2002). Due
|
|
to FreeBSD's history, this is much like trying to fit a square
|
|
peg into a round hole, and as such, the intermediate results
|
|
aren't pretty in many ways. We are specifically not attempting
|
|
to rewrite the kernel from scratch, nor are we on a crusade to
|
|
fix all the architectural nits currently present in the kernel.
|
|
In fact, we expect to leave a trail of architectural nits that
|
|
will still be evident in many ways when FreeBSD 5.0 is released.
|
|
This is a pragmatic project rather than a theoretical one; we
|
|
need to have the kernel working and stable in under a year, so
|
|
time restraints require that we be realistic about what to do
|
|
when.</p>
|
|
|
|
<a name="plan"></a>
|
|
<h2>Project Plan</h2>
|
|
|
|
<p>This web page contains information related to the effort to
|
|
improve SMP support in FreeBSD. In general, this project uses
|
|
what it can from the BSD/OS 5.0 development kernel, and
|
|
re-implements what cannot be directly used due to divergence in
|
|
the code bases.</p>
|
|
|
|
<p>As with any free software project, a detailed schedule is not
|
|
possible. We expect to have significant performance and
|
|
stability issues that need to be worked through over the first
|
|
several months of the project, though every effort will be made
|
|
to keep -current running as well as possible.</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 webpage</a>.</p>
|
|
|
|
<p>Tasks are sorted first by status, then by date.</p>
|
|
|
|
<a name="resources"></a>
|
|
<h2>Resources and Links</h2>
|
|
|
|
<ul>
|
|
<li><p>
|
|
<a href="http://storm.uk.FreeBSD.ORG/~hiten/smp_synch_rules.html">
|
|
SMP kernel synchronization rules</a>.</p></li>
|
|
|
|
<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">
|
|
Electronic Resources chapter</a> 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.dillon; is maintaining a
|
|
<a href="http://apollo.backplane.com/FreeBSDSmp/">web page</a>
|
|
that documents the work he is 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>
|
|
</ul>
|
|
|
|
<a name="subsystems"></a>
|
|
<h2>Subsystems and Staffing</h2>
|
|
|
|
<p>This is an incomplete list of high-level kernel subsystems and
|
|
current, active staff working on SMP architecture and stability.</p>
|
|
|
|
<table border=3>
|
|
<tr>
|
|
<th> Subsystem </th>
|
|
<th> Status </th>
|
|
<th> Last updated </th>
|
|
<th> Staffing </th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Newbus </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &a.imp;</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> VM </td>
|
|
<td> In progress </td>
|
|
<td> 5 February 2003 </td>
|
|
<td> &a.alc;</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Buffer cache </td>
|
|
<td> In progress </td>
|
|
<td> 8 February 2003 </td>
|
|
<td> &a.jeff;, &a.phk; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> VFS </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &a.jeff; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Processes and thread operations </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> &a.jhb; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Scheduler </td>
|
|
<td> Complete </td>
|
|
<td> 5 February 2003</td>
|
|
<td> &a.jhb; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> GEOM </td>
|
|
<td> Complete </td>
|
|
<td> 5 February 2003 </td>
|
|
<td> &a.phk; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> File descriptors </td>
|
|
<td> Complete </td>
|
|
<td> 5 February 2003 </td>
|
|
<td> &a.alfred;, &a.tanimura; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> TTY subsystem </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Pipe IPC </td>
|
|
<td> Complete, except for VM optimizations </td>
|
|
<td> 5 February 2003 </td>
|
|
<td> &a.alfred; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Socket structures and system calls </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
<td> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> IPv4, IPv6 </td>
|
|
<td> In progress </td>
|
|
<td> 5 February 2003 </td>
|
|
<td> &a.hsu;, &a.jennifer; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Network stack infrastructure </td>
|
|
<td> In progress </td>
|
|
<td> 5 February 2003 </td>
|
|
<td> &a.hsu; </td>
|
|
</tr>
|
|
</table>
|
|
|
|
<a name="status"></a>
|
|
<h2>Tasks</h2>
|
|
|
|
<p>Following is an incomplete list of general tasks.</p>
|
|
|
|
<table border=3>
|
|
<tr>
|
|
<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> Alexander Kabaev, &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> 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 jail(2). </td>
|
|
<td> &a.arr; </td>
|
|
<td> 25 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> 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> Lock down TrustedBSD MAC implementation. </td>
|
|
<td> &a.rwatson; </td>
|
|
<td> 11 November 2002 </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> Make the kernel fully preemptive. </td>
|
|
<td> &a.jhb; </td>
|
|
<td> 7 September 2001 </td>
|
|
<td> &status.wip; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock down the tty subsystem. </td>
|
|
<td> Dick Garner, Jeremy Scofield, &a.tmm; </td>
|
|
<td> 2 April 2002 </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> Lock pipe implementation: sigio/fown-related evil </td>
|
|
<td> &a.alfred; </td>
|
|
<td> 27 February 2002 </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> Remove the MP safe syscall flag from the syscall table
|
|
and add explicit mtx_lock/unlock's of Giant to all
|
|
syscalls. </td>
|
|
<td> &a.dillon;, &a.mux; </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> 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.wip; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock eventhandlers. </td>
|
|
<td> &a.msmith;, &a.mini; </td>
|
|
<td> 8 April 2002 </td>
|
|
<td> &status.wip; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock sysctl hierarchy and access methods. </td>
|
|
<td> &a.mini; </td>
|
|
<td> 9 April 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 generic turnstiles to use when blocking on non-sleepable
|
|
locks. </td>
|
|
<td> &a.jhb; </td>
|
|
<td> 23 May 2002 </td>
|
|
<td> &status.wip; </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.wip; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock down the SysV IPC code. </td>
|
|
<td> &a.alfred; </td>
|
|
<td> 13 August 2002 </td>
|
|
<td> &status.wip; </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> 10 December 2002 </td>
|
|
<td> &status.wip; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Document in-vnode locking strategy, clean it up, remove
|
|
interlock, switch to sx locks. </td>
|
|
<td> &a.jeff; </td>
|
|
<td> 10 December 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>
|
|
|
|
<!-- Stalled -->
|
|
|
|
<tr>
|
|
<td> Create mechanism in cdevsw structure to protect
|
|
thread-unsafe drivers. </td>
|
|
<td> &a.jhb; </td>
|
|
<td> 15 May 2001 </td>
|
|
<td> &status.stalled; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Make printf() safe to call in almost any situation to avoid
|
|
deadlocks. </td>
|
|
<td> &a.cp; </td>
|
|
<td> 15 May 2001 </td>
|
|
<td> &status.stalled; </td>
|
|
</tr>
|
|
|
|
<!-- Not Started -->
|
|
|
|
<tr>
|
|
<td> Add locking to NFS. </td>
|
|
<td> </td>
|
|
<td> 15 May 2001 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Remove priority argument from tsleep(), msleep(),
|
|
cv_*wait*(). </td>
|
|
<td> </td>
|
|
<td> 12 January 2001 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Reimplement kqueue using condition variables. </td>
|
|
<td> &a.jlemon; </td>
|
|
<td> 15 March 2001 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<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> Add a new witness check for exiting processes to verify that
|
|
an exiting process holds no locks. </td>
|
|
<td> &a.jhb; </td>
|
|
<td> 13 June 2001 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Specify priorities for condition variables, semaphores, and
|
|
sx locks. </td>
|
|
<td> </td>
|
|
<td> 7 September 2001 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Fix SIGXPU and other #if 0'd things in mi_switch(). </td>
|
|
<td> </td>
|
|
<td> 7 September 2001 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Axe schedpu() 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 PHOLD() so that it blocks to guarantee PS_INMEM. </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> Fix various procfs_machdep.c to use PHOLD, not sched_lock. </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> Fast-path push-down of Giant for VOP_READ() and VOP_WRITE(). </td>
|
|
<td> </td>
|
|
<td> 25 February 2002 </td>
|
|
<td> &status.new; </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> </td>
|
|
<td> 25 February 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Push the grabbing of Giant into Linux i386 ABI system calls.</td>
|
|
<td> </td>
|
|
<td> 25 February 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Push the grabbing of Giant into Linux AXP ABI system calls.</td>
|
|
<td> </td>
|
|
<td> 25 February 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Push the grabbing of Giant into SVR4 i386 ABI system calls.</td>
|
|
<td> </td>
|
|
<td> 25 February 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Push the grabbing of Giant into OSF/1 AXP ABI system calls.</td>
|
|
<td> </td>
|
|
<td> 25 February 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Push the grabbing of Giant into IBCS i386 ABI system calls.</td>
|
|
<td> </td>
|
|
<td> 25 February 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock pipe implementation: VM optimizations. </td>
|
|
<td> </td>
|
|
<td> 27 February 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Expand mutex profiling tool to also profile sx locks. </td>
|
|
<td> &a.eivind;, &a.des; </td>
|
|
<td> 1 April 2002 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Implement atomic_fetchadd() for int's and long's with acq and rel
|
|
versions. </td>
|
|
<td> </td>
|
|
<td> 23 May 2002 </td>
|
|
<td> &status.new; </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> </td>
|
|
<td> 23 May 2002 </td>
|
|
<td> &status.new; </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> 23 May 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> 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> 7 June 2002 </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 border=3>
|
|
<tr>
|
|
<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; </td>
|
|
<td> 10 June 2002 </td>
|
|
<td> &status.done; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock up UDP. </td>
|
|
<td> &a.jennifer;, &a.hsu; </td>
|
|
<td> 10 June 2002 </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 syncache. </td>
|
|
<td> &a.hsu; </td>
|
|
<td> 19 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>
|
|
|
|
<!-- WIP -->
|
|
|
|
<tr>
|
|
<td> Lock routing entries. </td>
|
|
<td> </td>
|
|
<td> 29 January 2003 </td>
|
|
<td> &status.wip; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock up raw IP. </td>
|
|
<td> &a.hsu; </td>
|
|
<td> 27 February 2003 </td>
|
|
<td> &status.wip; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock divert sockets. </td>
|
|
<td> &a.hsu; </td>
|
|
<td> 27 February 2003 </td>
|
|
<td> &status.wip; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock up Unix domain protocols. </td>
|
|
<td> &a.hsu; </td>
|
|
<td> 27 February 2003 </td>
|
|
<td> &status.wip; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock up IPv6. </td>
|
|
<td> </td>
|
|
<td> 27 February 2003 </td>
|
|
<td> &status.wip; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock struct ifnet. </td>
|
|
<td> </td>
|
|
<td> 19 January 2001 </td>
|
|
<td> &status.new; </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td> Lock down struct socket. </td>
|
|
<td> &a.tanimura; </td>
|
|
<td> 21 April 2002 </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>
|
|
</table>
|
|
|
|
<a name="issues"></a>
|
|
<h2>Known Issues</h2>
|
|
|
|
<table border=3>
|
|
<tr>
|
|
<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> jail_sysvipc_allowed is checked in an unsafe manner in
|
|
the SYSV IPC syscalls. </td>
|
|
<td> 5 March 2002 </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</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>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>8 September 2000</b>
|
|
<ul>
|
|
<li>
|
|
<p>Here's a copy of an <a
|
|
href="http://people.freebsd.org/~jasone/smp/smp_article">article</a>
|
|
sent to <a href="http://www.bsdtoday.com/">BSDtoday</a> and linked at
|
|
<a href="http://daily.daemonnews.org/">Daemon News</a>.</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>
|