aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaku Izumi <izumi.taku@jp.fujitsu.com>2015-08-21 04:29:33 -0400
committerDavid S. Miller <davem@davemloft.net>2015-08-24 17:06:36 -0400
commitff5b42103227c01c4082f27b06a43758efbf5ab8 (patch)
tree43c7ab05565e272e77914187c4537ac012abf2be
parent8edb62a8131ca5b5ecbb29e45d812d9583585afb (diff)
fjes: force_close_task
This patch adds force_close_task. This task is used to close network device forcibly. Signed-off-by: Taku Izumi <izumi.taku@jp.fujitsu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/fjes/fjes.h1
-rw-r--r--drivers/net/fjes/fjes_main.c13
2 files changed, 14 insertions, 0 deletions
diff --git a/drivers/net/fjes/fjes.h b/drivers/net/fjes/fjes.h
index 1743dbb83e5b..d31d4c3be45f 100644
--- a/drivers/net/fjes/fjes.h
+++ b/drivers/net/fjes/fjes.h
@@ -47,6 +47,7 @@ struct fjes_adapter {
47 unsigned long rx_last_jiffies; 47 unsigned long rx_last_jiffies;
48 bool unset_rx_last; 48 bool unset_rx_last;
49 49
50 struct work_struct force_close_task;
50 bool force_reset; 51 bool force_reset;
51 bool open_guard; 52 bool open_guard;
52 53
diff --git a/drivers/net/fjes/fjes_main.c b/drivers/net/fjes/fjes_main.c
index 5fce33dec820..caecfb39ecf9 100644
--- a/drivers/net/fjes/fjes_main.c
+++ b/drivers/net/fjes/fjes_main.c
@@ -54,6 +54,7 @@ static void fjes_free_resources(struct fjes_adapter *);
54static netdev_tx_t fjes_xmit_frame(struct sk_buff *, struct net_device *); 54static netdev_tx_t fjes_xmit_frame(struct sk_buff *, struct net_device *);
55static void fjes_raise_intr_rxdata_task(struct work_struct *); 55static void fjes_raise_intr_rxdata_task(struct work_struct *);
56static void fjes_tx_stall_task(struct work_struct *); 56static void fjes_tx_stall_task(struct work_struct *);
57static void fjes_force_close_task(struct work_struct *);
57static irqreturn_t fjes_intr(int, void*); 58static irqreturn_t fjes_intr(int, void*);
58static struct rtnl_link_stats64 * 59static struct rtnl_link_stats64 *
59fjes_get_stats64(struct net_device *, struct rtnl_link_stats64 *); 60fjes_get_stats64(struct net_device *, struct rtnl_link_stats64 *);
@@ -492,6 +493,17 @@ static void fjes_tx_stall_task(struct work_struct *work)
492 queue_work(adapter->txrx_wq, &adapter->tx_stall_task); 493 queue_work(adapter->txrx_wq, &adapter->tx_stall_task);
493} 494}
494 495
496static void fjes_force_close_task(struct work_struct *work)
497{
498 struct fjes_adapter *adapter = container_of(work,
499 struct fjes_adapter, force_close_task);
500 struct net_device *netdev = adapter->netdev;
501
502 rtnl_lock();
503 dev_close(netdev);
504 rtnl_unlock();
505}
506
495static void fjes_raise_intr_rxdata_task(struct work_struct *work) 507static void fjes_raise_intr_rxdata_task(struct work_struct *work)
496{ 508{
497 struct fjes_adapter *adapter = container_of(work, 509 struct fjes_adapter *adapter = container_of(work,
@@ -1003,6 +1015,7 @@ static int fjes_probe(struct platform_device *plat_dev)
1003 if (err) 1015 if (err)
1004 goto err_free_netdev; 1016 goto err_free_netdev;
1005 1017
1018 INIT_WORK(&adapter->force_close_task, fjes_force_close_task);
1006 adapter->force_reset = false; 1019 adapter->force_reset = false;
1007 adapter->open_guard = false; 1020 adapter->open_guard = false;
1008 1021