<div dir="ltr">I had this problem two years ago. I had to tune the forcedeth drivers with module options. It was crazy. The driver would not be able to clear the interrupt flag and just pause. I finally adjusted the parameters to polling instead of interrupt service. Fortunately this only affected NFS and it was not terribly busy.<br>
<br>see <a href="http://users.sosdg.org/~qiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10">http://users.sosdg.org/~qiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10</a><br><br>"<pre><b><i> Known bugs:</i></b><br> <a name="L84" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L84">84</a> <b><i> * We suspect that on some hardware no TX done interrupts are generated.</i></b><br>
 <a name="L85" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L85">85</a> <b><i> * This means recovery from netif_stop_queue only happens if the hw timer</i></b><br> <a name="L86" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L86">86</a> <b><i> * interrupt fires (100 times/second, configurable with NVREG_POLL_DEFAULT)</i></b><br>
 <a name="L87" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L87">87</a> <b><i> * and the timer is active in the IRQMask, or if a rx packet arrives by chance.</i></b><br> <a name="L88" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L88">88</a> <b><i> * If your hardware reliably generates tx done interrupts, then you can remove</i></b><br>
 <a name="L89" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L89">89</a> <b><i> * DEV_NEED_TIMERIRQ from the driver_data flags.</i></b><br> <a name="L90" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L90">90</a> <b><i> * DEV_NEED_TIMERIRQ will not harm you on sane hardware, only generating a few</i></b><br>
 <a name="L91" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L91">91</a> <b><i> * superfluous timer interrupts from the nic.</i></b><br><br></pre>"<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
 "<pre><b><i>/*</i></b><br><a name="L485" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L485">485</a> <b><i> * Maximum number of loops until we assume that a bit in the irq mask</i></b><br>
<a name="L486" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L486">486</a> <b><i> * is stuck. Overridable with module param.</i></b><br><a name="L487" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L487">487</a> <b><i> */</i></b><br>
<a name="L488" href="http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L488">488</a> static int <a href="http://users.sosdg.org/%7Eqiyong/lxr/ident?v=2.6.10;i=max_interrupt_work">max_interrupt_work</a> = 5;</pre>
</blockquote><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><pre><br></pre>"</blockquote><div><br>"<pre> <a href="http://users.sosdg.org/%7Eqiyong/lxr/ident?v=2.6.10;i=MODULE_PARM_DESC">MODULE_PARM_DESC</a>(<a href="http://users.sosdg.org/%7Eqiyong/lxr/ident?v=2.6.10;i=max_interrupt_work">max_interrupt_work</a>, <i>"forcedeth maximum events handled per interrupt"</i>);<br>
<br><br></pre>" <br><br>Other versions have more options like:<br><a href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c">http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c</a><br>"<pre>
 <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=module_param">module_param</a>(<a href="http://www.gelato.unsw.edu.au/lxr/ident?i=max_interrupt_work">max_interrupt_work</a>, int, 0);<br><a name="L3406" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3406">3406</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_PARM_DESC">MODULE_PARM_DESC</a>(<a href="http://www.gelato.unsw.edu.au/lxr/ident?i=max_interrupt_work">max_interrupt_work</a>, <i>"forcedeth maximum events handled per interrupt"</i>);<br>
<a name="L3407" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3407">3407</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=module_param">module_param</a>(<a href="http://www.gelato.unsw.edu.au/lxr/ident?i=optimization_mode">optimization_mode</a>, int, 0);<br>
<a name="L3408" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3408">3408</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_PARM_DESC">MODULE_PARM_DESC</a>(<a href="http://www.gelato.unsw.edu.au/lxr/ident?i=optimization_mode">optimization_mode</a>, <i>"In throughput mode (0), every tx & rx packet will generate an interrupt. In CPU mode (1), interrupts are controlled by a timer."</i>);<br>
<a name="L3409" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3409">3409</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=module_param">module_param</a>(<a href="http://www.gelato.unsw.edu.au/lxr/ident?i=poll_interval">poll_interval</a>, int, 0);<br>
<a name="L3410" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3410">3410</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_PARM_DESC">MODULE_PARM_DESC</a>(<a href="http://www.gelato.unsw.edu.au/lxr/ident?i=poll_interval">poll_interval</a>, <i>"Interval determines how frequent timer interrupt is generated by [(time_in_micro_secs * 100) / (2^10)]. Min is 0 and Max is 65535."</i>);<br>
<a name="L3411" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3411">3411</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=module_param">module_param</a>(<a href="http://www.gelato.unsw.edu.au/lxr/ident?i=disable_msi">disable_msi</a>, int, 0);<br>
<a name="L3412" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3412">3412</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_PARM_DESC">MODULE_PARM_DESC</a>(<a href="http://www.gelato.unsw.edu.au/lxr/ident?i=disable_msi">disable_msi</a>, <i>"Disable MSI interrupts by setting to 1."</i>);<br>
<a name="L3413" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3413">3413</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=module_param">module_param</a>(<a href="http://www.gelato.unsw.edu.au/lxr/ident?i=disable_msix">disable_msix</a>, int, 0);<br>
<a name="L3414" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3414">3414</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_PARM_DESC">MODULE_PARM_DESC</a>(<a href="http://www.gelato.unsw.edu.au/lxr/ident?i=disable_msix">disable_msix</a>, <i>"Disable MSIX interrupts by setting to 1."</i>);<br>
<a name="L3415" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3415">3415</a> <br><a name="L3416" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3416">3416</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_AUTHOR">MODULE_AUTHOR</a>(<i>"Manfred Spraul <<a href="mailto:manfred@colorfullife.com">manfred@colorfullife.com</a>>"</i>);<br>
<a name="L3417" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3417">3417</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_DESCRIPTION">MODULE_DESCRIPTION</a>(<i>"Reverse Engineered nForce ethernet driver"</i>);<br>
<a name="L3418" href="http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3418">3418</a> <a href="http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_LICENSE">MODULE_LICENSE</a>(<i>"GPL"</i>);<br></pre>
"<br><br>I have long forgotten the settings I used, but this may help you find where to look. My recollection is that I polled with<br>optimization_mode=1<br>poll_interval=10000<br><br>Your guess is as good as mine what the units were. I just know I could transfer 112 MB/s with it.<br>
<br>Thank Goodness we have open source... ;-)<br></div></div>
</div>