kernel: update kernel 4.4 to version 4.4.12
[openwrt/openwrt.git] / target / linux / mediatek / patches-4.4 / 0068-net-mediatek-move-the-pending_work-struct-to-the-dev.patch
1 From 29bc7a1e374425937b5dd2f316dbeef343d4c68a Mon Sep 17 00:00:00 2001
2 From: John Crispin <blogic@openwrt.org>
3 Date: Tue, 29 Mar 2016 17:24:24 +0200
4 Subject: [PATCH 068/102] net: mediatek: move the pending_work struct to the
5 device generic struct
6
7 The worker always touches both netdevs. It is ethernet core and not MAC
8 specific. We only need one worker, which belongs into the ethernets core struct.
9
10 Signed-off-by: John Crispin <blogic@openwrt.org>
11 ---
12 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 10 ++++------
13 drivers/net/ethernet/mediatek/mtk_eth_soc.h | 4 ++--
14 2 files changed, 6 insertions(+), 8 deletions(-)
15
16 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
17 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
18 @@ -1193,7 +1193,7 @@ static void mtk_tx_timeout(struct net_de
19 eth->netdev[mac->id]->stats.tx_errors++;
20 netif_err(eth, tx_err, dev,
21 "transmit timed out\n");
22 - schedule_work(&mac->pending_work);
23 + schedule_work(&eth->pending_work);
24 }
25
26 static irqreturn_t mtk_handle_irq(int irq, void *_eth)
27 @@ -1438,7 +1438,7 @@ static void mtk_pending_work(struct work
28
29 /* stop all devices to make sure that dma is properly shut down */
30 for (i = 0; i < MTK_MAC_COUNT; i++) {
31 - if (!netif_oper_up(eth->netdev[i]))
32 + if (!eth->netdev[i])
33 continue;
34 mtk_stop(eth->netdev[i]);
35 __set_bit(i, &restart);
36 @@ -1464,15 +1464,13 @@ static int mtk_cleanup(struct mtk_eth *e
37 int i;
38
39 for (i = 0; i < MTK_MAC_COUNT; i++) {
40 - struct mtk_mac *mac = netdev_priv(eth->netdev[i]);
41 -
42 if (!eth->netdev[i])
43 continue;
44
45 unregister_netdev(eth->netdev[i]);
46 free_netdev(eth->netdev[i]);
47 - cancel_work_sync(&mac->pending_work);
48 }
49 + cancel_work_sync(&eth->pending_work);
50
51 return 0;
52 }
53 @@ -1660,7 +1658,6 @@ static int mtk_add_mac(struct mtk_eth *e
54 mac->id = id;
55 mac->hw = eth;
56 mac->of_node = np;
57 - INIT_WORK(&mac->pending_work, mtk_pending_work);
58
59 mac->hw_stats = devm_kzalloc(eth->dev,
60 sizeof(*mac->hw_stats),
61 @@ -1762,6 +1759,7 @@ static int mtk_probe(struct platform_dev
62
63 eth->dev = &pdev->dev;
64 eth->msg_enable = netif_msg_init(mtk_msg_level, MTK_DEFAULT_MSG_ENABLE);
65 + INIT_WORK(&eth->pending_work, mtk_pending_work);
66
67 err = mtk_hw_init(eth);
68 if (err)
69 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
70 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
71 @@ -363,6 +363,7 @@ struct mtk_rx_ring {
72 * @clk_gp1: The gmac1 clock
73 * @clk_gp2: The gmac2 clock
74 * @mii_bus: If there is a bus we need to create an instance for it
75 + * @pending_work: The workqueue used to reset the dma ring
76 */
77
78 struct mtk_eth {
79 @@ -389,6 +390,7 @@ struct mtk_eth {
80 struct clk *clk_gp1;
81 struct clk *clk_gp2;
82 struct mii_bus *mii_bus;
83 + struct work_struct pending_work;
84 };
85
86 /* struct mtk_mac - the structure that holds the info about the MACs of the
87 @@ -398,7 +400,6 @@ struct mtk_eth {
88 * @hw: Backpointer to our main datastruture
89 * @hw_stats: Packet statistics counter
90 * @phy_dev: The attached PHY if available
91 - * @pending_work: The workqueue used to reset the dma ring
92 */
93 struct mtk_mac {
94 int id;
95 @@ -406,7 +407,6 @@ struct mtk_mac {
96 struct mtk_eth *hw;
97 struct mtk_hw_stats *hw_stats;
98 struct phy_device *phy_dev;
99 - struct work_struct pending_work;
100 };
101
102 /* the struct describing the SoC. these are declared in the soc_xyz.c files */