1*28d23311SMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0 2*28d23311SMauro Carvalho Chehab 3*28d23311SMauro Carvalho Chehab===================== 4*28d23311SMauro Carvalho ChehabSoftnet Driver Issues 5*28d23311SMauro Carvalho Chehab===================== 6*28d23311SMauro Carvalho Chehab 7*28d23311SMauro Carvalho ChehabTransmit path guidelines: 8*28d23311SMauro Carvalho Chehab 9*28d23311SMauro Carvalho Chehab1) The ndo_start_xmit method must not return NETDEV_TX_BUSY under 10*28d23311SMauro Carvalho Chehab any normal circumstances. It is considered a hard error unless 11*28d23311SMauro Carvalho Chehab there is no way your device can tell ahead of time when it's 12*28d23311SMauro Carvalho Chehab transmit function will become busy. 13*28d23311SMauro Carvalho Chehab 14*28d23311SMauro Carvalho Chehab Instead it must maintain the queue properly. For example, 15*28d23311SMauro Carvalho Chehab for a driver implementing scatter-gather this means:: 16*28d23311SMauro Carvalho Chehab 17*28d23311SMauro Carvalho Chehab static netdev_tx_t drv_hard_start_xmit(struct sk_buff *skb, 18*28d23311SMauro Carvalho Chehab struct net_device *dev) 19*28d23311SMauro Carvalho Chehab { 20*28d23311SMauro Carvalho Chehab struct drv *dp = netdev_priv(dev); 21*28d23311SMauro Carvalho Chehab 22*28d23311SMauro Carvalho Chehab lock_tx(dp); 23*28d23311SMauro Carvalho Chehab ... 24*28d23311SMauro Carvalho Chehab /* This is a hard error log it. */ 25*28d23311SMauro Carvalho Chehab if (TX_BUFFS_AVAIL(dp) <= (skb_shinfo(skb)->nr_frags + 1)) { 26*28d23311SMauro Carvalho Chehab netif_stop_queue(dev); 27*28d23311SMauro Carvalho Chehab unlock_tx(dp); 28*28d23311SMauro Carvalho Chehab printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n", 29*28d23311SMauro Carvalho Chehab dev->name); 30*28d23311SMauro Carvalho Chehab return NETDEV_TX_BUSY; 31*28d23311SMauro Carvalho Chehab } 32*28d23311SMauro Carvalho Chehab 33*28d23311SMauro Carvalho Chehab ... queue packet to card ... 34*28d23311SMauro Carvalho Chehab ... update tx consumer index ... 35*28d23311SMauro Carvalho Chehab 36*28d23311SMauro Carvalho Chehab if (TX_BUFFS_AVAIL(dp) <= (MAX_SKB_FRAGS + 1)) 37*28d23311SMauro Carvalho Chehab netif_stop_queue(dev); 38*28d23311SMauro Carvalho Chehab 39*28d23311SMauro Carvalho Chehab ... 40*28d23311SMauro Carvalho Chehab unlock_tx(dp); 41*28d23311SMauro Carvalho Chehab ... 42*28d23311SMauro Carvalho Chehab return NETDEV_TX_OK; 43*28d23311SMauro Carvalho Chehab } 44*28d23311SMauro Carvalho Chehab 45*28d23311SMauro Carvalho Chehab And then at the end of your TX reclamation event handling:: 46*28d23311SMauro Carvalho Chehab 47*28d23311SMauro Carvalho Chehab if (netif_queue_stopped(dp->dev) && 48*28d23311SMauro Carvalho Chehab TX_BUFFS_AVAIL(dp) > (MAX_SKB_FRAGS + 1)) 49*28d23311SMauro Carvalho Chehab netif_wake_queue(dp->dev); 50*28d23311SMauro Carvalho Chehab 51*28d23311SMauro Carvalho Chehab For a non-scatter-gather supporting card, the three tests simply become:: 52*28d23311SMauro Carvalho Chehab 53*28d23311SMauro Carvalho Chehab /* This is a hard error log it. */ 54*28d23311SMauro Carvalho Chehab if (TX_BUFFS_AVAIL(dp) <= 0) 55*28d23311SMauro Carvalho Chehab 56*28d23311SMauro Carvalho Chehab and:: 57*28d23311SMauro Carvalho Chehab 58*28d23311SMauro Carvalho Chehab if (TX_BUFFS_AVAIL(dp) == 0) 59*28d23311SMauro Carvalho Chehab 60*28d23311SMauro Carvalho Chehab and:: 61*28d23311SMauro Carvalho Chehab 62*28d23311SMauro Carvalho Chehab if (netif_queue_stopped(dp->dev) && 63*28d23311SMauro Carvalho Chehab TX_BUFFS_AVAIL(dp) > 0) 64*28d23311SMauro Carvalho Chehab netif_wake_queue(dp->dev); 65*28d23311SMauro Carvalho Chehab 66*28d23311SMauro Carvalho Chehab2) An ndo_start_xmit method must not modify the shared parts of a 67*28d23311SMauro Carvalho Chehab cloned SKB. 68*28d23311SMauro Carvalho Chehab 69*28d23311SMauro Carvalho Chehab3) Do not forget that once you return NETDEV_TX_OK from your 70*28d23311SMauro Carvalho Chehab ndo_start_xmit method, it is your driver's responsibility to free 71*28d23311SMauro Carvalho Chehab up the SKB and in some finite amount of time. 72*28d23311SMauro Carvalho Chehab 73*28d23311SMauro Carvalho Chehab For example, this means that it is not allowed for your TX 74*28d23311SMauro Carvalho Chehab mitigation scheme to let TX packets "hang out" in the TX 75*28d23311SMauro Carvalho Chehab ring unreclaimed forever if no new TX packets are sent. 76*28d23311SMauro Carvalho Chehab This error can deadlock sockets waiting for send buffer room 77*28d23311SMauro Carvalho Chehab to be freed up. 78*28d23311SMauro Carvalho Chehab 79*28d23311SMauro Carvalho Chehab If you return NETDEV_TX_BUSY from the ndo_start_xmit method, you 80*28d23311SMauro Carvalho Chehab must not keep any reference to that SKB and you must not attempt 81*28d23311SMauro Carvalho Chehab to free it up. 82*28d23311SMauro Carvalho Chehab 83*28d23311SMauro Carvalho ChehabProbing guidelines: 84*28d23311SMauro Carvalho Chehab 85*28d23311SMauro Carvalho Chehab1) Any hardware layer address you obtain for your device should 86*28d23311SMauro Carvalho Chehab be verified. For example, for ethernet check it with 87*28d23311SMauro Carvalho Chehab linux/etherdevice.h:is_valid_ether_addr() 88*28d23311SMauro Carvalho Chehab 89*28d23311SMauro Carvalho ChehabClose/stop guidelines: 90*28d23311SMauro Carvalho Chehab 91*28d23311SMauro Carvalho Chehab1) After the ndo_stop routine has been called, the hardware must 92*28d23311SMauro Carvalho Chehab not receive or transmit any data. All in flight packets must 93*28d23311SMauro Carvalho Chehab be aborted. If necessary, poll or wait for completion of 94*28d23311SMauro Carvalho Chehab any reset commands. 95*28d23311SMauro Carvalho Chehab 96*28d23311SMauro Carvalho Chehab2) The ndo_stop routine will be called by unregister_netdevice 97*28d23311SMauro Carvalho Chehab if device is still UP. 98