View | Details | Raw Unified | Return to bug 168803
Collapse All | Expand All

(-)head/en_US.ISO8859-1/htdocs/smp/index.sgml (-2659 / +12 lines)
Lines 28-39 Link Here
28
      <li><a href="#goal">Project Goal</a></li>
28
      <li><a href="#goal">Project Goal</a></li>
29
      <li><a href="#status">Project Status</a></li>
29
      <li><a href="#status">Project Status</a></li>
30
      <li><a href="#history">Project History</a></li>
30
      <li><a href="#history">Project History</a></li>
31
      <li><a href="#plan">Project Plan (Historical)</a></li>
31
      <li><a href="#papers">Project Papers</a></li>
32
      <li><a href="#resources">Resources and Links</a></li>
33
      <li><a href="#subsystems">Subsystems and Staffing (Historical)</a></li>
34
      <li><a href="#tasks">Tasks (Historical)</a></li>
35
      <li><a href="#issues">Known Issues (Historical)</a></li>
36
      <li><a href="#news">News (Historical)</a></li>
37
    </ul>
32
    </ul>
38
33
39
    <a name="goal"></a>
34
    <a name="goal"></a>
Lines 83-90 Link Here
83
      As of FreeBSD 6.0, the SMPng Project is considered "complete", in that
78
      As of FreeBSD 6.0, the SMPng Project is considered "complete", in that
84
      the goal of moving to parallelized kernel operation has been met for
79
      the goal of moving to parallelized kernel operation has been met for
85
      most significant parts of the kernel.
80
      most significant parts of the kernel.
86
      This web page is largely historical, and is not up-to-date with respect
81
    </p>
87
      to the completion status of items in the task list, etc.</p>
82
    <p>
83
	Work is still ongoing to this day with major advances in performance
84
	being achieved.
85
    </p>
88
86
89
    <a name="history"></a>
87
    <a name="history"></a>
90
    <h2>Project History</h2>
88
    <h2>Project History</h2>
Lines 113-119 Link Here
113
      for most relevant code paths, and the FreeBSD 6.0 kernel introduced
111
      for most relevant code paths, and the FreeBSD 6.0 kernel introduced
114
      MPSAFE VFS, as well as wide-spread performance optimization.</p>
112
      MPSAFE VFS, as well as wide-spread performance optimization.</p>
115
113
116
    <p>Continuing work on SMPng in the 6.x branch has included work sweeping
114
    <p>Continued work on SMPng in the 6.x branch included work sweeping
117
      up the "loose ends" that remain under Giant, such as parts of NFS, and
115
      up the "loose ends" that remain under Giant, such as parts of NFS, and
118
      less commonly used network stack components.</p>
116
      less commonly used network stack components.</p>
119
117
Lines 126-2801 Link Here
126
      run-time kernel lock order verifier, and wide-spread use of lock
124
      run-time kernel lock order verifier, and wide-spread use of lock
127
      assertions and run-time invariants testing.</p>
125
      assertions and run-time invariants testing.</p>
128
126
129
    <a name="plan"></a>
127
    <a name="papers"></a>
130
    <h2>Project Plan (Historical)</h2>
128
    <h2>Project Papers</h2>
131
132
    <p>This web page contains information relating to the SMPng effort;
133
      because of the immense scope of the work and rapid pace of development,
134
      it captures only a subset of what has been done.  As the base SMPng
135
      Project, moving towards fine-grained locking, is complete, this
136
      information is largely historical, and does not attempt to capture
137
      more recent work on locking and multi-processor performance.</p>
138
139
    <p>The task list below is not intended to be complete, but does
140
      represent a set of relevant and/or important components of the
141
      overall work.  The "Responsible" field identifies a developer who
142
      has expressed willingness to be responsible for completing the
143
      identified task; this doesn't preclude others working on it,
144
      but suggests that coordination with the responsible party might
145
      be appropriate so as to avoid unnecessary duplication of work,
146
      and to maximize forward progress.  If beginning work on a new
147
      area of substantial size, or one that appears unclaimed, it may
148
      be worth dropping an e-mail to the FreeBSD SMP mailing list to
149
      see if any progress has been made.</p>
150
151
    <p>The definition of the date field varies depending on the status
152
      of a task.  For completed tasks, it refers to the date completed
153
      or reported completed.  For in-progress tasks, it refers to the
154
      date of the last update of the entry.  For stalled tasks, it
155
      refers to the date that the task was declared stalled.  For
156
      new tasks, it refers to the date the task was added to the list.</p>
157
158
    <p>Locking down of individual device drivers is tracked at
159
      <a href="http://www.FreeBSD.org/projects/busdma/">the busdma and
160
      SMPng driver conversion web page</a>.</p>
161
162
    <p>Network stack locking information is available at &a.rwatson;'s
163
      <a href="http://www.watson.org/~robert/freebsd/netperf/">netperf web
164
      page</a> and the FreeBSD.org <a href="../projects/netperf/">Netperf
165
      web page</a>.
166
      An SMP <a href="../projects/netperf/cluster.html">network performance
167
      cluster</a> has also been created for the purposes of testing.</p>
168
169
    <p>Tasks are sorted first by status, then by date.</p>
170
171
    <a name="resources"></a>
172
    <h2>Resources and Links</h2>
173
174
    <ul>
129
    <ul>
175
      <li><p>Most SMP-related discussion takes place on the
176
	  <a href="mailto:freebsd-smp@FreeBSD.org">freebsd-smp</a>
177
	  mailing list.  You can read more about mailing lists in the
178
	  <a href="../doc/en_US.ISO8859-1/books/handbook/eresources.html#ERESOURCES-MAIL">
179
	  Resources on the Internet</a> appendix of the
180
	  <a href="../doc/en_US.ISO8859-1/books/handbook/index.html">FreeBSD Handbook</a>.</p></li>
181
182
      <li><p>Steve Passe has been maintaining a
183
	  <a href="http://people.FreeBSD.org/~fsmp/SMP/SMP.html">SMP
184
	  project page</a> that contains additional information, and
185
	  goes back further in time than this web page.</p></li>
186
187
      <li><p>&a.rwatson; is maintaining a page for SMP-related network
188
	  performance work for the <a href="../projects/netperf/">Netperf
189
	  project</a>.  In addition, he has a <a
190
	  href="http://www.watson.org/~robert/freebsd/netperf/">a personal
191
	  web page with a change log and other information</a>.</p></li>
192
193
      <li><p><a href="http://www.osnews.com/">OSNews</a> has run an
194
	interview with FreeBSD developers &a.rwatson;, &a.jhb;, and
195
	&a.scottl;, who talk about many features in 6.x, including recent
196
	SMPng work, SMPVFS, and more.  The <a
197
	href="http://www.osnews.com/story.php?news_id=10951">article is
198
	here</a>.</p></li>
199
200
      <li><p>A series of man pages on kernel synchronization and threading
201
	  primitives can be found here:</p>
202
203
	    <ul>
204
	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=mutex&amp;apropos=0&amp;sektion=9">Kernel Mutexes (mutex(9))</a></li>
205
206
	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=mtx_pool&amp;apropos=0&amp;sektion=9">Kernel Mutex Pools (mtx_pool(9))</a></li>
207
208
	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=critical&amp;apropos=0&amp;sektion=9">Kernel Critical Sections (critical(9))</a></li>
209
210
	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=sx&amp;apropos=0&amp;sektion=9">Kernel Shared/Exclusive Locks (sx(9))</a></li>
211
212
	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=condvar&amp;apropos=0&amp;sektion=9">Kernel Condition Variables (condvar(9))</a></li>
213
214
	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=sema&amp;apropos=0&amp;sektion=9">Kernel Semaphores (sema(9))</a></li>
215
216
	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=sleep&amp;apropos=0&amp;sektion=9">Kernel sleep/wakeup API (sleep(9))</a></li>
217
218
	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=kthread&amp;apropos=0&amp;sektion=9">Kernel Threads (kthread(9))</a></li>
219
220
	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=ithread&amp;apropos=0&amp;sektion=9">Interrupt Threads (ithread(9))</a></li>
221
222
	      <li><a href="http://www.freebsd.org/cgi/man.cgi?query=swi&amp;apropos=0&amp;sektion=9">Software Interrupt Threads (swi(9))</a></li>
223
	    </ul>
224
225
	  <br>
226
	  <p>In addition, the old <a href="http://www.freebsd.org/cgi/man.cgi?query=spl&amp;apropos=0&amp;sektion=9">SPL man page</a> may be of interest, as it reflects the previous SMP synchronization model.</p>
227
	</li>
228
229
      <li><p>
230
	  Hiten Pandya's <a
231
	  href="http://storm.uk.FreeBSD.org/~hiten/smp_synch_rules.html">
232
	  SMP kernel synchronization rules</a>.</p></li>
233
234
      <li><p>&a.dillon; maintained a
235
	  <a href="http://apollo.backplane.com/FreeBSDSmp/">web page</a>
236
	  that documented the work he was doing on the SMP project.</p></li>
237
238
      <li>
130
      <li>
239
	<p>
131
	<p>
240
	  <a href="http://www.usenix.org/events/bsdcon02/full_papers/baldwin/baldwin_html/index.html">
241
	  "Locking in the Multithreaded FreeBSD Kernel" USENIX paper by &a.jhb;</a>.
242
	</p>
243
      </li>
244
245
      <li>
246
	<p>
247
	  <a href="http://www.usenix.org/publications/library/proceedings/bsdcon03/tech/hsu.html">
132
	  <a href="http://www.usenix.org/publications/library/proceedings/bsdcon03/tech/hsu.html">
248
	"Reasoning about SMP in FreeBSD" BSDCon'03 paper by &a.hsu;</a>.
133
	"Reasoning about SMP in FreeBSD" BSDCon'03 paper by &a.hsu;</a>.
249
	</p>
134
	</p>
250
      </li>
135
      </li>
251
252
      <li>
136
      <li>
253
	<p>
137
	<p>
254
	  <a href="http://www.usenix.org/publications/library/proceedings/bsdcon03/tech/roberson.html">
138
	  <a href="http://www.usenix.org/publications/library/proceedings/bsdcon03/tech/roberson.html">
255
	"ULE: A Modern Scheduler for FreeBSD" BSDCon'03 paper by &a.jeff;</a>.
139
	"ULE: A Modern Scheduler for FreeBSD" BSDCon'03 paper by &a.jeff;</a>.
256
	</p>
140
	</p>
257
      </li>
141
      </li>
258
259
      <li>
142
      <li>
260
	<p>
143
	<p>
261
	  <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>.
144
	  <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>.
262
	</p>
145
	</p>
263
      </li>
146
      </li>
264
265
    </ul>
266
267
    <a name="subsystems"></a>
268
    <h2>Subsystems and Staffing (Historical)</h2>
269
270
    <p>This is an incomplete list of high-level kernel subsystems and
271
      current, active staff working on SMP architecture and stability.</p>
272
273
    <table class="tblbasic">
274
      <tr class="heading">
275
	<th> Subsystem </th>
276
	<th> Status </th>
277
	<th> Last updated </th>
278
	<th> Staffing </th>
279
      </tr>
280
281
      <tr>
282
	<td> Newbus </td>
283
	<td> &status.wip; </td>
284
	<td> 5 October 2003 </td>
285
	<td> &a.imp;</td>
286
      </tr>
287
288
      <tr>
289
	<td> VM </td>
290
	<td> &status.wip; </td>
291
	<td> 4 October 2003 </td>
292
	<td> &a.alc;</td>
293
      </tr>
294
295
      <tr>
296
	<td> Buffer cache </td>
297
	<td> &status.wip; </td>
298
	<td> 4 October 2003 </td>
299
	<td> &a.jeff;, &a.phk; </td>
300
      </tr>
301
302
      <tr>
303
	<td> VFS </td>
304
	<td> &status.done; </td>
305
	<td> 24 January 2005 </td>
306
	<td> &a.jeff; </td>
307
      </tr>
308
309
      <tr>
310
	<td> Processes and thread operations </td>
311
	<td> &status.wip; </td>
312
	<td> 5 May 2003 </td>
313
	<td> &a.jhb; </td>
314
      </tr>
315
316
      <tr>
317
	<td> Scheduler </td>
318
	<td> &status.done; </td>
319
	<td> 23 April 2004 </td>
320
	<td> &a.jhb;, &a.jeff; </td>
321
      </tr>
322
323
      <tr>
324
	<td> GEOM </td>
325
	<td> &status.done; </td>
326
	<td> 5 February 2003 </td>
327
	<td> &a.phk; </td>
328
      </tr>
329
330
      <tr>
331
	<td> File descriptors </td>
332
	<td> &status.done; </td>
333
	<td> 5 February 2003 </td>
334
	<td> &a.alfred;, &a.tanimura;, &a.rwatson; </td>
335
      </tr>
336
337
      <tr>
338
	<td> TTY subsystem </td>
339
	<td> &status.done; </td>
340
	<td> 20 August 2008 </td>
341
	<td> &a.ed; </td>
342
      </tr>
343
344
      <tr>
345
	<td> Pipe IPC </td>
346
	<td> &status.done; </td>
347
	<td> 4 October 2003 </td>
348
	<td> &a.alfred; </td>
349
      </tr>
350
351
      <tr>
352
	<td> Socket structures and system calls </td>
353
	<td> &status.done; </td>
354
	<td> 25 November 2004 </td>
355
	<td> &a.sam;, &a.rwatson; </td>
356
      </tr>
357
358
      <tr>
359
	<td> KQueue </td>
360
	<td> &status.done; </td>
361
	<td> 24 November 2004 </td>
362
	<td> &a.jmg;, &a.green; </td>
363
      </tr>
364
365
      <tr>
366
	<td> IPv4 </td>
367
	<td> &status.done; </td>
368
	<td> 23 April 2004 </td>
369
	<td> &a.jennifer;, &a.hsu;, &a.sam;, &a.rwatson;, &a.gnn; </td>
370
      </tr>
371
372
      <tr>
373
	<td> IPv6 </td>
374
	<td> &status.wip; </td>
375
	<td> 01 July 2005 </td>
376
	<td> &a.rwatson;, &a.gnn; </td>
377
      </tr>
378
379
      <tr>
380
	<td> IPX/SPX </td>
381
	<td> &status.done; </td>
382
	<td> 09 January 2005 </td>
383
	<td> &a.rwatson; </td>
384
      </tr>
385
386
      <tr>
387
	<td> netatalk </td>
388
	<td> &status.done; </td>
389
	<td> 02 February 2005 </td>
390
	<td> &a.rwatson; </td>
391
      </tr>
392
393
      <tr>
394
	<td> Network stack infrastructure </td>
395
	<td> &status.done; </td>
396
	<td> 28 August 2004 </td>
397
	<td> &a.hsu;, &a.sam;, &a.rwatson;, &a.mlaier;, &a.luigi;, Maurycy Pawlowski-Wieronski &lt;maurycy@fouk.org&gt;, &a.brooks;,
398
	  &a.rik; </td>
399
      </tr>
400
401
      <tr>
402
	<td> NFS Client </td>
403
	<td> &status.done; </td>
404
	<td> 19 May 2006 </td>
405
	<td> &a.mohans; </td>
406
      </tr>
407
408
      <tr>
409
	<td> NFS Server </td>
410
	<td> &status.wip; </td>
411
	<td> 24 February 2007 </td>
412
	<td> &a.rwatson;, &a.jeff; </td>
413
      </tr>
414
415
    </table>
416
417
    <a name="tasks"></a>
418
    <h2>Tasks (Historical)</h2>
419
420
    <p>Following is an incomplete list of general tasks.</p>
421
422
    <table class="tblbasic">
423
      <tr class="heading">
424
	<th> Task </th>
425
	<th> Responsible </th>
426
	<th> Last updated </th>
427
	<th> Status </th>
428
      </tr>
429
430
      <tr>
431
	<td> Convert the giant lock from spinning to blocking, add the
432
	  scheduler lock, add per-CPU idle processes. </td>
433
	<td> &a.dillon; </td>
434
	<td> 25 June 2000 </td>
435
	<td> &status.done; </td>
436
      </tr>
437
438
      <tr>
439
	<td> Port the BSD/OS locking primitives (i386). </td>
440
	<td> &a.jake; </td>
441
	<td> 3 July 2000 </td>
442
	<td> &status.done; </td>
443
      </tr>
444
445
      <tr>
446
	<td> Implement heavy-weight interrupt threads (i386). </td>
447
	<td> &a.grog; </td>
448
	<td> 3 August 2000 </td>
449
	<td> &status.done; </td>
450
      </tr>
451
452
      <tr>
453
	<td> Rewrite the low level interrupt code (i386 UP). </td>
454
	<td> &a.grog; </td>
455
	<td> 3 August 2000 </td>
456
	<td> &status.done; </td>
457
      </tr>
458
459
      <tr>
460
	<td> Demonstrated reasonable stability (self-hosted buildworld)
461
	  (i386 UP). </td>
462
	<td> -smp developers </td>
463
	<td> 12 August 2000 </td>
464
	<td> &status.done; </td>
465
      </tr>
466
467
      <tr>
468
	<td> Port the BSD/OS locking primitives (alpha). </td>
469
	<td> &a.dfr; </td>
470
	<td> 24 August 2000 </td>
471
	<td> &status.done; </td>
472
      </tr>
473
474
      <tr>
475
	<td> Stub out (disable) spl()s. </td>
476
	<td> &a.grog; </td>
477
	<td> 30 August 2000 </td>
478
	<td> &status.done; </td>
479
      </tr>
480
481
      <tr>
482
	<td> Port the BSD/OS ktr code. </td>
483
	<td> &a.grog;, &a.jhb; </td>
484
	<td> 30 August 2000 </td>
485
	<td> &status.done; </td>
486
      </tr>
487
488
      <tr>
489
	<td> Rewrite the low level interrupt code (i386 SMP). </td>
490
	<td> &a.jhb; </td>
491
	<td> 1 September 2000 </td>
492
	<td> &status.done; </td>
493
      </tr>
494
495
      <tr>
496
	<td> Demonstrated reasonable stability (self-hosted buildworld)
497
	  (i386 SMP). </td>
498
	<td> -smp developers </td>
499
	<td> 6 September 2000 </td>
500
	<td> &status.done; </td>
501
      </tr>
502
503
      <tr>
504
	<td> Demonstrated reasonable stability (self-hosted buildworld)
505
	  (alpha). </td>
506
	<td> -smp developers </td>
507
	<td> 6 September 2000 </td>
508
	<td> &status.done; </td>
509
      </tr>
510
511
      <tr>
512
	<td> Make malloc and friends thread-safe. </td>
513
	<td> &a.jasone; </td>
514
	<td> 10 September 2000 </td>
515
	<td> &status.done; </td>
516
      </tr>
517
518
      <tr>
519
	<td> Implement msleep(), make tsleep() an msleep() wrapper. </td>
520
	<td> &a.jake; </td>
521
	<td> 11 September 2000 </td>
522
	<td> &status.done; </td>
523
      </tr>
524
525
      <tr>
526
	<td> Make fxp driver thread-safe. </td>
527
	<td> &a.cp; </td>
528
	<td> 17 September 2000 </td>
529
	<td> &status.done; </td>
530
      </tr>
531
532
      <tr>
533
	<td> Make mbuf's thread-safe. </td>
534
	<td> &a.bmilekic; </td>
535
	<td> 29 September 2000 </td>
536
	<td> &status.done; </td>
537
      </tr>
538
539
      <tr>
540
	<td> Lock manager re-work. </td>
541
	<td> &a.jasone; </td>
542
	<td> 3 October 2000 </td>
543
	<td> &status.done; </td>
544
      </tr>
545
546
      <tr>
547
	<td> Implement heavy-weight interrupt threads (alpha). </td>
548
	<td> &a.jhb;, &a.dfr; </td>
549
	<td> 5 October 2000 </td>
550
	<td> &status.done; </td>
551
      </tr>
552
553
      <tr>
554
	<td> Rewrite the low level interrupt code (alpha). </td>
555
	<td> &a.dfr;, &a.jhb; </td>
556
	<td> 5 October 2000 </td>
557
	<td> &status.done; </td>
558
      </tr>
559
560
      <tr>
561
	<td> Process accounting. </td>
562
	<td> &a.tegge;, &a.jhb; </td>
563
	<td> 5 October 2000 </td>
564
	<td> &status.done; </td>
565
      </tr>
566
567
      <tr>
568
	<td> Make ethernet drivers thread-safe. </td>
569
	<td> &a.wpaul; </td>
570
	<td> 15 October 2000 </td>
571
	<td> &status.done; </td>
572
      </tr>
573
574
      <tr>
575
	<td> Make the mutex headers mostly machine-independent. </td>
576
	<td> &a.jhb; </td>
577
	<td> 20 October 2000 </td>
578
	<td> &status.done; </td>
579
      </tr>
580
581
      <tr>
582
	<td> Rename SMP_DEBUG to MUTEX_DEBUG. </td>
583
	<td> &a.jhb; </td>
584
	<td> 20 October 2000 </td>
585
	<td> &status.done; </td>
586
      </tr>
587
588
      <tr>
589
	<td> Give each soft interrupt its own thread. </td>
590
	<td> &a.cp; </td>
591
	<td> 25 October 2000 </td>
592
	<td> &status.done; </td>
593
      </tr>
594
595
      <tr>
596
	<td> Make sf_bufs (sendfile(2)) thread-safe. </td>
597
	<td> &a.bmilekic; </td>
598
	<td> 5 November 2000 </td>
599
	<td> &status.done; </td>
600
      </tr>
601
602
      <tr>
603
	<td> Make the witness code work correctly. </td>
604
	<td> &a.jhb; </td>
605
	<td> 18 November 2000 </td>
606
	<td> &status.done; </td>
607
      </tr>
608
609
      <tr>
610
	<td> Split the ktr-specific code out of db_interface.c. </td>
611
	<td> &a.jhb;  </td>
612
	<td> 15 December 2000 </td>
613
	<td> &status.done; </td>
614
      </tr>
615
616
      <tr>
617
	<td> Convert the sio driver to using a spin mutex. </td>
618
	<td> &a.jhb; </td>
619
	<td> 18 December 2000 </td>
620
	<td> &status.done; </td>
621
      </tr>
622
  	
623
      <tr>
624
	<td> Implement condition variables. </td>
625
	<td> &a.jake;, &a.jasone; </td>
626
	<td> 15 January 2001 </td>
627
	<td> &status.done; </td>
628
      </tr>
629
630
      <tr>
631
	<td> Add a flag to mtx_init() (MTX_RECURSE) that denotes
632
	  whether a mutex is allowed to recurse. </td>
633
	<td> &a.bmilekic; </td>
634
	<td> 19 January 2001 </td>
635
	<td> &status.done; </td>
636
      </tr>
637
638
      <tr>
639
	<td> Make the zone allocator thread-safe. </td>
640
	<td> &a.des; </td>
641
	<td> 21 January 2001 </td>
642
	<td> &status.done; </td>
643
      </tr>
644
645
      <tr>
646
	<td> Convert simplelocks to mutexes. </td>
647
	<td> &a.jasone; </td>
648
	<td> 24 January 2001 </td>
649
	<td> &status.done; </td>
650
      </tr>
651
652
      <tr>
653
	<td> Make kernel preemptive with respect to interrupts. </td>
654
	<td> &a.jake; </td>
655
	<td> 31 January 2001 </td>
656
	<td> &status.done; </td>
657
      </tr>
658
659
      <tr>
660
	<td> Cleanup of mutex API. </td>
661
	<td> &a.bmilekic; </td>
662
	<td> 8 February 2001 </td>
663
	<td> &status.done; </td>
664
      </tr>
665
666
      <tr>
667
	<td> Remove COM_LOCK. </td>
668
	<td> &a.markm; </td>
669
	<td> 11 February 2001 </td>
670
	<td> &status.done; </td>
671
      </tr>
672
673
      <tr>
674
	<td> Merge various scheduling classes into one run queue.
675
	  Modify scheduler to support preemptable kernel. </td>
676
	<td> &a.jake; </td>
677
	<td> 11 February 2001 </td>
678
	<td> &status.done; </td>
679
      </tr>
680
681
      <tr>
682
	<td> Make priority propagation work correctly. </td>
683
	<td> &a.jake; </td>
684
	<td> 11 February 2001 </td>
685
	<td> &status.done; </td>
686
      </tr>
687
688
      <tr>
689
	<td> Make most of the interrupt thread code MI and shared
690
	  between hardware and software interrupts. </td>
691
	<td> &a.jhb; </td>
692
	<td> 18 February 2001 </td>
693
	<td> &status.done; </td>
694
      </tr>
695
696
      <tr>
697
	<td> Add protection to struct jail and jail-related functionality. </td>
698
	<td> &a.rwatson; </td>
699
	<td> 20 February 2001 </td>
700
	<td> &status.done; </td>
701
      </tr>
702
703
      <tr>
704
	<td> Implement sx (shared/exclusive) locks. </td>
705
	<td> &a.jasone; </td>
706
	<td> 5 March 2001 </td>
707
	<td> &status.done; </td>
708
      </tr>
709
710
      <tr>
711
	<td> Generalize/improve witness to handle more complex locking
712
	  primitives (mtx, sx). </td>
713
	<td> &a.jhb; </td>
714
	<td> 28 March 2001 </td>
715
	<td> &status.done; </td>
716
      </tr>
717
718
      <tr>
719
	<td> Convert the allproc and proctree locks from lockmgr locks
720
	  to sx locks. </td>
721
	<td> &a.jhb; </td>
722
	<td> 28 March 2001 </td>
723
	<td> &status.done; </td>
724
      </tr>
725
726
      <tr>
727
	<td> Make mbuf system use condition variables instead of
728
	  msleep()/wakeup(). </td>
729
	<td> &a.bmilekic; </td>
730
	<td> 2 April 2001 </td>
731
	<td> &status.done; </td>
732
      </tr>
733
734
      <tr>
735
	<td> Remove &lt;sys/mutex.h&gt; includes from other kernel
736
	  headers such as &lt;vm/vm_zone.h&gt;, &lt;sys/resourcevar.h&gt;,
737
	  &lt;sys/ucred.h&gt;, and &lt;sys/mbuf.h&gt;. </td>
738
	<td> &a.markm; </td>
739
	<td> 15 May 2001 </td>
740
	<td> &status.done; </td>
741
      </tr>
742
743
      <tr>
744
	<td> Cleanup the various mp_machdep.c's, unify various SMP
745
	  API's such as IPI delivery, etc. </td>
746
	<td> &a.jhb; </td>
747
	<td> 15 May 2001 </td>
748
	<td> &status.done; </td>
749
      </tr>
750
751
      <tr>
752
	<td> Make most of the forward_* and forwarded_* functions MI. </td>
753
	<td> &a.jhb; </td>
754
	<td> 15 May 2001 </td>
755
	<td> &status.done; </td>
756
      </tr>
757
758
      <tr>
759
	<td> Complete the MD support for SMP on the Alpha platform.</td>
760
	<td> &a.gallatin;, &a.dfr;, &a.jhb; </td>
761
	<td> 15 May 2001 </td>
762
	<td> &status.done; </td>
763
      </tr>
764
765
      <tr>
766
	<td> Convert select() to use condition variables. </td>
767
	<td> &a.tanimura; </td>
768
	<td> 15 May 2001 </td>
769
	<td> &status.done; </td>
770
      </tr>
771
772
      <tr>
773
	<td> Add a "giant" lock around the VM subsystem. </td>
774
	<td> &a.alfred; </td>
775
	<td> 13 June 2001 </td>
776
	<td> &status.done; </td>
777
      </tr>
778
779
      <tr>
780
	<td> Introduce a modified slab allocator for the mbuf subsystem. </td>
781
	<td> &a.bmilekic; </td>
782
	<td> 21 June 2001 </td>
783
	<td> &status.done; </td>
784
      </tr>
785
786
      <tr>
787
	<td> Add a witness_assert() function to handle lock assertions. </td>
788
	<td> &a.jhb; </td>
789
	<td> 27 June 2001 </td>
790
	<td> &status.done; </td>
791
      </tr>
792
793
      <tr>
794
	<td> Extend sx locks to support try lock operations. </td>
795
	<td> &a.jhb; </td>
796
	<td> 27 June 2001 </td>
797
	<td> &status.done; </td>
798
      </tr>
799
800
      <tr>
801
	<td> Document KTR. </td>
802
	<td> &a.jhb; </td>
803
	<td> 28 June 2001 </td>
804
	<td> &status.done; </td>
805
      </tr>
806
807
      <tr>
808
	<td> Make fork_return, fork_exit, ast, and userret MI. </td>
809
	<td> &a.jhb; </td>
810
	<td> 29 June 2001 </td>
811
	<td> &status.done; </td>
812
      </tr>
813
814
      <tr>
815
	<td> Make sched_lock's savecrit a per-process property saved
816
	  and restored in mi_switch and initialized in fork_exit. </td>
817
	<td> &a.jhb; </td>
818
	<td> 30 June 2001 </td>
819
	<td> &status.done; </td>
820
      </tr>
821
822
      <tr>
823
	<td> Make ast() loop. </td>
824
	<td> &a.jhb; </td>
825
	<td> 10 August 2001 </td>
826
	<td> &status.done; </td>
827
      </tr>
828
829
      <tr>
830
	<td> Add upgrade/downgrade sx lock operations. </td>
831
	<td> &a.kan;, &a.jasone; </td>
832
	<td> 13 August 2001 </td>
833
	<td> &status.done; </td>
834
      </tr>
835
836
      <tr>
837
	<td> Implement semaphores. </td>
838
	<td> &a.jasone; </td>
839
	<td> 14 August 2001 </td>
840
	<td> &status.done; </td>
841
      </tr>
842
843
      <tr>
844
	<td> Add support for upgrade/downgrades in witness. </td>
845
	<td> &a.jhb; </td>
846
	<td> 23 August 2001 </td>
847
	<td> &status.done; </td>
848
      </tr>
849
850
      <tr>
851
	<td> Make most of cpu_wait() and cpu_exit() MI. </td>
852
	<td> &a.peter; </td>
853
	<td> 9 September 2001 </td>
854
	<td> &status.done; </td>
855
      </tr>
856
857
      <tr>
858
	<td> Split NFS into client and server. </td>
859
	<td> &a.peter; </td>
860
	<td> 18 Oct 2001 </td>
861
	<td> &status.done; </td>
862
      </tr>
863
864
      <tr>
865
	<td> Lock taskqueues. </td>
866
	<td> &a.arr;, &a.jhb; </td>
867
	<td> 25 October 2001 </td>
868
	<td> &status.done; </td>
869
      </tr>
870
871
      <tr>
872
	<td> Add a per-thread ucred reference. </td>
873
	<td> &a.jhb; </td>
874
	<td> 25 October 2001 </td>
875
	<td> &status.done; </td>
876
      </tr>
877
878
      <tr>
879
	<td> Make most of the per-CPU stuff MI. </td>
880
	<td> &a.jhb; </td>
881
	<td> 11 December 2001 </td>
882
	<td> &status.done; </td>
883
      </tr>
884
885
      <tr>
886
	<td> Make critical section saved state per-thread instead of per-lock
887
	  so that interlocking spin locks work properly. </td>
888
	<td> &a.jhb; </td>
889
	<td> 17 December 2001 </td>
890
	<td> &status.done; </td>
891
      </tr>
892
893
      <tr>
894
	<td> Replace the APIC-specific imen_mtx with a MI-named icu_lock to
895
	  protect interrupt controllers and associated data within the kernel
896
	  for both i386 and alpha. </td>
897
	<td> &a.jhb; </td>
898
	<td> 20 December 2001 </td>
899
	<td> &status.done; </td>
900
      </tr>
901
902
      <tr>
903
	<td> Use the per-thread critical section nesting level in the mutex
904
	    and interrupt thread code to automatically determine when to not
905
	    preempt.  This makes the MTX_NOSWITCH, SWI_SWITCH, and
906
	    SWI_NOSWITCH flags obsolete as the kernel will be able to figure
907
	    out the proper behavior on its own. </td>
908
	<td> &a.jhb; </td>
909
	<td> 5 January 2002 </td>
910
	<td> &status.done; </td>
911
      </tr>
912
913
      <tr>
914
	<td> Lock struct filedesc and struct file. </td>
915
	<td> &a.tanimura;, &a.alfred; </td>
916
	<td> 12 January 2002 </td>
917
	<td> &status.done; </td>
918
      </tr>
919
920
      <tr>
921
	<td> Lock struct pgrp, struct session, and struct sigio. </td>
922
	<td> &a.tanimura; </td>
923
	<td> 23 February 2002 </td>
924
	<td> &status.done; </td>
925
      </tr>
926
927
      <tr>
928
	<td> Lock pipe implementation, but not sigio/fown, VM interactions. </td>
929
	<td> &a.alfred; </td>
930
	<td> 27 February 2002 </td>
931
	<td> &status.done; </td>
932
      </tr>
933
934
      <tr>
935
	<td> Move to explicit reference counting for soft vnode references.
936
	  </td>
937
	<td> &a.phk; </td>
938
	<td> 8 March 2002 </td>
939
	<td> &status.done; </td>
940
      </tr>
941
942
      <tr>
943
	<td> Initialize mutex pools early enough that sx locks can be used
944
	  for VM. </td>
945
	<td> &a.green; </td>
946
	<td> 14 March 2002 </td>
947
	<td> &status.done; </td>
948
      </tr>
949
950
      <tr>
951
        <td> Place a global lock (sellock) around selinfo structures to fix a
952
          variety of lock order reversals, and make select() MP-safe. </td>
953
        <td> &a.alfred;, &a.davidc; </td>
954
        <td> 14 March 2002 </td>
955
        <td> &status.done; </td>
956
      </tr>
957
958
      <tr>
959
	<td> Push down Giant on read, write, pread, pwrite system calls,
960
	  acquiring Giant in the per-subsystem fileop layer for sockets, VFS,
961
	  etc.</td>
962
	<td> &a.alfred; </td>
963
	<td> 15 March 2002 </td>
964
	<td> &status.done; </td>
965
      </tr>
966
967
      <tr>
968
	<td> Lock down kernel module structures. </td>
969
	<td> &a.arr; </td>
970
	<td> 18 March 2002 </td>
971
	<td> &status.done; </td>
972
      </tr>
973
974
      <tr>
975
	<td> Lock down kernel linker globals.</td>
976
	<td> &a.arr; </td>
977
	<td> 18 March 2002 </td>
978
	<td> &status.done; </td>
979
      </tr>
980
981
      <tr>
982
	<td> Rewrite kernel memory allocator to be a slab allocator that
983
	  uses per-cpu caches. </td>
984
	<td> &a.jeff; </td>
985
	<td> 21 March 2002 </td>
986
	<td> &status.done; </td>
987
      </tr>
988
989
      <tr>
990
	<td> Replace incorrect use of MD critical section API to disable
991
	  interrupts with a specific interrupt disable API. </td>
992
	<td> &a.imp;, &a.dfr;, &a.benno;, &a.jhb; </td>
993
	<td> 21 March 2002 </td>
994
	<td> &status.done; </td>
995
      </tr>
996
997
      <tr>
998
	<td> Lock down access to the shared p_args "process arguments"
999
	  structure through appropriate protection of that structure and
1000
	  references to it. </td>
1001
	<td> &a.mini; </td>
1002
	<td> 31 March 2002 </td>
1003
	<td> &status.done; </td>
1004
      </tr>
1005
1006
      <tr>
1007
	<td> Move from flags/tsleep lock to sx locks to protect sysctl
1008
	  tree from updates during sysctl operations. </td>
1009
	<td> &a.mini; </td>
1010
	<td> 1 April 2002 </td>
1011
	<td> &status.done; </td>
1012
      </tr>
1013
1014
      <tr>
1015
	<td> Create/port userland tool to manage KTR event dumps. </td>
1016
	<td> &a.jake; </td>
1017
	<td> 1 April 2002 </td>
1018
	<td> &status.done; </td>
1019
      </tr>
1020
1021
      <tr>
1022
	<td> Create MTX_SYSINIT and SX_SYSINIT macros that allow for
1023
	  initializing locks that are subsystem independent. </td>
1024
	<td> &a.arr; </td>
1025
	<td> 2 April 2002 </td>
1026
	<td> &status.done; </td>
1027
      </tr>
1028
1029
      <tr>
1030
 	<td> Lock down the global securelevel variable. </td>
1031
	<td> &a.arr; </td>
1032
	<td> 2 April 2002 </td>
1033
	<td> &status.done; </td>
1034
      </tr>
1035
1036
      <tr>
1037
	<td> Make grow_stack() MI.  Possibly even a macro or inline. </td>
1038
	<td> &a.alc; </td>
1039
	<td> 6 April 2002 </td>
1040
	<td> &status.done; </td>
1041
      </tr>
1042
1043
      <tr>
1044
	<td> Lock use of p_fd, which otherwise can result in corrupted
1045
	  p_fd panics during heavy operation.  Start with a global,
1046
	  and move to per-proc locking. </td>
1047
	<td> &a.alfred;, &a.tanimura; </td>
1048
	<td> 8 April 2002 </td>
1049
	<td> &status.done; </td>
1050
      </tr>
1051
1052
      <tr>
1053
	<td> Lock struct pargs. </td>
1054
	<td> &a.mini; </td>
1055
	<td> 9 April 2002 </td>
1056
	<td> &status.done; </td>
1057
      </tr>
1058
1059
      <tr>
1060
	<td> Lock sysctl hierarchy. </td>
1061
	<td> &a.mini; </td>
1062
	<td> 9 April 2002 </td>
1063
	<td> &status.done; </td>
1064
      </tr>
1065
1066
      <tr>
1067
	<td> Make {o,}sigreturn() MPSAFE. </td>
1068
	<td> &a.alc; </td>
1069
	<td> 11 April 2002 </td>
1070
	<td> &status.done; </td>
1071
      </tr>
1072
1073
      <tr>
1074
	<td> Rewrite kernel memory allocator so that Giant is not required
1075
	  for malloc() or free(). </td>
1076
	<td> &a.jeff; </td>
1077
	<td> 2 May 2002 </td>
1078
	<td> &status.done; </td>
1079
      </tr>
1080
1081
      <tr>
1082
	<td> Replace complex shared/exclusive locking scheme in the VM
1083
	  system with a purely exclusive lockmgr locking scheme, simplifying
1084
	  locking and removing potential livelock/deadlock scenarios. </td>
1085
	<td> &a.green;, &a.alc; </td>
1086
	<td> 3 May 2002 </td>
1087
	<td> &status.done; </td>
1088
      </tr>
1089
1090
      <tr>
1091
	<td> Push down Giant into readv/writev system calls in style of
1092
	  read/write/pread/pwrite once malloc no longer requires Giant in
1093
	  the handling of iovec structures for uio. </td>
1094
	<td> &a.alc; </td>
1095
	<td> 9 May 2002 </td>
1096
	<td> &status.done; </td>
1097
      </tr>
1098
1099
      <tr>
1100
	<td> Push down Giant in mprotect(), minherit(), and madvise() so
1101
	  that it is no longer acquired and released directly. </td>
1102
	<td> &a.alc; </td>
1103
	<td> 18 May 2002 </td>
1104
	<td> &status.done; </td>
1105
      </tr>
1106
1107
      <tr>
1108
	<td> Update suser() and p_can*() APIs to accept threads instead of
1109
	  processes. </td>
1110
	<td> &a.jhb; </td>
1111
	<td> 18 May 2002 </td>
1112
	<td> &status.done; </td>
1113
      </tr>
1114
1115
      <tr>
1116
	<td> Broadly transition to td_ucred from p_ucred once KSE dependencies
1117
	  are in place. </td>
1118
	<td> &a.jhb; </td>
1119
	<td> 18 May 2002 </td>
1120
	<td> &status.done; </td>
1121
      </tr>
1122
1123
      <tr>
1124
	<td> Add a witness_sleep() check to uma_zalloc() to catch code
1125
	  calling malloc() or uma_zalloc() while holding non-sleepable
1126
	  locks. </td>
1127
	<td> &a.jhb; </td>
1128
	<td> 20 May 2002 </td>
1129
	<td> &status.done; </td>
1130
      </tr>
1131
1132
      <tr>
1133
	<td> Optimize UP support by changing spin locks to only perform
1134
	  critical section enter and exits. </td>
1135
	<td> &a.jhb; </td>
1136
	<td> 21 May 2002 </td>
1137
	<td> &status.done; </td>
1138
      </tr>
1139
1140
      <tr>
1141
	<td> Make sleep mutexes spin if the current lock holder is
1142
	    executing on another CPU. </td>
1143
	<td> &a.jhb; </td>
1144
	<td> 21 May 2002 </td>
1145
	<td> &status.done; </td>
1146
      </tr>
1147
1148
      <tr>
1149
	<td> Add support for the IA32 pause instruction to spin loops in
1150
	  locks. </td>
1151
	<td> &a.jhb; </td>
1152
	<td> 21 May 2002 </td>
1153
	<td> &status.done; </td>
1154
      </tr>
1155
1156
      <tr>
1157
	<td> Make KTRACE write into tracefiles asynchronously. </td>
1158
	<td> &a.jhb; </td>
1159
	<td> 7 June 2002 </td>
1160
	<td> &status.done; </td>
1161
      </tr>
1162
1163
      <tr>
1164
        <td> Remove Giant from modnext(2), modfnext(2),
1165
          modstat(2),and modfind(2).</td>
1166
        <td> &a.arr; </td>
1167
        <td> 25 June 2002 </td>
1168
        <td> &status.done; </td>
1169
      </tr>
1170
1171
      <tr>
1172
	<td> Fix synchronization of TLB flushes and invlpg() on x86 SMP. </td>
1173
	<td> &a.peter; </td>
1174
	<td> 12 July 2002 </td>
1175
	<td> &status.done; </td>
1176
      </tr>
1177
1178
      <tr>
1179
	<td> Add KTR(9) tracing for mutex contention. </td>
1180
	<td> &a.iedowse; </td>
1181
	<td> 26 Augist 2002 </td>
1182
	<td> &status.done; </td>
1183
      </tr>
1184
1185
      <tr>
1186
	<td> Make cpu_coredump MI. </td>
1187
	<td> &a.peter; </td>
1188
	<td> 7 September 2002 </td>
1189
	<td> &status.done; </td>
1190
      </tr>
1191
1192
      <tr>
1193
	<td> Add a subsystem lock to the accounting code. </td>
1194
	<td> &a.arr; </td>
1195
	<td> 11 September 2002 </td>
1196
	<td> &status.done; </td>
1197
      </tr>
1198
1199
      <tr>
1200
	<td> Allow KTR(9) to write trace records to alq(9) record facility.
1201
	  </td>
1202
	<td> &a.jeff; </td>
1203
	<td> 22 September 2002 </tD>
1204
	<td> &status.done; </td>
1205
      </tr>
1206
1207
      <tr>
1208
	<td> Create mechanism in cdevsw structure to protect
1209
	  thread-unsafe drivers. </td>
1210
	<td> &a.phk; </td>
1211
	<td> 27 September 2002 </td>
1212
	<td> &status.done; </td>
1213
      </tr>
1214
1215
      <tr>
1216
	<td> Fix SIGXPU and other #if 0'd things in mi_switch(). </td>
1217
	<td> &a.jhb; </td>
1218
	<td> 30 September 2002 </td>
1219
	<td> &status.done; </td>
1220
      </tr>
1221
1222
      <tr>
1223
	<td> Lock down TrustedBSD MAC implementation. </td>
1224
	<td> &a.rwatson; </td>
1225
	<td> 11 November 2002 </td>
1226
	<td> &status.done; </td>
1227
      </tr>
1228
1229
      <tr>
1230
	<td> Lock eventhandlers. </td>
1231
	<td> &a.msmith;, &a.mini;, &a.jhb; </td>
1232
	<td> 11 March 2003 </td>
1233
	<td> &status.done; </td>
1234
      </tr>
1235
1236
      <tr>
1237
	<td> Fix PHOLD() so that it blocks to guarantee PS_INMEM. </td>
1238
	<td> &a.jhb; </td>
1239
	<td> 22 April 2003 </td>
1240
	<td> &status.done; </td>
1241
      </tr>
1242
1243
      <tr>
1244
	<td> Fix various procfs_machdep.c to not use sched_lock. </td>
1245
	<td> &a.jhb; </td>
1246
	<td> 22 April 2003 </td>
1247
	<td> &status.done; </td>
1248
      </tr>
1249
1250
      <tr>
1251
	<td> Lock all references to process credentials and remove Giant
1252
	  from process credential-related system calls. </td>
1253
	<td> &a.jhb; </td>
1254
	<td> 1 May 2003 </td>
1255
	<td> &status.done; </td>
1256
      </tr>
1257
1258
      <tr>
1259
	<td> Merge the procsig and sigacts structures, move the new sigacts
1260
	  structure out of the U-area and add appropriate locking. </td>
1261
	<td> &a.jhb; </td>
1262
        <td> 13 May 2003 </td>
1263
        <td> &status.done; </td>
1264
      </tr>
1265
1266
      <tr>
1267
	<td> Remove Giant from the kill() and killpg() system calls. </td>
1268
	<td> &a.jhb; </td>
1269
        <td> 13 May 2003 </td>
1270
        <td> &status.done; </td>
1271
      </tr>
1272
1273
      <tr>
1274
	<td> Enhance the mutex pool implementation to allow creation and
1275
	  use of multiple, dynamically allocated pools with adjustable pool
1276
	  sizes and mutex options. </td>
1277
	<td> &a.truckman; </td>
1278
        <td> 16 July 2003 </td>
1279
        <td> &status.done; </td>
1280
      </tr>
1281
1282
      <tr>
1283
	<td> Create mutex profiling tool for the kernel so as to measure
1284
	  contention and behavior of kernel mutexes. </td>
1285
	<td> &a.eivind;, &a.des; </td>
1286
	<td> 31 March 2002 </td>
1287
	<td> &status.done; </td>
1288
      </tr>
1289
1290
      <tr>
1291
	<td> Lock down linker_file_t structures in the kernel linker.</td>
1292
	<td> &a.arr; </td>
1293
	<td> 19 June 2002 </td>
1294
	<td> &status.done; </td>
1295
      </tr>
1296
1297
      <tr>
1298
	<td> Lock pipe implementation: VM optimizations. </td>
1299
	<td> &nbsp; </td>
1300
	<td> 4 October 2003 </td>
1301
	<td> &status.done; </td>
1302
      </tr>
1303
1304
      <tr>
1305
        <td> Reimplement i386 interrupt and SMP code so that SMP kernels
1306
	  work on UP boxes and SMP can be enabled in GENERIC. </td>
1307
        <td> &a.jhb; </td>
1308
        <td> 3 November 2003 </td>
1309
        <td> &status.done; </td>
1310
      </tr>
1311
1312
      <tr>
1313
        <td> Implement generic turnstiles to use when blocking on non-sleepable
1314
	  locks. </td>
1315
        <td> &a.jhb; </td>
1316
        <td> 11 November 2003 </td>
1317
        <td> &status.done; </td>
1318
      </tr>
1319
1320
      <tr>
1321
	<td> Split witness_lock() into witness_checkorder() and
1322
	  witness_lock().  witness_checkorder() would be called before
1323
	  acquiring a lock to increase the changes of detecting and warning
1324
	  about a reversal prior to deadlocking.  witness_lock() would
1325
	  simply update witness' internal state to note that a lock has
1326
	  been acquired. </td>
1327
	<td> &a.jhb; </td>
1328
	<td> 24 January 2004 </td>
1329
	<td> &status.done; </td>
1330
      </tr>
1331
1332
      <tr>
1333
	<td> Lock per-process resource limits. </td>
1334
	<td> &a.mtm;, &a.jhb; </td>
1335
	<td> 4 February 2004 </td>
1336
	<td> &status.done; </td>
1337
      </tr>
1338
1339
      <tr>
1340
        <td> Implement a sleep queue abstraction to be used by both msleep()
1341
	  and condition variables.  This new abstraction should use a hash
1342
	  table of sleep queues with a spin lock on each sleep queue chain
1343
	  similar to turnstile chain locks to make sched_lock finger
1344
	  grained.</td>
1345
        <td> &a.jhb; </td>
1346
        <td> 27 February 2004 </td>
1347
        <td> &status.done; </td>
1348
      </tr>
1349
1350
      <tr>
1351
        <td> Remove Giant from jail(2). </td>
1352
        <td> &a.arr;, &a.rwatson; </td>
1353
        <td> 23 April 2004 </td>
1354
        <td> &status.done; </td>
1355
      </tr>
1356
1357
      <tr>
1358
	<td> Add subsystem locking to NFSv2, NFSv3 server, permitting upcalls
1359
	  and other network-related elements to run Giant-free. </td>
1360
	<td> &a.rwatson; </td>
1361
	<td> 24 July 2004 </td>
1362
	<td> &status.done; </td>
1363
      </tr>
1364
1365
      <tr>
1366
	<td> Add KTR(9) tracing for UMA allocation/free events. </td>
1367
	<td> &a.rwatson; </td>
1368
	<td> 05 August 2004 </td>
1369
	<td> &status.done; </td>
1370
      </tr>
1371
1372
      <tr>
1373
	<td> Add KTR(9) tracing for GEOM I/O events. </td>
1374
	<td> &a.rwatson; </td>
1375
	<td> 21 October 2004 </td>
1376
	<td> &status.done; </td>
1377
      </tr>
1378
1379
      <tr>
1380
	<td> Add KTR(9) tracing for busdma events. </td>
1381
	<td> &a.rwatson; </td>
1382
	<td> 23 October 2004 </td>
1383
	<td> &status.done; </td>
1384
      </tr>
1385
1386
      <tr>
1387
	<td> Add KTR(9) tracing for critical sections. </td>
1388
	<td> &a.rwatson; </td>
1389
	<td> 07 November 2004 </td>
1390
	<td> &status.done; </td>
1391
      </tr>
1392
1393
      <tr>
1394
	<td> Make the kernel fully preemptive. </td>
1395
	<td> &a.jhb; </td>
1396
	<td> 24 November 2004 </td>
1397
	<td> &status.done; </td>
1398
      </tr>
1399
1400
      <tr>
1401
	<td> Lock pipe implementation: sigio/fown-related evil. </td>
1402
	<td> &a.alfred; </td>
1403
	<td> 24 November 2004 </td>
1404
	<td> &status.done; </td>
1405
      </tr>
1406
1407
      <tr>
1408
       <td> Lock down the SysV IPC code. </td>
1409
	<td> &a.alfred; </td>
1410
	<td> 24 November 2004 </td>
1411
	<td> &status.done; </td>
1412
      </tr>
1413
1414
      <tr>
1415
	<td> Lock contention measurement tool to measure heat of various
1416
	  locks, including Giant, and permit more directed performance and
1417
	  locking strategy optimization. </td>
1418
	<td> &a.rwatson; </td>
1419
	<td> 24 November 2004 </td>
1420
	<td> &status.done; </td>
1421
      </tr>
1422
1423
      <tr>
1424
	<td> Add KTR(9) tracing to scheduler run queues. </td>
1425
	<td> &a.jeff; </td>
1426
	<td> 26 December 2004 </td>
1427
	<td> &status.done; </td>
1428
      </tr>
1429
1430
      <tr>
1431
	<td> Review locking strategy and correctness of VFS operations
1432
	  and fix up various failure modes associated with enabling
1433
	  VFS locking assertions. </td>
1434
	<td> &a.jeff; </td>
1435
	<td> 01 January 2005 </td>
1436
	<td> &status.done; </td>
1437
      </tr>
1438
1439
      <tr>
1440
	<td> Document in-vnode locking strategy, clean it up. </td>
1441
	<td> &a.jeff; </td>
1442
	<td> 01 January 2005 </td>
1443
	<td> &status.done; </td>
1444
      </tr>
1445
1446
      <tr>
1447
	<td> Run cross-file system VFS without Giant, acquiring Giant
1448
	  conditionally based on a file system flag. </td>
1449
	<td> &a.jeff; </td>
1450
	<td> 01 January 2005 </td>
1451
	<td> &status.done; </td>
1452
      </tr>
1453
1454
      <tr>
1455
	<td> Run UFS file system MPSAFE. </td>
1456
	<td> &a.jeff; </td>
1457
	<td> 01 January 2005 </td>
1458
	<td> &status.done; </td>
1459
      </tr>
1460
1461
      <tr>
1462
	<td> Add KTR(9) tracing for buffer cache events. </td>
1463
	<td> &a.jeff; </td>
1464
	<td> 24 January 2005 </td>
1465
	<td> &status.done; </td>
1466
      </tr>
1467
1468
      <tr>
1469
	<td> Break out critical section and spin lock APIs, and re-optimize
1470
	  critical sections to not disable interrupts in hardware due to
1471
	  the high cost on some hardware architectures. </td>
1472
	<td> &a.jhb; </td>
1473
	<td> 04 April 2005 </td>
1474
	<td> &status.done; </td>
1475
      </tr>
1476
1477
      <tr>
1478
	<td> Modify uma(9) to use critical sections to protect per-CPU
1479
	  statistics, instead of mutexdes, in order to optimize access. </td>
1480
	<td> &a.rwatson; </td>
1481
	<td> 29 April 2005 </td>
1482
	<td> &status.done; </td>
1483
      </tr>
1484
1485
      <tr>
1486
	<td> Migrate malloc(9) to per-CPU statistics, and use critical
1487
	  sections to optimize access to those statistics. </td>
1488
	<td> &a.rwatson; </td>
1489
	<td> 29 May 2005 </td>
1490
	<td> &status.done; </td>
1491
      </tr>
1492
1493
      <tr>
1494
	<td> Add KTR(9) support for KTR_VFS to trace additional VFS events,
1495
	  rather than mechanically inserted KTR_VOP events. </td>
1496
	<td> &a.jeff; </td>
1497
	<td> 11 June 2005 </td>
1498
	<td> &status.done; </td>
1499
      </tr>
1500
1501
      <tr>
1502
	<td> Push the grabbing of Giant into Linux i386 ABI system calls.</td>
1503
	<td> &a.jhb; </td>
1504
	<td> 13 July 2005 </td>
1505
	<td> &status.done; </td>
1506
      </tr>
1507
1508
      <tr>
1509
	<td> Push the grabbing of Giant into Linux AXP ABI system calls.</td>
1510
	<td> &a.jhb; </td>
1511
	<td> 13 July 2005 </td>
1512
	<td> &status.done; </td>
1513
      </tr>
1514
1515
      <tr>
1516
	<td> Push the grabbing of Giant into SVR4 i386 ABI system calls.</td>
1517
	<td> &a.jhb; </td>
1518
	<td> 13 July 2005 </td>
1519
	<td> &status.done; </td>
1520
      </tr>
1521
1522
      <tr>
1523
	<td> Push the grabbing of Giant into OSF/1 AXP ABI system calls.</td>
1524
	<td> &a.jhb; </td>
1525
	<td> 13 July 2005 </td>
1526
	<td> &status.done; </td>
1527
      </tr>
1528
1529
      <tr>
1530
	<td> Push the grabbing of Giant into IBCS i386 ABI system calls.</td>
1531
	<td> &a.jhb; </td>
1532
	<td> 13 July 2005 </td>
1533
	<td> &status.done; </td>
1534
      </tr>
1535
1536
      <tr>
1537
	<td> Add a new witness check for exiting threads to verify that
1538
	  an exiting thread holds no locks. </td>
1539
	<td> &a.jhb; </td>
1540
	<td> 2 September 2005 </td>
1541
	<td> &status.done; </td>
1542
      </tr>
1543
1544
      <tr>
1545
        <td> Implement atomic_fetchadd() for ints. </td>
1546
        <td> &a.jhb; </td>
1547
        <td> 27 September 2005 </td>
1548
        <td> &status.done; </td>
1549
      </tr>
1550
1551
      <tr>
1552
        <td> Implement a simple reference count API using atomic operations and
1553
	  use this to replace locks that just protect a reference count. </td>
1554
        <td> &a.jhb; </td>
1555
        <td> 27 September 2005 </td>
1556
        <td> &status.done; </td>
1557
      </tr>
1558
1559
      <tr>
1560
	<td> Split the interrupt handler list out of struct ithread into
1561
	  its own structure and only start up kthreads for interrupt
1562
	  vectors that actually have threaded interrupt handlers. </td>
1563
	<td> &a.jhb; </td>
1564
	<td> 25 October 2005 </td>
1565
	<td> &status.done; </td>
1566
      </tr>
1567
1568
      <tr>
1569
	<td> Lock aio(4). </td>
1570
	<td> &a.davidxu; </td>
1571
	<td> 22 January 2006 </td>
1572
	<td> &status.done; </td>
1573
      </tr>
1574
1575
      <tr>
1576
	<td> Implement reader/writer locks. </td>
1577
	<td> &a.jhb; </td>
1578
	<td> 27 January 2006 </td>
1579
	<td> &status.done; </td>
1580
      </tr>
1581
1582
      <tr>
1583
        <td> Remove the MPSAFE syscall flag from the syscall table. </td>
1584
        <td> &a.jhb; </td>
1585
        <td> 28 July 2006 </td>
1586
        <td> &status.done; </td>
1587
      </tr>
1588
1589
      <tr>
1590
	<td> Add sufficient synchronization to printf to avoid printing
1591
	  problems but not so much it doesn't work in debugging contexts. </td>
1592
	<td> &a.jb; </td>
1593
	<td> 1 November 2006 </td>
1594
	<td> &status.done; </td>
1595
      </tr>
1596
1597
      <tr>
1598
	<td> Expand mutex profiling tool to also profile sx locks. </td>
1599
	<td> &a.kmacy; </td>
1600
	<td> 11 November 2006 </td>
1601
	<td> &status.done; </td>
1602
      </tr>
1603
1604
      <tr>
1605
	<td> Lock down the TTY subsystem. </td>
1606
	<td> &a.ed; </td>
1607
	<td> 20 August 2008 </td>
1608
	<td> &status.done; </td>
1609
      </tr>
1610
1611
      <!-- WIP -->
1612
1613
      <tr>
1614
	<td> Lock struct proc. </td>
1615
	<td> &a.jhb; </td>
1616
	<td> 20 February 2001 </td>
1617
	<td> &status.wip; </td>
1618
      </tr>
1619
1620
      <tr>
1621
	<td> Fix clock locking to be the same on all platforms. </td>
1622
	<td> &a.jhb; </td>
1623
	<td> 16 November 2001 </td>
1624
	<td> &status.wip; </td>
1625
      </tr>
1626
1627
      <tr>
1628
	<td> Make use of process locking and process reference counting
1629
	  to protect debugging interfaces (and procfs). </td>
1630
	<td> &a.jhb; </td>
1631
	<td> 27 February 2002 </td>
1632
	<td> &status.wip; </td>
1633
      </tr>
1634
1635
      <tr>
1636
	<td> Make use of process locking to protect process monitoring
1637
	  sysctls, including those employed by 'ps' and related tools.
1638
	<td> &a.jhb; </td>
1639
	<td> 27 February 2002 </td>
1640
	<td> &status.wip; </td>
1641
      </tr>
1642
1643
      <tr>
1644
	<td> Lock down newbus infrastructure to support driver
1645
	  fine-graining. </td>
1646
	<td> &a.imp; </td>
1647
	<td> 28 February 2002 </td>
1648
	<td> &status.wip; </td>
1649
      </tr>
1650
1651
      <tr>
1652
	<td> SMPng architecture document. </td>
1653
	<td> &a.jhb;, &a.rwatson; </td>
1654
	<td> 28 February 2002 </td>
1655
	<td> &status.wip; </td>
1656
      </tr>
1657
1658
      <tr>
1659
	<td> Move to shared lock for VOP_GETATTR() to reduce blocking during
1660
	  frequent lightweight VFS operations.  Modify namei() to provide
1661
	  a LOOKUP_SHARED flag to indicate when the lock required may be
1662
	  shared instead of exclusive. </td>
1663
	<td> &a.jeff; </td>
1664
	<td> 11 March 2002 </td>
1665
	<td> &status.wip; </td>
1666
      </tr>
1667
1668
      <tr>
1669
	<td> Document existing vm_map locking and verify it's correctness. </td>
1670
	<td> &a.alc; </td>
1671
	<td> 18 May 2002 </td>
1672
	<td> &status.wip; </td>
1673
      </tr>
1674
1675
      <tr>
1676
	<td> Document existing vm_object locking and verify it's
1677
	  correctness. </td>
1678
	<td> &a.alc; </td>
1679
	<td> 4 May 2002 </td>
1680
	<td> &status.wip; </td>
1681
      </tr>
1682
1683
      <tr>
1684
	<td> Implement lazy interrupt thread switching (context
1685
	  stealing) on i386. </td>
1686
	<td> &a.bmilekic;, &a.kan; </td>
1687
	<td> 10 December 2002 </td>
1688
	<td> &status.wip; </td>
1689
      </tr>
1690
1691
      <tr>
1692
	<td> Implement lazy interrupt thread switching (context
1693
	  stealing) on sparc64. </td>
1694
	<td> &a.jake; </td>
1695
	<td> 10 December 2002 </td>
1696
	<td> &status.wip; </td>
1697
      </tr>
1698
1699
      <tr>
1700
	<td> Switch from using lockmgr in VM to using a mutex or exclusive
1701
	  sxlock.  Push down Giant on all VM except for vm_object/VFS and
1702
	  vm_page/pmap components. </td>
1703
	<td> &a.alc; </td>
1704
	<td> 10 December 2002 </td>
1705
	<td> &status.wip; </td>
1706
      </tr>
1707
1708
      <tr>
1709
	<td> Modify device driver API to permit drivers to more easily
1710
	  split "in interrupt context" and "in interrupt thread"
1711
	  code so as to acknowledge interrupts faster.  This will permit
1712
	  lower latency in interrupt handling. </td>
1713
	<td> &a.piso; </td>
1714
	<td> 24 February 2007 </td>
1715
	<td> &status.wip; </td>
1716
      </tr>
1717
1718
      <!-- Stalled -->
1719
1720
      <!-- Not Started -->
1721
1722
      <tr>
1723
	<td> Conditionalize atomic ops in the SMP code that are used
1724
	  for debugging statistics. </td>
1725
	<td> &a.peter; </td>
1726
	<td> 15 March 2001 </td>
1727
	<td> &status.new; </td>
1728
      </tr>
1729
1730
      <tr>
1731
	<td> Axe schedcpu() in favor of event driven priority updates as
1732
	  much as possible. </td>
1733
	<td> &nbsp; </td>
1734
	<td> 7 September 2001 </td>
1735
	<td> &status.new; </td>
1736
      </tr>
1737
1738
      <tr>
1739
	<td> Fix *hold (e.g. crhold) to return reference to object. </td>
1740
	<td> &nbsp; </td>
1741
	<td> 7 September 2001 </td>
1742
	<td> &status.new; </td>
1743
      </tr>
1744
1745
      <tr>
1746
	<td> Add witness checking for lockmgr locks. </td>
1747
	<td> &nbsp; </td>
1748
	<td> 7 September 2001 </td>
1749
	<td> &status.new; </td>
1750
      </tr>
1751
1752
      <tr>
1753
	<td> Add ICU spin locks on ia64. </td>
1754
	<td> &nbsp; </td>
1755
	<td> 4 January 2002 </td>
1756
	<td> &status.new; </td>
1757
      </tr>
1758
1759
      <tr>
1760
	<td> Add a witness_sleep() check to copyin/out() and s/fuword(). </td>
1761
	<td> &a.jhb; </td>
1762
	<td> 7 June 2002 </td>
1763
	<td> &status.new; </td>
1764
      </tr>
1765
1766
      <tr>
1767
	<td> Remove Giant from mi_startup() and push Giant down into
1768
	  individual SYSINIT functions.  Many SYSINIT functions probably do
1769
	  not need Giant anyway. </td>
1770
	<td> &nbsp; </td>
1771
	<td> 21 October 2005 </td>
1772
	<td> &status.new; </td>
1773
      </tr>
1774
1775
<!--
1776
      <tr>
1777
        <td>  </td>
1778
        <td> &nbsp; </td>
1779
        <td> D M 2002 </td>
1780
        <td> &status.new; </td>
1781
      </tr>
1782
1783
-->
1784
    </table>
1785
1786
    <p>This table lists the todo subtasks for multithreading the network
1787
      stack.</p>
1788
1789
    <table class="tblbasic">
1790
      <tr class="heading">
1791
	<th> Task </th>
1792
	<th> Responsible </th>
1793
	<th> Last updated </th>
1794
	<th> Status </th>
1795
      </tr>
1796
1797
      <tr>
1798
	<td> Protect network interface queues. </td>
1799
	<td> &a.jlemon; </td>
1800
	<td> 24 November 2000 </td>
1801
	<td> &status.done; </td>
1802
      </tr>
1803
1804
      <tr>
1805
	<td> Lock up IP. </td>
1806
	<td> &a.jennifer;, &a.hsu; </td>
1807
	<td> 10 June 2002 </td>
1808
	<td> &status.done; </td>
1809
      </tr>
1810
1811
      <tr>
1812
	<td> Lock up TCP. </td>
1813
	<td> &a.jennifer;, &a.hsu;, &a.sam;, &a.rwatson;</td>
1814
	<td> 24 November 2004 </td>
1815
	<td> &status.done; </td>
1816
      </tr>
1817
1818
      <tr>
1819
	<td> Lock up UDP. </td>
1820
	<td> &a.jennifer;, &a.hsu;, &a.rwatson; </td>
1821
	<td> 24 November 2004 </td>
1822
	<td> &status.done; </td>
1823
      </tr>
1824
1825
      <tr>
1826
	<td> Lock ifaddr reference counts. </td>
1827
	<td> &a.hsu; </td>
1828
	<td> 18 December 2002 </td>
1829
	<td> &status.done; </td>
1830
      </tr>
1831
1832
      <tr>
1833
	<td> Lock up ifnet list. </td>
1834
	<td> &a.hsu; </td>
1835
	<td> 21 December 2002 </td>
1836
	<td> &status.done; </td>
1837
      </tr>
1838
1839
      <tr>
1840
	<td> Lock radix trees. </td>
1841
	<td> &a.hsu; </td>
1842
	<td> 23 December 2002 </td>
1843
	<td> &status.done; </td>
1844
      </tr>
1845
1846
      <tr>
1847
	<td> Lock up ARP. </td>
1848
	<td> &a.hsu; </td>
1849
	<td> 16 January 2003 </td>
1850
	<td> &status.done; </td>
1851
      </tr>
1852
1853
      <tr>
1854
	<td> Lock up raw IP. </td>
1855
	<td> &a.sam;, &a.rwatson; </td>
1856
	<td> 24 July 2004 </td>
1857
	<td> &status.done; </td>
1858
      </tr>
1859
1860
      <tr>
1861
	<td> Lock divert sockets. </td>
1862
	<td> &a.sam; </td>
1863
	<td> 4 October 2003 </td>
1864
	<td> &status.done; </td>
1865
      </tr>
1866
1867
      <tr>
1868
	<td> Lock ipfw2. </td>
1869
	<td> &a.sam; </td>
1870
	<td> 4 October 2003 </td>
1871
	<td> &status.done; </td>
1872
      </tr>
1873
1874
      <tr>
1875
	<td> Lock DUMMYNET. </td>
1876
	<td> &a.sam; </td>
1877
	<td> 4 October 2003 </td>
1878
	<td> &status.done; </td>
1879
      </tr>
1880
1881
      <tr>
1882
	<td> Lock ethernet bridge. </td>
1883
	<td> &a.sam; </td>
1884
	<td> 4 October 2003 </td>
1885
	<td> &status.done; </td>
1886
      </tr>
1887
1888
      <tr>
1889
	<td> Lock IP fragment queues. </td>
1890
	<td> &a.rwatson; </td>
1891
	<td> 4 October 2003 </td>
1892
	<td> &status.done; </td>
1893
      </tr>
1894
1895
      <tr>
1896
	<td> Lock routing entries. </td>
1897
	<td> &a.sam; </td>
1898
	<td> 4 October 2003 </td>
1899
	<td> &status.done; </td>
1900
      </tr>
1901
1902
      <tr>
1903
	<td> Lock FAST_IPSEC. </td>
1904
	<td> &a.sam; </td>
1905
	<td> 4 October 2003 </td>
1906
	<td> &status.done; </td>
1907
      </tr>
1908
1909
      <tr>
1910
	<td> Permit parallel entry into isr processing. </td>
1911
	<td> &a.rwatson;, &a.sam; </td>
1912
	<td> 11 October 2003 </td>
1913
	<td> &status.done; </td>
1914
      </tr>
1915
1916
      <tr>
1917
	<td> Lock if_disc "discard interface". </td>
1918
	<td> &a.rwatson; </td>
1919
	<td> 9 March 2004 </td>
1920
	<td> &status.done; </td>
1921
      </tr>
1922
1923
      <tr>
1924
	<td> Lock if_faith "IPv6-to-IPv4 TCP relay interface. " </td>
1925
	<td> &a.sam;, &a.rwatson; </td>
1926
	<td> 9 March 2004 </td>
1927
	<td> &status.done; </td>
1928
      </tr>
1929
1930
      <tr>
1931
	<td> Lock if_gif "generic tunnel interface". </td>
1932
	<td> &a.rwatson; </td>
1933
	<td> 9 March 2004 </td>
1934
	<td> &status.done; </td>
1935
      </tr>
1936
1937
      <tr>
1938
	<td> Review ECN tunnel support (ip_ecn.c). </td>
1939
	<td> &a.rwatson; </td>
1940
	<td> 9 March 2004 </td>
1941
	<td> &status.done; </td>
1942
      </tr>
1943
1944
      <tr>
1945
	<td> if_tap global and softc locking. </td>
1946
	<td> &a.rwatson; </td>
1947
	<td> 23 April 2004 </td>
1948
	<td> &status.done; </td>
1949
      </tr>
1950
1951
      <tr>
1952
	<td> if_tun global and softc locking. </td>
1953
	<td> &a.rwatson; </td>
1954
	<td> 23 April 2004 </td>
1955
	<td> &status.done; </td>
1956
      </tr>
1957
1958
      <tr>
1959
	<td> netatalk/aarp.c locking. </td>
1960
	<td> &a.rwatson; </td>
1961
	<td> 23 April 2004 </td>
1962
	<td> &status.done; </td>
1963
      </tr>
1964
1965
      <tr>
1966
	<td> Cache socket MAC label in inpcb label for IPv4 sockets so that
1967
	  the label can be used safely at the inet layer without socket
1968
	  locks. </tD>
1969
	<td> &a.rwatson; </td>
1970
	<td> 23 April 2004 </td>
1971
	<td> &status.done; </td>
1972
      </tr>
1973
1974
      <tr>
1975
	<td> IP encapsulation subroutines (ip_encap.c). </td>
1976
	<td> &a.rwatson; </td>
1977
	<td> 23 April 2004 </td>
1978
	<td> &status.done; </td>
1979
      </tr>
1980
1981
      <tr>
1982
	<td> Lock globals in loopback interface (if_loop.c). </td>
1983
	<td> &a.rwatson; </td>
1984
	<td> 23 April 2004 </td>
1985
	<td> &status.done; </td>
1986
      </tr>
1987
1988
      <tr>
1989
	<td> Use m_tags in if_gif to limit looping configurations, rather
1990
	  than a non-MPSAFE static coutner. </td>
1991
	<td> &a.ru; </td>
1992
	<td> 23 April 2004 </td>
1993
	<td> &status.done; </td>
1994
      </tr>
1995
1996
      <tr>
1997
	<td> netatalk DDP PCB locking. </td>
1998
	<td> &a.rwatson; </td>
1999
	<td> 24 July 2004 </td>
2000
	<td> &status.done; </td>
2001
      </tr>
2002
2003
      <tr>
2004
	<td> Lock up syncache. </td>
2005
	<td> &a.hsu;, &a.sam; </td>
2006
	<td> 10 November 2003 </td>
2007
	<td> &status.done; </td>
2008
      </tr>
2009
2010
      <tr>
2011
	<td> Permit IP forwarding path to run Giant-free. </td>
2012
	<td> &a.sam; </td>
2013
	<td> 1 December 2003 </td>
2014
	<td> &status.done; </td>
2015
      </tr>
2016
2017
      <tr>
2018
	<td> Lock &unix; domain protocols, fifofs. </td>
2019
	<td> &a.sam;, &a.rwatson; </td>
2020
	<td> 24 July 2004 </td>
2021
	<td> &status.done; </td>
2022
      </tr>
2023
2024
      <tr>
2025
	<td> Giant lock over NFS server to protect against so_upcall() w/o Giant </td>
2026
	<td> &a.rwatson; </td>
2027
	<td> 24 July 2004 </td>
2028
	<td> &status.done; </td>
2029
      </tr>
2030
2031
      <tr>
2032
	<td> Lock interface cloning meta-data. </td>
2033
	<td> &a.brooks; </td>
2034
	<td> 24 July 2004 </td>
2035
	<td> &status.done; </td>
2036
      </tr>
2037
2038
      <tr>
2039
	<td> Apply combination of socket and socket buffer locks, label caching
2040
	  to MAC labels on sockets so that they can be used safely without
2041
	  Giant. </td>
2042
	<td> &a.rwatson; </td>
2043
	<td> 24 July 2004 </td>
2044
	<td> &status.done; </td>
2045
      </tr>
2046
2047
      <tr>
2048
	<td> Make routing socket message dispatch use a netisr to avoid
2049
	  re-entering the socket code from the routing code, resolving lock
2050
	  order issues. </td>
2051
	<td> &a.rwatson; </td>
2052
	<td> 24 July 2004 </td>
2053
	<td> &status.done; </td>
2054
      </tr>
2055
2056
      <tr>
2057
	<td> Introduce accept locking to protect accept incomplete and
2058
	  complete queues on listen sockets. </td>
2059
	<td> &a.rwatson; </td>
2060
	<td> 24 July 2004 </td>
2061
	<td> &status.done; </td>
2062
      </tr>
2063
2064
      <tr>
2065
	<td> Break out socket buffer wakeup, socket buffer append, socket
2066
	  state change, socket buffer reserve, flush, etc, calls into
2067
	  _locked() and unlocked versions, and avoid conditional locking.
2068
	  </td>
2069
	<td> &a.rwatson; </td>
2070
	<td> 24 July 2004 </td>
2071
	<td> &status.done; </td>
2072
      </tr>
2073
2074
      <tr>
2075
	<td> Lock down AARP, AppleTalk Address Resolution Protocol. </td>
2076
	<td> &a.rwatson; </td>
2077
	<td> 24 July 2004 </td>
2078
	<td> &status.done; </td>
2079
      </tr>
2080
2081
      <tr>
2082
	<td> Fix pull/push cache data synchronization issues in sosend(),
2083
	  soreceive(), allowing them to run Giant-free. </td>
2084
	<td> &a.rwatson; </td>
2085
	<td> 24 July 2004 </td>
2086
	<td> &status.done; </td>
2087
      </tr>
2088
2089
      <tr>
2090
	<td> Protect socket global counters/limits and generation number
2091
	  with a mutex. </td>
2092
	<td> &a.rwatson; </td>
2093
	<td> 24 July 2004 </td>
2094
	<td> &status.done; </td>
2095
      </tr>
2096
2097
      <tr>
2098
	<td> Lock down unit allocation meta-data in interface related
2099
	  netgraph modules. </td>
2100
	<td> &a.rwatson; </td>
2101
	<td> 24 July 2004 </td>
2102
	<td> &status.done; </td>
2103
      </tr>
2104
2105
      <tr>
2106
	<td> Lock down socket buffer OOB fields across TCP/IP, IPX. </td>
2107
	<td> &a.rwatson; </td>
2108
	<td> 24 July 2004 </td>
2109
	<td> &status.done; </td>
2110
      </tr>
2111
2112
      <tr>
2113
	<td> Add MSG_NBIO so that fifofs can avoid frobbing SO_NBIO in
2114
	  a manner that risks races. </td>
2115
	<td> &a.truckman; </td>
2116
	<td> 24 July 2004 </td>
2117
	<td> &status.done; </td>
2118
      </tr>
2119
2120
      <tr>
2121
	<td> Protect all use of so_count with socket lock. </td>
2122
	<td> &a.rwatson; </td>
2123
	<td> 24 July 2004 </td>
2124
	<td> &status.done; </td>
2125
      </tr>
2126
2127
      <tr>
2128
	<td> Move socket buffer related state from so_state to sb_state so
2129
	  it can be properly locked by the socket buffer mutex. </td>
2130
	<td> &a.rwatson; </td>
2131
	<td> 24 July 2004 </td>
2132
	<td> &status.done; </td>
2133
      </tr>
2134
2135
      <tr>
2136
	<td> Introduce a temporary global lock to lock the if_label field
2137
	  used by the MAC Framework. </tD>
2138
	<td> &a.rwatson; </td>
2139
	<td> 24 July 2004 </td>
2140
	<td> &status.done; </td>
2141
      </tr>
2142
2143
      <tr>
2144
	<td> Push VFS-specific behavior out of fdrop_locked() and acquire
2145
	  Giant in the fo_close per-object methods rather than
2146
	  fdrop_locked(), so that pipes and sockets can run fo_close()
2147
	  Giant-free. </td>
2148
	<td> &a.rwatson; </td>
2149
	<td> 24 July 2004 </td>
2150
	<td> &status.done; </td>
2151
      </tr>
2152
2153
      <tr>
2154
	<td> Push Giant acquisition into fo_stat() file descriptor stat
2155
	  operation, rather than acquiring it in fstat(), so that fstat()
2156
	  on sockets and pipes can run Giant-free. </td>
2157
	<td> &a.rwatson; </td>
2158
	<td> 24 July 2004 </td>
2159
	<td> &status.done; </td>
2160
      </tr>
2161
2162
      <tr>
2163
	<td> Don't hold socket locks over entry to protocol switch methods,
2164
	  allowing protocol methods to acquire socket locks after protocol
2165
	  locks in the lock order. </td>
2166
	<td> &a.rwatson; </td>
2167
	<td> 24 July 2004 </td>
2168
	<td> &status.done; </td>
2169
      </tr>
2170
2171
      <tr>
2172
	<td> Port inpcb mutex locking, assertions from IPv4 to IPv6. </td>
2173
	<td> &a.rwatson; </td>
2174
	<td> 8 August 2004 </td>
2175
	<td> &status.done; </td>
2176
      </tr>
2177
2178
      <tr>
2179
	<td> Add IFF_NEEDSGIANT to allow if_start to run with Giant for
2180
	  specific interfaces.  Defer if_start to task queue. </td>
2181
	<td> &a.rwatson; </td>
2182
	<td> 8 August 2004 </td>
2183
	<td> &status.done; </td>
2184
      </tr>
2185
2186
      <tr>
2187
	<td> Push down Giant in stat(), fo_stat() to allow Giant-free stat
2188
	  of pipes, sockets. </td>
2189
	<td> &a.rwatson; </td>
2190
	<td> 8 August 2004 </td>
2191
	<td> &status.done; </td>
2192
      </tr>
2193
2194
      <tr>
2195
	<td> Add TCP lock assertions. </td>
2196
	<td> &a.rwatson; </td>
2197
	<td> 24 November 2004 </td>
2198
	<td> &status.done; </td>
2199
      </tr>
2200
2201
      <tr>
2202
	<td> Lock socket layer. </td>
2203
	<td> &a.sam;, &a.rwatson; </td>
2204
	<td> 24 November 2004 </td>
2205
	<td> &status.done; </td>
2206
      </tr>
2207
2208
      <tr>
2209
	<td> Review TCP timer code. </td>
2210
	<td> &a.rwatson; </td>
2211
	<td> 24 November 2004 </td>
2212
	<td> &status.done; </td>
2213
      </tr>
2214
2215
      <tr>
2216
	<td> Analyze and reduce cost of entropy gathering in network critical
2217
	  paths. </td>
2218
	<td> &a.rwatson;, &a.markm; </td>
2219
	<td> 24 November 2004 </td>
2220
	<td> &status.done; </td>
2221
      </tr>
2222
2223
      <tr>
2224
	<td> Allow code to declare NET_NEEDS_GIANT(), forcing Giant over the
2225
	  network stack if that code is compiled into the kernel. </td>
2226
	<td> &a.rwatson; </td>
2227
	<td> 28 August 2004 </td>
2228
	<td> &status.done; </td>
2229
      </tr>
2230
2231
      <tr>
2232
	<td> Disable Giant over the network stack in the default
2233
	  configuration. </td>
2234
	<td> &a.rwatson; </td>
2235
	<td> 28 August 2004 </td>
2236
	<td> &status.done; </td>
2237
      </tr>
2238
2239
      <tr>
2240
	<td> Additional KTR tracing for UMA, callouts, interrupts, etc. </td>
2241
	<td> &a.rwatson; </td>
2242
	<td> 07 November 2004 </td>
2243
	<td> &status.done; </td>
2244
      </tr>
2245
2246
      <tr>
2247
	<td> Move to using file descriptor reference counts instead of
2248
	  socket reference counts for socket system calls, avoiding extra
2249
	  reference couht operations. </td>
2250
	<td> &a.rwatson; </td>
2251
	<td> 24 October 2004 </td>
2252
	<td> &status.done; </td>
2253
      </tr>
2254
2255
      <tr>
2256
	<td> Lock down netnatm. </td>
2257
	<td> &a.rwatson; </td>
2258
	<td> April 2006 </td>
2259
	<td> &status.done; </td>
2260
      </tr>
2261
2262
      <tr>
2263
	<td> Default to direct dispatch from ithreads </td>
2264
	<td> &a.rwatson; </td>
2265
	<td> 28 November 2006 </td>
2266
	<td> &status.done; </td>
2267
      </tr>
2268
2269
      <!-- WIP -->
2270
2271
      <tr>
2272
	<td> Lock IPv6. </td>
2273
	<td> &a.sam;, &a.rwatson;, &a.ume;, &a.mlaier; </td>
2274
	<td> 8 August 2004 </td>
2275
	<td> &status.wip; </td>
2276
      </tr>
2277
2278
      <tr>
2279
	<td> if_ppp global, per-softc locking. </td>
2280
	<td> &a.rwatson;, Maurycy Pawlowski-Wieronski &lt;maurycy@fouk.org&gt; </td>
2281
	<td> 23 April 2004 </td>
2282
	<td> &status.wip; </td>
2283
      </tr>
2284
2285
      <tr>
2286
	<td> Lock struct ifnet. </td>
2287
	<td> &a.mlaier;, &a.luigi;, Maurycy Pawlowski-Wieronski &lt;maurycy@fouk.org&gt; </td>
2288
	<td> 23 April 2004 </td>
2289
	<td> &status.wip; </td>
2290
      </tr>
2291
2292
      <tr>
2293
	<td> Lock IPv4, IPv6, atalk interface address lists. </td>
2294
	<td> &a.mlaier;, &a.rwatson; </td>
2295
	<td> 8 August 2004 </td>
2296
	<td> &status.wip; </td>
2297
      </tr>
2298
2299
      <tr>
2300
	<td> Lock consumers of BSD compress (bsd_comp.c) code to protect
2301
	  compression state. </td>
2302
	<td> &a.rwatson; </td>
2303
	<td> 23 April 2004 </td>
2304
	<td> &status.wip; </td>
2305
      </tr>
2306
2307
      <tr>
2308
	<td> Lock global and softc state for six-to-four converter (if_stf.c). </td>
2309
	<td> &a.rwatson; </td>
2310
	<td> 23 April 2004 </td>
2311
	<td> &status.wip; </td>
2312
      </tr>
2313
2314
      <tr>
2315
	<td> Lock down global and softc state for SLIP (if_sl.c). </td>
2316
	<td> &a.rwatson; </td>
2317
	<td> 23 April 2004 </td>
2318
	<td> &status.wip; </td>
2319
      </tr>
2320
2321
      <tr>
2322
	<td> Lock global and softc state for SPPP (if_sppsubr.c). </td>
2323
	<td> &a.rik;, &a.rwatson; </td>
2324
	<td> 23 April 2004 </td>
2325
	<td> &status.wip; </td>
2326
      </tr>
2327
2328
      <tr>
2329
	<td> IGMP locking. </td>
2330
	<td> &a.rwatson; </td>
2331
	<td> 23 April 2004 </td>
2332
	<td> &status.wip; </td>
2333
      </tr>
2334
2335
      <tr>
2336
	<td> IP ID locking. </td>
2337
	<td> &a.ups; </td>
2338
	<td> 24 June 2005 </td>
2339
	<td> &status.wip; </td>
2340
      </tr>
2341
2342
      <tr>
2343
	<td> Locking for polling(4). </td>
2344
	<td> &a.pjd;, &a.glebius; </td>
2345
	<td> 19 October 2005 </td>
2346
	<td> &status.wip; </td>
2347
      </tr>
2348
2349
      <tr>
2350
	<td> BPF locking needs some cleanup, there are some race conditions there relating to interface removal. </td>
2351
	<td> &a.csjp; </td>
2352
	<td> 2 June 2006 </td>
2353
	<td> &status.wip; </td>
2354
      </tr>
2355
2356
      <!-- Not Started -->
2357
2358
      <tr>
2359
	<td> Reduce contention upon locking a socket buffer by replacing
2360
	     tsleep() and wakeup() with a condvar. </td>
2361
	<td> &a.tanimura; </td>
2362
	<td> 21 April 2002 </td>
2363
	<td> &status.new; </td>
2364
      </tr>
2365
2366
      <tr>
2367
	<td> Lock if_ef "ethernet frame" driver. </td>
2368
	<td> &nbsp; </td>
2369
	<td> 9 March 2004 </td>
2370
	<td> &status.new; </td>
2371
      </tr>
2372
2373
      <tr>
2374
	<td> Further cleanup of socket state machine in order to facilitate finishing socking locking of state transitions. </td>
2375
	<td> &a.rwatson; </td>
2376
	<td> 19 October 2005 </td>
2377
	<td> &status.new; </td>
2378
      </tr>
2379
2380
      <tr>
2381
	<td> Lock KAME IPSEC. </td>
2382
	<td> &nbsp; </td>
2383
	<td> 19 October 2005 </td>
2384
	<td> &status.new; </td>
2385
      </tr>
2386
2387
      <tr>
2388
	<td> Only one of our ATM stacks is MPSAFE, the other two should be deleted or fixed. </td>
2389
	<td> &nbsp; </td>
2390
	<td> 19 October 2005 </td>
2391
	<td> &status.new; </td>
2392
      </tr>
2393
2394
      <tr>
2395
	<td> Lock ND6 (IPv6 Neighbor Discovery). </td>
2396
	<td> &a.gnn; </td>
2397
	<td> 19 October 2005 </td>
2398
	<td> &status.new; </td>
2399
      </tr>
2400
2401
      <tr>
2402
	<td> Lock IPv6 multicast address lists. </td>
2403
	<td> &nbsp; </td>
2404
	<td> 19 October 2005 </td>
2405
	<td> &status.new; </td>
2406
      </tr>
2407
2408
      <tr>
2409
	<td> Lock IPv4 and IPv6 global address lists. </td>
2410
	<td> &nbsp; </td>
2411
	<td> 19 October 2005 </td>
2412
	<td> &status.new; </td>
2413
      </tr>
2414
2415
      <tr>
2416
	<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>
2417
	<td> &a.rwatson; </td>
2418
	<td> 19 October 2005 </td>
2419
	<td> &status.new; </td>
2420
      </tr>
2421
2422
      <tr>
2423
	<td> When interfaces are torn down, there are a number of races (not all associated with SMPng) that need to be thought about. </td>
2424
	<td> &nbsp; </td>
2425
	<td> 19 October 2005 </td>
2426
	<td> &status.new; </td>
2427
      </tr>
2428
2429
      <tr>
2430
	<td> Lock if_vlan and inter-layer multicast address manipulation and synchronization in if_vlan. </td>
2431
	<td> &a.glebius;, &a.yar; </td>
2432
	<td> 19 October 2005 </td>
2433
	<td> &status.new; </td>
2434
      </tr>
2435
2436
      <tr>
2437
	<td> Further investigate locking in in_gif and in6_gif. </td>
2438
	<td> &nbsp; </td>
2439
	<td> 19 October 2005 </td>
2440
	<td> &status.new; </td>
2441
      </tr>
2442
2443
      <tr>
2444
	<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>
2445
	<td> &a.rwatson; </td>
2446
	<td> 19 October 2005 </td>
2447
	<td> &status.new; </td>
2448
      </tr>
2449
2450
      <tr>
2451
	<td> Investigate how to eliminate the use of ACCEPT_LOCK(), which currently prevents races in the tear-down of sockets. </td>
2452
	<td> &a.rwatson; </td>
2453
	<td> 19 October 2005 </td>
2454
	<td> &status.new; </td>
2455
      </tr>
2456
2457
      <tr>
2458
	<td> Fix SMP problems with netgraph restructuring. </td>
2459
	<td> &a.glebius; </td>
2460
	<td> 19 October 2005 </td>
2461
	<td> &status.new; </td>
2462
      </tr>
2463
2464
      <tr>
2465
	<td> Verify locking in netgraph nodes and improve where necessary. </td>
2466
	<td> &a.glebius; </td>
2467
	<td> 19 October 2005 </td>
2468
	<td> &status.new; </td>
2469
      </tr>
2470
2471
      <tr>
2472
	<td> More finely-grained locking for pf(4). </td>
2473
	<td> &a.glebius; </td>
2474
	<td> 19 October 2005 </td>
2475
	<td> &status.new; </td>
2476
      </tr>
2477
2478
    </table>
2479
2480
    <a name="issues"></a>
2481
    <h2>Known Issues (Historical)</h2>
2482
2483
    <table class="tblbasic">
2484
      <tr class="heading">
2485
	<th> Issue </th>
2486
	<th> Last updated </th>
2487
	<th> Status </th>
2488
      </tr>
2489
2490
      <tr>
2491
	<td> Idle processor time is not charged to the idle processes. </td>
2492
	<td> 20 September 2000 </td>
2493
	<td> &status.resolved; </td>
2494
      </tr>
2495
2496
      <tr>
2497
	<td> microuptime creeps backwards. </td>
2498
	<td> 4 October 2000 </td>
2499
	<td> &status.resolved; </td>
2500
      </tr>
2501
2502
      <tr>
2503
	<td> microuptime() went backwards </td>
2504
	<td> 4 October 2000 </td>
2505
	<td> &status.resolved; </td>
2506
      </tr>
2507
2508
      <tr>
2509
	<td> Process accounting is not accurate (the more CPUs, the
2510
	  closer to correct it is). </td>
2511
	<td> 5 October 2000 </td>
2512
	<td> &status.resolved; </td>
2513
      </tr>
2514
2515
      <tr>
2516
	<td> M_DEVBUF is probably the wrong memory pool for interrupt
2517
	  stuff and we should think about creating a new malloc pool for
2518
	  that stuff. </td>
2519
	<td> 9 February 2001 </td>
2520
	<td> &status.resolved; </td>
2521
      </tr>
2522
2523
      <tr>
2524
	<td> PC card eject panics due to a race condition in the
2525
	  interrupt thread code. </td>
2526
	<td> 15 March 2001 </td>
2527
	<td> &status.resolved; </td>
2528
      </tr>
2529
2530
      <tr>
2531
	<td> SMP x86 boxes are seeing NCPU * 100 clk interrupts and
2532
	  NCPU * 128 rtc interrupts. </td>
2533
	<td> 15 May 2001 </td>
2534
	<td> &status.resolved; </td>
2535
      </tr>
2536
2537
      <tr>
2538
	<td> Witness will infinitely recurse when it acquires Giant after
2539
	  sleeping with a sleepable lock. </td>
2540
	<td> 27 June 2001 </td>
2541
	<td> &status.resolved; </td>
2542
      </tr>
2543
2544
      <tr>
2545
	<td> Serial gdb does not work if boot_ddb and boot_gdb options
2546
	  are specified. </td>
2547
	<td> 14 July 2002 </td>
2548
	<td> &status.resolved; </td>
2549
      </tr>
2550
2551
      <tr>
2552
	<td> Serial gdb does not work at 115200 baud. </td>
2553
	<td> 14 July 2002 </td>
2554
	<td> &status.resolved; </td>
2555
      </tr>
2556
2557
      <tr>
2558
	<td> Serial gdb never regains control once 'cont' has been
2559
	  entered. </td>
2560
	<td> 14 July 2002 </td>
2561
	<td> &status.resolved; </td>
2562
      </tr>
2563
2564
      <!-- unresolved -->
2565
2566
      <tr>
2567
	<td> Profiling is broken. </td>
2568
	<td> 20 February 2001 </td>
2569
	<td> &status.unresolved; </td>
2570
      </tr>
2571
2572
<!--
2573
      <tr>
2574
        <td> </td>
2575
        <td> D M 2002 </td>
2576
        <td> &status.unresolved; </td>
2577
      </tr>
2578
2579
-->
2580
    </table>
2581
2582
    <a name="news"></a>
2583
    <h2>News (Historical)</h2>
2584
2585
    <p>The remainder of this page is structured as a
2586
      reverse-chronological log.</p>
2587
2588
<!--
2589
<b> D M 2002</b>
2590
<ul>
2591
	<li> <p>  </p> </li>
2592
</ul>
2593
-->
2594
    <b>28 August 2004</b>
2595
    <ul>
2596
      <li>
147
      <li>
2597
	<p>&a.rwatson; threw the switch to change the network stack to run
148
	<p>
2598
	without the Giant lock by default, permitting the network stack to be
2599
	run on multiple CPUs at a time, as well as to preempt and be
2600
	preempted by other code.</p>
2601
      </li>
2602
    </ul>
2603
    <b>30 October 2003</b>
2604
    <ul>
2605
      <li>
2606
      <p>&a.grog; submitted a
2607
        <a href="http://www.lemis.com/grog/SMPng/Singapore/">FreeBSD SMPng paper</a> 
2608
       	to the <a href="http://www.aeosc.org/">Asian Enterprise Open Source
2609
        Conference</a> in Singapore.  The paper presents a historical view of
2610
        SMPng development through 2001, but omits discussion of more recent
2611
        progress on the SMPng project, such as substantial performance enhancements
2612
        resulting from extensive lock pushdown in the storage subsystem, VM
2613
        subsystem, and major IPC subsystems.</p>
2614
      </li>
2615
    </ul>
2616
2617
    <b>13 January 2002</b>
2618
    <ul>
2619
      <li>
2620
      <p>A <a href =
2621
        "http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=122646+0+archive/2002/freebsd-smp/20020113.freebsd-smp">
2622
        status report</a> was sent to the -smp mailing list.</p>
2623
      </li>
2624
    </ul>
2625
2626
    <b>15 May 2001</b>
2627
    <ul>
2628
      <li>
2629
	<p>&a.grog; has made his <a href =
2630
	  "http://www.lemis.com/~grog/SMPng/USENIX/">USENIX paper</a> available,
2631
	  which he will present in Boston at the end of June.</p>
2632
      </li>
2633
    </ul>
2634
2635
    <b>22 March 2001</b>
2636
    <ul>
2637
	<li>
2638
	<p>A <a href =
2639
	  "http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=41302+0+archive/2001/freebsd-smp/20010325.freebsd-smp">
2640
	  status report</a> was sent to the -smp mailing list.</p>
2641
      </li>
2642
    </ul>
2643
2644
    <b>5 March 2001</b>
2645
    <ul>
2646
      <li>
2647
	<p>A <a href =
2648
	  "http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=0+0+archive/2001/freebsd-smp/20010311.freebsd-smp">
2649
	  status report</a> was sent to the -smp mailing list.</p>
2650
      </li>
2651
    </ul>
2652
2653
    <b>24 January 2001</b>
2654
    <ul>
2655
      <li>
2656
	<p>A <a href =
2657
	  "http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=38125+0+archive/2001/freebsd-smp/20010128.freebsd-smp">
2658
	  status report</a> was sent to the -smp mailing list.</p>
2659
      </li>
2660
    </ul>
2661
2662
    <b>12 January 2001</b>
2663
    <ul>
2664
      <li>
2665
	<p>A <a href =
2666
	  "http://www.FreeBSD.org/cgi/getmsg.cgi?fetch=45111+48223+/usr/local/www/db/text/2001/freebsd-smp/20010114.freebsd-smp">
2667
	  status report</a> was sent to the -smp mailing list.</p>
2668
      </li>
2669
    </ul>
2670
2671
    <b>11 October 2000</b>
2672
    <ul>
2673
      <li>
2674
	<p>&a.jhb; and &a.cp; came up with a preliminary list of
2675
	  <a href="http://storm.uk.FreeBSD.org/~hiten/smp_synch_rules.html">rules
2676
	  </a> that should be followed when working on kernel
2677
	  synchronization.</p>
2678
      </li>
2679
    </ul>
2680
2681
    <b>6 September 2000</b>
2682
    <ul>
2683
      <li>
2684
	<p>The SMP code has been committed.  All further work is being
2685
	  done in cvs rather than with patches.</p>
2686
      </li>
2687
2688
      <li>
2689
	<p>An updated <a
2690
	  href="http://people.FreeBSD.org/~jasone/smp/smpng_patch_9.7">patch</a>
2691
	  is available for download.  This patch is probably what will
2692
	  actually get committed.</p>
2693
      </li>
2694
    </ul>
2695
2696
    <b>5 September 2000</b>
2697
    <ul>
2698
      <li>
2699
	<p>An updated <a
2700
	  href="http://people.FreeBSD.org/~jasone/smp/smpng_patch_9.1">patch</a>
2701
	  is available for download.  This patch makes rtc a fast
2702
	  interrupt, uses locked instructions for mutexes in MP kernels,
2703
	  and corrects mtx_*() linkage within modules.</p>
2704
      </li>
2705
    </ul>
2706
2707
    <b>1 September 2000</b>
2708
    <ul>
2709
      <li>
2710
	<p>The code is working for the most part now on i386 (UP and MP).
2711
	  Some additional coding is still necessary for the alpha,
2712
	  which is being done now.</p>
2713
      </li>
2714
    </ul>
2715
2716
    <b>30 August 2000</b>
2717
    <ul>
2718
      <li>
2719
	<p>Updated patches for i386 and alpha are available <a href =
2720
	  "http://people.FreeBSD.org/~jasone/smp/smpng_patch8.6">here</a>.</p>
2721
      </li>
2722
    </ul>
2723
2724
    <b>12 August 2000</b>
2725
    <ul>
2726
      <li>
2727
	<p>Updated patches for i386 are available <a href =
2728
	  "http://www.FreeBSD.org/~jhb/patches/smpng.patch6">here</a>.
2729
	  Process accounting still doesn't work correctly, but a number
2730
	  of other improvements have been made.</p>
2731
      </li>
2732
    </ul>
2733
2734
    <b>3 August 2000</b>
2735
    <ul>
2736
      <li>
2737
	<p>Patches with functional heavy-weight threads for the i386
2738
	  platform are available <a href =
2739
	  "http://people.FreeBSD.org/~grog/patches4.gz">here</a>.
2740
	  There are a couple of minor issues with this patch set.
2741
	  Specifically, process accounting doesn't work correctly.</p>
2742
      </li>
2743
    </ul>
2744
2745
    <b>6 July 2000</b>
2746
    <ul>
2747
      <li>
2748
	<p>Sheldon Hearn has prepared a mutex(9) man page based on the
2749
	  BSD/OS one, which is available <a href =
2750
	  "http://people.FreeBSD.org/~jake/mutex.9">here</a>.</p>
2751
      </li>
2752
    </ul>
2753
2754
    <b>5 July 2000</b>
2755
    <ul>
2756
      <li>
2757
	<p>&a.jake; put an updated patch <a href =
2758
	  "http://people.FreeBSD.org/~jake/smpng.diff">here</a>.</p>
2759
      </li>
2760
    </ul>
2761
2762
    <b>3 July 2000</b>
2763
    <ul>
2764
      <li>
2765
	<p>&a.jake; has the BSD/OS lock code working now, and has
2766
	  incorporated the pertinent portions of &a.dillon;'s patches
2767
	  (idle processes, some of the schedlock changes, etc.).
2768
	  His patch set is available <a href =
2769
	  "http://people.FreeBSD.org/~jake/smpng2.tar">here</a>.</p>
2770
      </li>
2771
    </ul>
2772
2773
    <b>26 June 2000</b>
2774
    <ul>
2775
      <li>
2776
	<p>&a.cp; has provided the PostScript versions of his
2777
	  presentation slides for the
2778
	  <a href="http://people.FreeBSD.org/~jasone/smp/smp_meeting_slides_1.ps">first day</a> and
2779
	  <a href="http://people.FreeBSD.org/~jasone/smp/smp_meeting_slides_2.ps">second day</a> of the
2780
	  SMP meeting.</p>
2781
      </li>
2782
    </ul>
2783
2784
    <b>25 June 2000</b>
2785
    <ul>
2786
      <li>
2787
	<p>Here's a copy of the
2788
	  <a href="http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=226208+0+archive/2000/freebsd-smp/20000625.freebsd-smp">SMP meeting summary</a>
2789
	  that was posted to the -smp mailing list.</p>
2790
      </li>
2791
    </ul>
2792
2793
    <b>19 June 2000</b>
2794
    <ul>
2795
      <li>
2796
	<p>Here's a copy of the
2797
	  <a href="http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=154884+0+archive/2000/freebsd-current/20000625.freebsd-current">SMP project announcement</a>
149
	  <a href="http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=154884+0+archive/2000/freebsd-current/20000625.freebsd-current">SMP project announcement</a>
2798
	  that was posted to the -current mailing list.</p>
150
	  that was posted to the -current mailing list.
151
	</p>
2799
      </li>
152
      </li>
2800
    </ul>
153
    </ul>

Return to bug 168803