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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Jun 2020 08:24:16 +0000 (10:24 +0200)
[ Upstream commit 09f6c44aaae0f1bdb8b983d7762676d5018c53bc ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/allwinner/sun4i-emac.c

index 6ffdff6..672a821 100644 (file)
@@ -412,7 +412,7 @@ static void emac_timeout(struct net_device *dev)
 /* 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;
@@ -420,7 +420,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);