The nuttx simulator running tcpecho doesn't appear to have any problem with
large TCP sends or large number of large TCP sends. So the problem with
tcpecho / tcpblaster on the SAMA5D36 seems to be in the SAMA5 code
somewhere.

The GMAC driver fix that I have only works when net logging is turned, and
it tested it more thoroughly today. It definitely works. But I don't
understand how it works, or why it doesn't work at high speeds.

-adam

On Tue, Feb 11, 2020 at 6:18 PM Adam Feuer <a...@starcat.io> wrote:

> I did some more debugging today. It seems like the GMAC is sending
> multiple buffers sometimes when the TCP send is larger than MSS. So it's
> not sending not just a single one by itself. When that happens, the GMAC
> driver marks the first TX buffer descriptor as used (sent), txdesc->status
> = GMACTXD_STA_USED; but subsequent buffers are unmarked until the last,
> which is marked with GMACTXD_STA_LAST. Buffers that are not marked never
> get returned to the free pool. Hence the GMAC driver leaks buffers,
> eventually runs out of TX buffers, stops receiving, can't send, and
> eventually the txtimeout happens. Then the driver reinitializes the GMAC
> and the TX buffer pool, and frames start sending again. And the process
> repeats.
>
> I have a fix that works at slow speeds– with some logging turned on. It
> can do unlimited TCP sends of any size. With logging off, it hangs. I'm
> guessing that's because at high speeds it can send longer chains of packets
> and buffers all at once. I'm probably not handling chains of more than two
> consecutive packets correctly. I'll work on it some more tomorrow.
>
> -adam
>
> On Mon, Feb 10, 2020 at 5:38 PM Adam Feuer <a...@starcat.io> wrote:
>
>> I put a log statement in sam_txdone()... what appears to be happening is
>> that the TX descriptor-in-use case is executed at sam_txdone(), line 1364,
>> in sam_gmac.c, so the TX buffer fills up.
>>
>> So it seems like the GMAC driver or hardware gets into a state where it
>> is not able to send packets until the driver and hardware is reset. Still
>> not sure why that's happening.
>>
>> -adam
>>
>> On Mon, Feb 10, 2020 at 3:50 PM Adam Feuer <a...@starcat.io> wrote:
>>
>>> It seems like the SAMA5D36 GMAC driver in sam_gmac.c is running out of
>>> TX buffers. I can set a large number of buffers, but it always seems to run
>>> out. I get these entries in the log:
>>>
>>> [  402.310000] sam_transmit: Disabling RX interrupts
>>>
>>> That seems to come from line 769 which notes that it's doing this
>>> because it can't transmit due to lack of TX buffers. Immediately
>>> afterwards, the transmission stalls, and then a minute later there is a
>>> txtimeout fired, the driver restarts, packets can be sent again until it
>>> runs out of TX buffers again.
>>>
>>> So it seems like there might be something wrong here. Could it be my
>>> configuration? Or could it be that the GMAC driver is leaking TX buffers?
>>> Does anyone have any ideas on how to find the leak?
>>>
>>> cheers
>>> adam
>>>
>>> On Mon, Feb 10, 2020 at 1:51 PM Adam Feuer <a...@starcat.io> wrote:
>>>
>>>> Well, at least that is a lot of progress for a day.  Going from
>>>> clueless
>>>>
>>>>> to pinpointing the failure.
>>>>>
>>>>
>>>> Greg,
>>>>
>>>> Yes! Thank you for the help.
>>>>
>>>> cheers
>>>> adam
>>>> --
>>>> Adam Feuer <a...@starcat.io>
>>>>
>>>
>>>
>>> --
>>> Adam Feuer <a...@starcat.io>
>>>
>>
>>
>> --
>> Adam Feuer <a...@starcat.io>
>>
>
>
> --
> Adam Feuer <a...@starcat.io>
>


-- 
Adam Feuer <a...@starcat.io>

Reply via email to