tech-net archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: BNX driver problem when mbuf clusters run out
On Apr 20, 2012, at 1:27 AM, Matt Thomas wrote:
>
> On Apr 19, 2012, at 6:48 PM, Beverly Schwartz wrote:
>
>>
>> On Apr 19, 2012, at 8:27 PM, Matt Thomas wrote:
>>
>>>
>>> On Apr 19, 2012, at 5:08 PM, Beverly Schwartz wrote:
>>>
>>>>
>>>> On Apr 19, 2012, at 8:02 PM, Matt Thomas wrote:
>>>>>
>>>>> Unfortunately, that can lead to receiver livelock (spend all the time
>>>>> servicing interrupts without making progress). The best thing to do is
>>>>> pass the packet up the stack and just another packet to the hardware.
>>>>> Instead use bnx_tick to add mbufs if needed. This gives the stack a
>>>>> chance to run and hopefully free some mbufs.
>>>>
>>>> I tried that. And at first, things move along. But eventually,
>>>> bnx_rx_intr never gets called, because
>>>> if (sblk->status_rx_quick_consumer_index0 != sc->nw_rx_cons)
>>>> in bnx_intr always fails.
>>>
>>> For now, can you try the patch at
>>>
>>> http://www.netbsd.org/~matt/if_bnx-diff.txt
>>>
>>> It's kind of ugly but it is a minimal change.
>>
>> Doesn't quite do it. With this change, the sw_cons index doesn't get
>> incremented. Next time bnx_rx_intr is called, we'll have the same overwrite
>> problem. I'm now trying incremeing sw_cons before calling break. When I
>> left work, it was still running. Tomorrow morning, I'll see if everything
>> is still intact.
>
> It should get incremented since
>
> sw_cons = NEXT_RX_BD(sw_cons);
>
> is after the loop.
It's after the if conditional. It's still in the loop.
-Bev
Home |
Main Index |
Thread Index |
Old Index