net: allwinner: Fix use correct return type for ndo_start_xmit()
authorYunjian Wang <wangyunjian@huawei.com>
Tue, 5 May 2020 02:49:20 +0000 (10:49 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 5 May 2020 18:14:40 +0000 (11:14 -0700)
The method ndo_start_xmit() returns a value of type netdev_tx_t. Fix
the ndo function to use the correct type. And emac_start_xmit() can
leak one skb if 'channel' == 3.

Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/allwinner/sun4i-emac.c

index 18d3b4340bd456c250730660d433c3d7781aed1e..b3b8a801014230c362f6546e302945a8eaf8c0d4 100644 (file)
@@ -417,7 +417,7 @@ static void emac_timeout(struct net_device *dev, unsigned int txqueue)
 /* Hardware start transmission.
  * Send a packet to media from the upper layer.
  */
-static int emac_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t emac_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct emac_board_info *db = netdev_priv(dev);
        unsigned long channel;
@@ -425,7 +425,7 @@ static int emac_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
        channel = db->tx_fifo_stat & 3;
        if (channel == 3)
-               return 1;
+               return NETDEV_TX_BUSY;
 
        channel = (channel == 1 ? 1 : 0);