On 03/31, Stanislav Fomichev wrote:
On 03/29, Wang Liang wrote:Hmm, wait, I stumbled upon xskq_has_descs again and it looks only at
The tx_ring_empty_descs count may be incorrect, when set the XDP_TX_RINGAcked-by: Stanislav Fomichev <sdf@xxxxxxxxxxx>
option but do not reserve tx ring. Because xsk_poll() try to wakeup the
driver by calling xsk_generic_xmit() for non-zero-copy mode. So the
tx_ring_empty_descs count increases once the xsk_poll()is called:
xsk_poll
xsk_generic_xmit
__xsk_generic_xmit
xskq_cons_peek_desc
xskq_cons_read_desc
q->queue_empty_descs++;
To avoid this count error, add check for tx descs before send msg in poll.
Fixes: df551058f7a3 ("xsk: Fix crash in poll when device does not support ndo_xsk_wakeup")
Signed-off-by: Wang Liang <wangliang74@xxxxxxxxxx>
cached prod/cons. How is it supposed to work when the actual tx
descriptor is posted? Is there anything besides xskq_cons_peek_desc from
__xsk_generic_xmit that refreshes cached_prod?