[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <cbed13c5-906a-4960-8994-ba745866e6ee@huawei.com>
Date: Thu, 29 Aug 2024 20:57:37 +0800
From: Jijie Shao <shaojijie@...wei.com>
To: Andrew Lunn <andrew@...n.ch>
CC: <shaojijie@...wei.com>, Jakub Kicinski <kuba@...nel.org>,
<davem@...emloft.net>, <edumazet@...gle.com>, <pabeni@...hat.com>,
<shenjian15@...wei.com>, <wangpeiyang1@...wei.com>, <liuyonglong@...wei.com>,
<chenhao418@...wei.com>, <sudongming1@...wei.com>, <xujunsheng@...wei.com>,
<shiyongbang@...wei.com>, <libaihan@...wei.com>, <jdamato@...tly.com>,
<horms@...nel.org>, <jonathan.cameron@...wei.com>,
<shameerali.kolothum.thodi@...wei.com>, <salil.mehta@...wei.com>,
<netdev@...r.kernel.org>, <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH V5 net-next 06/11] net: hibmcge: Implement .ndo_start_xmit
function
on 2024/8/29 11:02, Andrew Lunn wrote:
> On Thu, Aug 29, 2024 at 10:32:33AM +0800, Jijie Shao wrote:
>> on 2024/8/29 9:41, Jakub Kicinski wrote:
>>> On Tue, 27 Aug 2024 21:14:50 +0800 Jijie Shao wrote:
>>>> @@ -111,6 +135,14 @@ static int hbg_init(struct hbg_priv *priv)
>>>> if (ret)
>>>> return ret;
>>>> + ret = hbg_txrx_init(priv);
>>>> + if (ret)
>>>> + return ret;
>>> You allocate buffers on the probe path?
>>> The queues and all the memory will be sitting allocated but unused if
>>> admin does ip link set dev $eth0 down?
>> The network port has only one queue and
>> the TX queue depth is 64, RX queue depth is 127.
>> so it doesn't take up much memory.
>>
>> Also, I plan to add the self_test feature in a future patch.
>> If I don't allocate buffers on the probe path,
>> I won't be able to do a loopback test if the network port goes down unexpectedly.
> When you come to implement ethtool --set-ring, you will need to
> allocate and free the ring buffers outside of probe.
>
> Andrew
We discussed this internally, and now we have a problem that we can't solve:
After allocate ring buffers, the driver will writes the address to the hardware FIFO
for receiving packets.
However, FIFO does not have a separate interface to clear ring buffers address.
If ring buffers can be allocated and released on other paths,
the driver buffer address is inconsistent with the hardware buffer address.
As a result, packet receiving is abnormal. The fault is rectified only
after the buffers of a queue depth are used up and new buffers are allocated for.
Actually, the buffer will be released during FLR reset and are allocated again after reset.
In this case, the FIFO are cleared. Therefore, driver writes the ring buffer address
to the hardware again to ensure that the driver address is the same as the hardware address.
If we do an FLR every time we allocate ring buffers on other path, It is expensive.
We will not implement re-allocate ring buffer interfaces like ethtool --set-ring.
Thanks
Jijie Shao
Powered by blists - more mailing lists