128d23311SMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0 228d23311SMauro Carvalho Chehab 328d23311SMauro Carvalho Chehab===================== 428d23311SMauro Carvalho ChehabSoftnet Driver Issues 528d23311SMauro Carvalho Chehab===================== 628d23311SMauro Carvalho Chehab 728d23311SMauro Carvalho ChehabTransmit path guidelines: 828d23311SMauro Carvalho Chehab 928d23311SMauro Carvalho Chehab1) The ndo_start_xmit method must not return NETDEV_TX_BUSY under 1028d23311SMauro Carvalho Chehab any normal circumstances. It is considered a hard error unless 11*404a5ad7SRandy Dunlap there is no way your device can tell ahead of time when its 1228d23311SMauro Carvalho Chehab transmit function will become busy. 1328d23311SMauro Carvalho Chehab 1428d23311SMauro Carvalho Chehab Instead it must maintain the queue properly. For example, 1528d23311SMauro Carvalho Chehab for a driver implementing scatter-gather this means:: 1628d23311SMauro Carvalho Chehab 1728d23311SMauro Carvalho Chehab static netdev_tx_t drv_hard_start_xmit(struct sk_buff *skb, 1828d23311SMauro Carvalho Chehab struct net_device *dev) 1928d23311SMauro Carvalho Chehab { 2028d23311SMauro Carvalho Chehab struct drv *dp = netdev_priv(dev); 2128d23311SMauro Carvalho Chehab 2228d23311SMauro Carvalho Chehab lock_tx(dp); 2328d23311SMauro Carvalho Chehab ... 2428d23311SMauro Carvalho Chehab /* This is a hard error log it. */ 2528d23311SMauro Carvalho Chehab if (TX_BUFFS_AVAIL(dp) <= (skb_shinfo(skb)->nr_frags + 1)) { 2628d23311SMauro Carvalho Chehab netif_stop_queue(dev); 2728d23311SMauro Carvalho Chehab unlock_tx(dp); 2828d23311SMauro Carvalho Chehab printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n", 2928d23311SMauro Carvalho Chehab dev->name); 3028d23311SMauro Carvalho Chehab return NETDEV_TX_BUSY; 3128d23311SMauro Carvalho Chehab } 3228d23311SMauro Carvalho Chehab 3328d23311SMauro Carvalho Chehab ... queue packet to card ... 3428d23311SMauro Carvalho Chehab ... update tx consumer index ... 3528d23311SMauro Carvalho Chehab 3628d23311SMauro Carvalho Chehab if (TX_BUFFS_AVAIL(dp) <= (MAX_SKB_FRAGS + 1)) 3728d23311SMauro Carvalho Chehab netif_stop_queue(dev); 3828d23311SMauro Carvalho Chehab 3928d23311SMauro Carvalho Chehab ... 4028d23311SMauro Carvalho Chehab unlock_tx(dp); 4128d23311SMauro Carvalho Chehab ... 4228d23311SMauro Carvalho Chehab return NETDEV_TX_OK; 4328d23311SMauro Carvalho Chehab } 4428d23311SMauro Carvalho Chehab 4528d23311SMauro Carvalho Chehab And then at the end of your TX reclamation event handling:: 4628d23311SMauro Carvalho Chehab 4728d23311SMauro Carvalho Chehab if (netif_queue_stopped(dp->dev) && 4828d23311SMauro Carvalho Chehab TX_BUFFS_AVAIL(dp) > (MAX_SKB_FRAGS + 1)) 4928d23311SMauro Carvalho Chehab netif_wake_queue(dp->dev); 5028d23311SMauro Carvalho Chehab 5128d23311SMauro Carvalho Chehab For a non-scatter-gather supporting card, the three tests simply become:: 5228d23311SMauro Carvalho Chehab 5328d23311SMauro Carvalho Chehab /* This is a hard error log it. */ 5428d23311SMauro Carvalho Chehab if (TX_BUFFS_AVAIL(dp) <= 0) 5528d23311SMauro Carvalho Chehab 5628d23311SMauro Carvalho Chehab and:: 5728d23311SMauro Carvalho Chehab 5828d23311SMauro Carvalho Chehab if (TX_BUFFS_AVAIL(dp) == 0) 5928d23311SMauro Carvalho Chehab 6028d23311SMauro Carvalho Chehab and:: 6128d23311SMauro Carvalho Chehab 6228d23311SMauro Carvalho Chehab if (netif_queue_stopped(dp->dev) && 6328d23311SMauro Carvalho Chehab TX_BUFFS_AVAIL(dp) > 0) 6428d23311SMauro Carvalho Chehab netif_wake_queue(dp->dev); 6528d23311SMauro Carvalho Chehab 6628d23311SMauro Carvalho Chehab2) An ndo_start_xmit method must not modify the shared parts of a 6728d23311SMauro Carvalho Chehab cloned SKB. 6828d23311SMauro Carvalho Chehab 6928d23311SMauro Carvalho Chehab3) Do not forget that once you return NETDEV_TX_OK from your 7028d23311SMauro Carvalho Chehab ndo_start_xmit method, it is your driver's responsibility to free 7128d23311SMauro Carvalho Chehab up the SKB and in some finite amount of time. 7228d23311SMauro Carvalho Chehab 7328d23311SMauro Carvalho Chehab For example, this means that it is not allowed for your TX 7428d23311SMauro Carvalho Chehab mitigation scheme to let TX packets "hang out" in the TX 7528d23311SMauro Carvalho Chehab ring unreclaimed forever if no new TX packets are sent. 7628d23311SMauro Carvalho Chehab This error can deadlock sockets waiting for send buffer room 7728d23311SMauro Carvalho Chehab to be freed up. 7828d23311SMauro Carvalho Chehab 7928d23311SMauro Carvalho Chehab If you return NETDEV_TX_BUSY from the ndo_start_xmit method, you 8028d23311SMauro Carvalho Chehab must not keep any reference to that SKB and you must not attempt 8128d23311SMauro Carvalho Chehab to free it up. 8228d23311SMauro Carvalho Chehab 8328d23311SMauro Carvalho ChehabProbing guidelines: 8428d23311SMauro Carvalho Chehab 8528d23311SMauro Carvalho Chehab1) Any hardware layer address you obtain for your device should 8628d23311SMauro Carvalho Chehab be verified. For example, for ethernet check it with 8728d23311SMauro Carvalho Chehab linux/etherdevice.h:is_valid_ether_addr() 8828d23311SMauro Carvalho Chehab 8928d23311SMauro Carvalho ChehabClose/stop guidelines: 9028d23311SMauro Carvalho Chehab 9128d23311SMauro Carvalho Chehab1) After the ndo_stop routine has been called, the hardware must 9228d23311SMauro Carvalho Chehab not receive or transmit any data. All in flight packets must 9328d23311SMauro Carvalho Chehab be aborted. If necessary, poll or wait for completion of 9428d23311SMauro Carvalho Chehab any reset commands. 9528d23311SMauro Carvalho Chehab 9628d23311SMauro Carvalho Chehab2) The ndo_stop routine will be called by unregister_netdevice 9728d23311SMauro Carvalho Chehab if device is still UP. 98