net: mediatek: move the pending_work struct to the device generic struct

The worker always touches both netdevs. It is ethernet core and not MAC
specific. We only need one worker, which belongs into the ethernets core
struct.

Signed-off-by: John Crispin <blogic@openwrt.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
John Crispin 2016-04-08 00:54:10 +02:00 committed by David S. Miller
parent e7d425dcea
commit 7c78b4ad9b
2 changed files with 7 additions and 10 deletions

View File

@ -1193,7 +1193,7 @@ static void mtk_tx_timeout(struct net_device *dev)
eth->netdev[mac->id]->stats.tx_errors++; eth->netdev[mac->id]->stats.tx_errors++;
netif_err(eth, tx_err, dev, netif_err(eth, tx_err, dev,
"transmit timed out\n"); "transmit timed out\n");
schedule_work(&mac->pending_work); schedule_work(&eth->pending_work);
} }
static irqreturn_t mtk_handle_irq(int irq, void *_eth) static irqreturn_t mtk_handle_irq(int irq, void *_eth)
@ -1430,8 +1430,7 @@ static int mtk_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
static void mtk_pending_work(struct work_struct *work) static void mtk_pending_work(struct work_struct *work)
{ {
struct mtk_mac *mac = container_of(work, struct mtk_mac, pending_work); struct mtk_eth *eth = container_of(work, struct mtk_eth, pending_work);
struct mtk_eth *eth = mac->hw;
int err, i; int err, i;
unsigned long restart = 0; unsigned long restart = 0;
@ -1439,7 +1438,7 @@ static void mtk_pending_work(struct work_struct *work)
/* stop all devices to make sure that dma is properly shut down */ /* stop all devices to make sure that dma is properly shut down */
for (i = 0; i < MTK_MAC_COUNT; i++) { for (i = 0; i < MTK_MAC_COUNT; i++) {
if (!netif_oper_up(eth->netdev[i])) if (!eth->netdev[i])
continue; continue;
mtk_stop(eth->netdev[i]); mtk_stop(eth->netdev[i]);
__set_bit(i, &restart); __set_bit(i, &restart);
@ -1464,15 +1463,13 @@ static int mtk_cleanup(struct mtk_eth *eth)
int i; int i;
for (i = 0; i < MTK_MAC_COUNT; i++) { for (i = 0; i < MTK_MAC_COUNT; i++) {
struct mtk_mac *mac = netdev_priv(eth->netdev[i]);
if (!eth->netdev[i]) if (!eth->netdev[i])
continue; continue;
unregister_netdev(eth->netdev[i]); unregister_netdev(eth->netdev[i]);
free_netdev(eth->netdev[i]); free_netdev(eth->netdev[i]);
cancel_work_sync(&mac->pending_work);
} }
cancel_work_sync(&eth->pending_work);
return 0; return 0;
} }
@ -1660,7 +1657,6 @@ static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
mac->id = id; mac->id = id;
mac->hw = eth; mac->hw = eth;
mac->of_node = np; mac->of_node = np;
INIT_WORK(&mac->pending_work, mtk_pending_work);
mac->hw_stats = devm_kzalloc(eth->dev, mac->hw_stats = devm_kzalloc(eth->dev,
sizeof(*mac->hw_stats), sizeof(*mac->hw_stats),
@ -1762,6 +1758,7 @@ static int mtk_probe(struct platform_device *pdev)
eth->dev = &pdev->dev; eth->dev = &pdev->dev;
eth->msg_enable = netif_msg_init(mtk_msg_level, MTK_DEFAULT_MSG_ENABLE); eth->msg_enable = netif_msg_init(mtk_msg_level, MTK_DEFAULT_MSG_ENABLE);
INIT_WORK(&eth->pending_work, mtk_pending_work);
err = mtk_hw_init(eth); err = mtk_hw_init(eth);
if (err) if (err)

View File

@ -363,6 +363,7 @@ struct mtk_rx_ring {
* @clk_gp1: The gmac1 clock * @clk_gp1: The gmac1 clock
* @clk_gp2: The gmac2 clock * @clk_gp2: The gmac2 clock
* @mii_bus: If there is a bus we need to create an instance for it * @mii_bus: If there is a bus we need to create an instance for it
* @pending_work: The workqueue used to reset the dma ring
*/ */
struct mtk_eth { struct mtk_eth {
@ -389,6 +390,7 @@ struct mtk_eth {
struct clk *clk_gp1; struct clk *clk_gp1;
struct clk *clk_gp2; struct clk *clk_gp2;
struct mii_bus *mii_bus; struct mii_bus *mii_bus;
struct work_struct pending_work;
}; };
/* struct mtk_mac - the structure that holds the info about the MACs of the /* struct mtk_mac - the structure that holds the info about the MACs of the
@ -398,7 +400,6 @@ struct mtk_eth {
* @hw: Backpointer to our main datastruture * @hw: Backpointer to our main datastruture
* @hw_stats: Packet statistics counter * @hw_stats: Packet statistics counter
* @phy_dev: The attached PHY if available * @phy_dev: The attached PHY if available
* @pending_work: The workqueue used to reset the dma ring
*/ */
struct mtk_mac { struct mtk_mac {
int id; int id;
@ -406,7 +407,6 @@ struct mtk_mac {
struct mtk_eth *hw; struct mtk_eth *hw;
struct mtk_hw_stats *hw_stats; struct mtk_hw_stats *hw_stats;
struct phy_device *phy_dev; struct phy_device *phy_dev;
struct work_struct pending_work;
}; };
/* the struct describing the SoC. these are declared in the soc_xyz.c files */ /* the struct describing the SoC. these are declared in the soc_xyz.c files */