75767cb8 hselasky Feb. 1, 2022, 3:21 p.m.
The TLS RX support also needs to be able to allocate DEK objects.
Share the available objects 1:1.

MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
fad4b7d1 hselasky Feb. 1, 2022, 3:21 p.m.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
3a1bf855 hselasky Feb. 1, 2022, 3:21 p.m.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
33a6a7a7 hselasky Feb. 1, 2022, 3:21 p.m.
Allocate the RQT once, pointing all initial entries to the drop RQN.
When opening the channels simplify modify the RQT, directing all traffic
to the new RQNs. Similarly when closing the channels point all RQT entries
back to the so-called drop RQN.

MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
7800af35 hselasky Feb. 1, 2022, 3:21 p.m.
Else creating the drop RQ fails.

MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
03567b0d hselasky Feb. 1, 2022, 3:21 p.m.
A valid channel pointer is needed to get the priv pointer during init.

MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
4e40e984 hselasky Feb. 1, 2022, 3:21 p.m.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
27b778ae hselasky Feb. 1, 2022, 3:21 p.m.
What is a drop RQ and why is it needed?

The RSS indirection table, also called the RQT, selects the
destination RQ based on the receive queue number, RQN. The RQT is
frequently referred to by flow steering rules to distribute traffic
among multiple RQs. The problem is that the RQs cannot be destroyed
before the RQT referring them is destroyed too. Further, TLS RX
rules may still be referring to the RQT even if the link went
down. Because there is no magic RQN for dropping packets, we create
a dummy RQ, also called drop RQ, which sole purpose is to drop all
received packets. When the link goes down this RQN is filled in all
RQT entries, of the main RQT, so the real RQs which are about to be
destroyed can be released and the TLS RX rules can be sustained.

MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
a60f9534 hselasky Feb. 1, 2022, 3:21 p.m.
This prevents the so-called TIR context from changing during runtime.

MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
788e9e74 hselasky Feb. 1, 2022, 3:21 p.m.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
2d5e5a0d hselasky Feb. 1, 2022, 3:21 p.m.
During packet reception the network stack frequently transmit data in
response to TCP window updates. To reduce the number of transmit doorbells
needed, inhibit all transmit doorbells designated for the same channel until
after the reception of packets for the given channel is completed.

While at it slightly refactor the mlx5e_tx_notify_hw() function:

1) The doorbell information is always stored into sq->doorbell.d64 .
No need to pass a separate pointer to this variable.

2) Move checks for skipping doorbell writes inside this function.

MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
0f7b6e11 kib Feb. 1, 2022, 12:45 p.m.
Instead of allocating directly from a normal zone. This way
import and release are guaranteed to process all allocated and then
deallocated items. Also, the release occurs in a sleepable context when
caller of uma_zfree() or uma_zdestroy() can sleep itself.

MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
028130b8 kib Feb. 1, 2022, 12:45 p.m.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
70600979 kib Feb. 1, 2022, 12:45 p.m.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit
89918a23 kib Feb. 1, 2022, 12:45 p.m.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
cgit