Expand the busdma project page to also track SMPng lockdown and INTR_MPSAFE

status of drivers.  Everyone is encouraged to send updates and corrections to
this.
This commit is contained in:
Scott Long 2003-02-09 04:16:54 +00:00
parent 8c4ac52cb7
commit 6a6255f5a9
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/www/; revision=15961
2 changed files with 200 additions and 19 deletions

View file

@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" [
<!ENTITY base CDATA "../..">
<!ENTITY date "$FreeBSD: www/en/projects/busdma/index.sgml,v 1.41 2003/01/23 20:08:02 mux Exp $">
<!ENTITY title "FreeBSD busdma driver conversion project">
<!ENTITY date "$FreeBSD: www/en/projects/busdma/index.sgml,v 1.42 2003/01/26 20:37:34 mux Exp $">
<!ENTITY title "FreeBSD busdma and SMPng driver conversion project">
<!ENTITY email 'mux'>
<!ENTITY % includes SYSTEM "../../includes.sgml"> %includes;
@ -35,6 +35,7 @@
<a name="goal"></a>
<h2>Project Goal</h2>
<p><b>busdma</b></p>
<p>The busdma interfaces permit hardware device drivers to operate
on a variety of platforms avoiding the encoding of platform-specific
access methods into drivers. This lowers the maintenance costs
@ -50,6 +51,27 @@
this work requires a thorough audit of the system device drivers,
then prioritized conversion of drivers.</p>
<p><b>INTR_MPSAFE</b></p>
<p>Hardware drivers register their interrupt handler with the
<code>bus_setup_intr()</code> function. Setting the flag
<code>INTR_MPSAFE</code> tells the system interrupt code
to call the interrupt routine without holding the Giant
mutex. This can give a significant performance gain on SMP
systems.</p>
<p>Drivers can set this flag even if they are not fully locked
down as long as their interrupt routine is careful about not
touching other data structures in the driver. An easy way to
do this is to check and clear the hardware interrupt status
registers and then schedule the interrupt processing for a
taskqueue or kernel thread.</p>
<p><b>SMPng locked</b></p>
<p>Drivers should employ mutexes and sx locks to protect their
data structures and hardware registers from competing threads.
Mutex operations are somewhat expensive, so a good strategy is
combine as many atomic operations into a single mutex acquisition
as possible.</p>
<p>The task list below is not intended to be complete, but does
represent a set of relevant and/or important components of the
overall work. The "Responsible" field identifies a developer who
@ -136,10 +158,12 @@
<table border=3>
<tr>
<th> Task </th>
<th> Driver </th>
<th> Responsible </th>
<th> Last updated </th>
<th> Status </th>
<th> busdma </th>
<th> INTR_MPSAFE </th>
<th> SMPng locked </th>
<th> Notes </th>
</tr>
@ -148,6 +172,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> kvtop() </td>
</tr>
@ -156,6 +182,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -164,6 +192,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -172,6 +202,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -180,6 +212,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -188,6 +222,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; kvtop() </td>
</tr>
@ -196,6 +232,8 @@
<td> &a.pdeuskar; </td>
<td> December 19, 2002 </td>
<td> &status.wip; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -204,6 +242,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -212,6 +252,8 @@
<td> &a.mux; </td>
<td> December 9, 2002 </td>
<td> &status.wip; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -220,6 +262,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -228,6 +272,8 @@
<td> &a.tmm; </td>
<td> January 6, 2003 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -236,6 +282,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -244,6 +292,8 @@
<td> &a.tmm; </td>
<td> January 6, 2003 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -252,6 +302,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -260,6 +312,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -268,6 +322,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -276,6 +332,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys(). Please contact &a.phk; for info/hardware. </td>
</tr>
@ -284,6 +342,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys(). Please contact &a.phk; for info/hardware. </td>
</tr>
@ -292,6 +352,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -300,6 +362,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -308,6 +372,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -316,6 +382,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> mostly busdma, except for vtophys() </td>
</tr>
@ -324,6 +392,8 @@
<td> &a.wpaul; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -332,6 +402,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -340,6 +412,8 @@
<td> &a.wpaul; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -348,6 +422,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -356,6 +432,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -364,6 +442,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -372,6 +452,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -380,6 +462,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -388,6 +472,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -396,6 +482,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -404,6 +492,8 @@
<td> Christian S.J. Peron &lt;maneo@bsdpro.com&gt; </td>
<td> January 20, 2003 </td>
<td> &status.wip; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -412,6 +502,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -420,6 +512,8 @@
<td> &a.mux; </td>
<td> December 17, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -430,18 +524,22 @@
<table border=3>
<tr>
<th> Task </th>
<th> Driver </th>
<th> Responsible </th>
<th> Last updated </th>
<th> Status </th>
<th> busdma </th>
<th> INTR_MPSAFE </th>
<th> SMPng locked </th>
<th> Notes </th>
</tr>
<tr>
<td> aac </td>
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &a.scottl; </td>
<td> February 8, 2003 </td>
<td> &status.done; </td>
<td> &status.wip; </td>
<td> &status.wip; </td>
<td> Not 64-bit-safe </td>
</tr>
@ -450,6 +548,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -458,6 +558,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -466,6 +568,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -474,6 +578,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -482,6 +588,8 @@
<td> &nbsp; </td>
<td> December 14, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -490,6 +598,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -498,6 +608,8 @@
<td> &a.obrien; </td>
<td> January 4, 2003 </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -506,6 +618,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -514,6 +628,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -522,6 +638,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -530,6 +648,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -538,6 +658,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -546,6 +668,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -554,30 +678,38 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
<tr>
<td> isp </td>
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> February 8, 2003 </td>
<td> &status.done; </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
<tr>
<td> mlx </td>
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &a.scottl; </td>
<td> February 8, 2003 </td>
<td> &status.done; </td>
<td> &status.wip; </td>
<td> &status.wip; </td>
<td> &nbsp; </td>
</tr>
<tr>
<td> mly </td>
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &a.scottl; </td>
<td> February 8, 2003 </td>
<td> &status.done; </td>
<td> &status.wip; </td>
<td> &status.wip; </td>
<td> &nbsp; </td>
</tr>
@ -586,6 +718,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -594,6 +728,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys(). Please contact &a.phk; for a possible source
of hardware. </td>
</tr>
@ -603,6 +739,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -611,6 +749,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> At least, it looks like it may well be. </td>
</tr>
@ -619,6 +759,8 @@
<td> &nbsp; </td>
<td> December 19, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -627,6 +769,8 @@
<td> &a.cognet; </td>
<td> December 9, 2002 </td>
<td> &status.wip; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -635,6 +779,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -644,10 +790,12 @@
<table border=3>
<tr>
<th> Task </th>
<th> Driver </th>
<th> Responsible </th>
<th> Last updated </th>
<th> Status </th>
<th> busdma </th>
<th> INTR_MPSAFE </th>
<th> SMPng locked </th>
<th> Notes </th>
</tr>
@ -656,6 +804,8 @@
<td> &a.cognet; </td>
<td> January 23, 2003 </td>
<td> &status.wip; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -664,6 +814,8 @@
<td> &a.cognet; </td>
<td> January 15, 2003 </td>
<td> &status.wip; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -672,6 +824,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -680,6 +834,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -688,6 +844,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -696,6 +854,8 @@
<td> &a.imp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -704,6 +864,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -712,6 +874,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -720,6 +884,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -728,6 +894,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -736,6 +904,8 @@
<td> &a.sam; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>
@ -744,6 +914,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -752,6 +924,8 @@
<td> &nbsp; </td>
<td> &nbsp; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys(). Please contact &a.phk; for info/hardware. </td>
</tr>
@ -760,6 +934,8 @@
<td> &a.sam; </td>
<td> December 9, 2002</td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() is used in debugging printf </td>
</tr>
@ -768,6 +944,8 @@
<td> &a.joe; </td>
<td> December 10, 2002 </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> vtophys() </td>
</tr>
@ -776,6 +954,8 @@
<td> &nbsp; </td>
<td> December 9, 2002 </td>
<td> &status.done; </td>
<td> &status.new; </td>
<td> &status.new; </td>
<td> &nbsp; </td>
</tr>

View file

@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" [
<!ENTITY base CDATA "..">
<!ENTITY date "$FreeBSD: www/en/projects/projects.sgml,v 1.136 2002/12/10 12:45:23 rwatson Exp $">
<!ENTITY date "$FreeBSD: www/en/projects/projects.sgml,v 1.137 2002/12/13 00:15:30 murray Exp $">
<!ENTITY title "FreeBSD Development Projects">
<!ENTITY % includes SYSTEM "../includes.sgml"> %includes;
]>
@ -315,11 +315,12 @@ development that could stand to gain from time or resources
you may have to offer.</li>
<li><a name="busdma" href="&base;/projects/busdma/index.html">busdma
driver conversion</a>: busdma provides a portable abstraction to the
Direct Memory Access (DMA) hardware primitives used by many high
and SMPng driver conversion</a>: busdma provides a portable abstraction
to the Direct Memory Access (DMA) hardware primitives used by many high
performance device drivers. By using this abstraction, device driver
authors avoid adding platform-specific DMA management code, improving
the portability of drivers between hardware architectures.</li>
the portability of drivers between hardware architectures. This page
also tracks the progress of drivers towards being SMPng-safe.</li>
<li><a name="deviceframework" href="http://people.FreeBSD.org/~dfr/devices.html">
A New Device Framework for FreeBSD</a></li>