Skip to content

Commit 500257d

Browse files
committed
Merge branch 'ibmvnic-fix-for-send-scrq-direct'
Nick Child says: ==================== ibmvnic: Fix for send scrq direct This is a v2 of a patchset (now just patch) which addresses a bug in a new feature which is causing major link UP issues with certain physical cards. For a full summary of the issue: 1. During vnic initialization we get the following values from vnic server regarding "Transmit / Receive Descriptor Requirement" (see PAPR Table 584. CAPABILITIES Commands): - LSO Tx frame = 0x0F , header offsets + L2, L3, L4 headers required - CSO Tx frame = 0x0C , header offsets + L2 header required - standard frame = 0x0C , header offsets + L2 header required 2. Assume we are dealing with only "standard frames" from now on (no CSO, no LSO) 3. When using 100G backing device, we don't hand vnic server any header information and TX is successful 4. When using 25G backing device, we don't hand vnic server any header information and TX fails and we get "Adapter Error" transport events. The obvious issue here is that vnic client should be respecting the 0X0C header requirement for standard frames. But 100G cards will also give 0x0C despite the fact that we know TX works if we ignore it. That being said, we still must respect values given from the managing server. Will need to work with them going forward to hopefully get 100G cards to return 0x00 for this bitstring so the performance gains of using send_subcrq_direct can be continued. ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents 69ea1d4 + de39065 commit 500257d

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

drivers/net/ethernet/ibm/ibmvnic.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2472,9 +2472,11 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
24722472
/* if we are going to send_subcrq_direct this then we need to
24732473
* update the checksum before copying the data into ltb. Essentially
24742474
* these packets force disable CSO so that we can guarantee that
2475-
* FW does not need header info and we can send direct.
2475+
* FW does not need header info and we can send direct. Also, vnic
2476+
* server must be able to xmit standard packets without header data
24762477
*/
2477-
if (!skb_is_gso(skb) && !ind_bufp->index && !netdev_xmit_more()) {
2478+
if (*hdrs == 0 && !skb_is_gso(skb) &&
2479+
!ind_bufp->index && !netdev_xmit_more()) {
24782480
use_scrq_send_direct = true;
24792481
if (skb->ip_summed == CHECKSUM_PARTIAL &&
24802482
skb_checksum_help(skb))

0 commit comments

Comments
 (0)