doc/en/smp/index.sgml
John Baldwin c2a67d907b - Update the responsible persons for the tty subsystem.
- Glenn Gombert has volunteered to do the lazy context switching.
- Add several WIP's I have in local trees.
2001-11-16 20:53:40 +00:00

1146 lines
27 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.6 2001/11/07 17:57:11 phantom 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>">
<!-- Contributors -->
<!ENTITY alfred "Alfred Perlstein">
<!ENTITY bmilekic "Bosko Milekic">
<!ENTITY cp "Chuck Paterson">
<!ENTITY dfr "Doug Rabson">
<!ENTITY dillon "Matt Dillon">
<!ENTITY gallatin "Andrew Gallatin">
<!ENTITY green "Brian Feldman">
<!ENTITY grog "Greg Lehey">
<!ENTITY jake "Jake Burkholder">
<!ENTITY jasone "Jason Evans">
<!ENTITY jhb "John Baldwin">
<!ENTITY jlemon "Jonathan Lemon">
<!ENTITY markm "Mark Murray">
<!ENTITY peter "Peter Wemm">
<!ENTITY tanimura "Seigo Tanimura">
]>
<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="#status"></a>Status</li>
<li><a href="#issues">Known Issues</a></li>
<li><a href="#news"></a>News</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>
<a name="resources"></a>
<h2>Resources and Links</h2>
<ul>
<li><p>
<a href="http://people.FreeBSD.org/~jasone/smp/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="../handbook/eresources.html#ERESOURCES-MAIL">
Electronic Resources chapter</a> of the
<a href="../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>&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>
</ul>
<a name="status"></a>
<h2>Status</h2>
<p>Following is an incomplete list of 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> &dillon; </td>
<td> 25 June 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Port the BSD/OS locking primitives (i386). </td>
<td> &jake; </td>
<td> 3 July 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement heavy-weight interrupt threads (i386). </td>
<td> &grog; </td>
<td> 3 August 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Rewrite the low level interrupt code (i386 UP). </td>
<td> &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> &dfr; </td>
<td> 24 August 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Stub out (disable) spl()s. </td>
<td> &grog; </td>
<td> 30 August 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Port the BSD/OS ktr code. </td>
<td> &grog;, &jhb; </td>
<td> 30 August 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Rewrite the low level interrupt code (i386 SMP). </td>
<td> &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> &jasone; </td>
<td> 10 September 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement msleep(), make tsleep() an msleep() wrapper. </td>
<td> &jake; </td>
<td> 11 September 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make fxp driver thread-safe. </td>
<td> &cp; </td>
<td> 17 September 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make mbuf's thread-safe. </td>
<td> &bmilekic; </td>
<td> 29 September 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Lock manager re-work. </td>
<td> &jasone; </td>
<td> 3 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement heavy-weight interrupt threads (alpha). </td>
<td> &jhb;, &dfr; </td>
<td> 5 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Rewrite the low level interrupt code (alpha). </td>
<td> &dfr;, &jhb; </td>
<td> 5 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Process accounting. </td>
<td> Tor Egge, &jhb; </td>
<td> 5 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make ethernet drivers thread-safe. </td>
<td> Bill Paul </td>
<td> 15 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make the mutex headers mostly machine-independent. </td>
<td> &jhb; </td>
<td> 20 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Rename SMP_DEBUG to MUTEX_DEBUG. </td>
<td> &jhb; </td>
<td> 20 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Give each soft interrupt its own thread. </td>
<td> &cp; </td>
<td> 25 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make sf_bufs (sendfile(2)) thread-safe. </td>
<td> &bmilekic; </td>
<td> 5 November 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make the witness code work correctly. </td>
<td> &jhb; </td>
<td> 18 November 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Protect network interface queues. </td>
<td> &jlemon; </td>
<td> 24 November 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Split the ktr-specific code out of db_interface.c. </td>
<td> &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> &jhb; </td>
<td> 18 December 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement condition variables. </td>
<td> &jake;, &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> &bmilekic; </td>
<td> 19 January 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make the zone allocator thread-safe. </td>
<td> Dag-Erling Smorgrav </td>
<td> 21 January 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Convert simplelocks to mutexes. </td>
<td> &jasone; </td>
<td> 24 January 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make kernel preemptive with respect to interrupts. </td>
<td> &jake; </td>
<td> 31 January 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Cleanup of mutex API. </td>
<td> &bmilekic; </td>
<td> 8 February 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Remove COM_LOCK. </td>
<td> &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> &jake; </td>
<td> 11 February 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make priority propagation work correctly. </td>
<td> &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> &jhb; </td>
<td> 18 February 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement sx (shared/exclusive) locks. </td>
<td> &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> &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> &jhb; </td>
<td> 28 March 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Remove &lt;sys/mutex.h&gt; includes from other kernel
headers such as &lt;vm/vm_zone.h&gt;, &lt;sys/resourcevar.h&gt;,
&lt;sys/ucred.h&gt;, and &lt;sys/mbuf.h&gt;. </td>
<td> &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> &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> &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> &gallatin;, &dfr;, &jhb; </td>
<td> 15 May 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Convert select() to use condition variables. </td>
<td> &tanimura; </td>
<td> 15 May 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Add a "giant" lock around the VM subsystem. </td>
<td> &alfred; </td>
<td> 13 June 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Add a witness_assert() function to handle lock assertions. </td>
<td> &jhb; </td>
<td> 27 June 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Extend sx locks to support try lock operations. </td>
<td> &jhb; </td>
<td> 27 June 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Document KTR. </td>
<td> &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> &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> &jhb; </td>
<td> 30 June 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make ast() loop. </td>
<td> &jhb; </td>
<td> 10 August 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Add upgrade/downgrade sx lock operations. </td>
<td> Alexander Kabaev, &jasone; </td>
<td> 13 August 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement semaphores. </td>
<td> &jasone; </td>
<td> 14 August 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Add support for upgrade/downgrades in witness. </td>
<td> &jhb; </td>
<td> 23 August 2001 </td>
<td> &status.done; </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> &dillon; </td>
<td> 7 September 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make most of cpu_wait() and cpu_exit() MI. </td>
<td> &peter; </td>
<td> 9 September 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Split NFS into client and server. </td>
<td> &peter; </td>
<td> 18 Oct 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Lock taskqueues. </td>
<td> Andrew Reiter, &jhb; </td>
<td> 25 October 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Add a per-thread ucred reference. </td>
<td> &jhb; </td>
<td> 25 October 2001 </td>
<td> &status.done; </td>
</tr>
<!-- WIP -->
<tr>
<td> Lock struct proc. </td>
<td> &jhb; </td>
<td> 20 February 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Make mbuf system use condition variables instead of
msleep()/wakeup(). </td>
<td> &bmilekic; </td>
<td> 21 March 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Lock struct filedesc and struct file. </td>
<td> &tanimura;, &alfred; </td>
<td> 14 May 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Lock struct pgrp, struct session, and struct sigio. </td>
<td> &tanimura; </td>
<td> 13 June 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Make KTRACE write into tracefiles asynchronously. </td>
<td> &jhb; </td>
<td> 6 September 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Make the kernel fully preemptive. </td>
<td> &jhb; </td>
<td> 7 September 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Multithread the networking stack. </td>
<td> &alfred;, &jlemon; &bmilekic; </td>
<td> 7 September 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Convert vm_map locks to sx locks. </td>
<td> &green; </td>
<td> 18 October 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Lock down the tty subsystem. </td>
<td> Dick Garner, Jeremy Scofield </td>
<td> 16 November 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Implement lazy interrupt thread switching (context
stealing). </td>
<td> Glenn Gombert </td>
<td> 16 November 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Make most of the per-CPU stuff MI. </td>
<td> &jhb; </td>
<td> 16 November 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Make critical section saved state per-CPU instead of per-lock
so that interlocking spin locks work properly. </td>
<td> &jhb; </td>
<td> 16 November 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Fix clock locking to be the same on all platforms. </td>
<td> &jhb; </td>
<td> 16 November 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Make sleep mutexes spin if the current lock holder is
executing on another CPU. </td>
<td> &jhb; </td>
<td> 16 November 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Add support for the IA32 pause instruction to spin loops in
locks. </td>
<td> &jhb; </td>
<td> 16 November 2001 </td>
<td> &status.wip; </td>
</tr>
<!-- Stalled -->
<tr>
<td> Create mechanism in cdevsw structure to protect
thread-unsafe drivers. </td>
<td> &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> &cp; </td>
<td> 15 May 2001 </td>
<td> &status.stalled; </td>
</tr>
<tr>
<td> Implement trap handler for cmpxchgl on 80386 to support
generic userland atomic operations. </td>
<td> &jake; </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> Use per-CPU buffers for ktr to reduce synchronization. </td>
<td> </td>
<td> 5 September 2000 </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> Lock struct ifnet. </td>
<td> </td>
<td> 19 January 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Reimplement kqueue using condition variables. </td>
<td> &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> &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> &jhb; </td>
<td> 13 June 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Make cpu_core MI. </td>
<td> </td>
<td> 13 June 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Lock struct pargs. </td>
<td> </td>
<td> 20 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> Fix synchronization of TLB flushes and invlpg() on x86 SMP. </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> Make grow_stack() MI. Possibly even a macro or inline. </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> Convert eventhandlers to sx locks. </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> </td>
<td> </td>
<td> D M 2001 </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>
<!-- unresolved -->
<tr>
<td> Serial gdb does not work if boot_ddb and boot_gdb options
are specified. </td>
<td> 5 September 2000 </td>
<td> &status.unresolved; </td>
</tr>
<tr>
<td> Serial gdb does not work at 115200 baud. </td>
<td> 5 September 2000 </td>
<td> &status.unresolved; </td>
</tr>
<tr>
<td> Profiling is broken. </td>
<td> 20 February 2001 </td>
<td> &status.unresolved; </td>
</tr>
<!--
<tr>
<td> </td>
<td> D M 2001 </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 2001</b>
<ul>
<li> <p> </p> </li>
</ul>
-->
<b>15 May 2001</b>
<ul>
<li>
<p>&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>&jhb; and &cp; came up with a preliminary list of
<a href="http://people.freebsd.org/~jasone/smp/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 proably 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>&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>&jake; has the BSD/OS lock code working now, and has
incorporated the pertinent portions of &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>&cp; has provided the PostScript versions of his
presentation slides for the
<a href="smp_meeting_slides_1.ps">first day</a> and
<a href="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="smp_meeting_summary.txt">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="smp_project_announcement.txt">SMP project announcement</a>
that was posted to the -current mailing list.</p>
</li>
</ul>
&footer;
</body>
</html>