提交 9beb4896 编写于 作者: T Tejun Heo

iseries_veth: don't use flush_scheduled_work()

flush_scheduled_work() is on its way out.  Remove its usage from
iseries_veth.

* Cancelling a delayed work, queueing it for immediate execution if
  cancelled and then waiting for completion can be done by simply
  calling flush_delayed_work_sync().

* Explicitly cancel cnx->statemachine_wq on module unload.
Signed-off-by: NTejun Heo <tj@kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Santiago Leon <santil@linux.vnet.ibm.com>
Cc: netdev@vger.kernel.org
上级 f5c35cc1
...@@ -885,17 +885,8 @@ static void veth_stop_connection(struct veth_lpar_connection *cnx) ...@@ -885,17 +885,8 @@ static void veth_stop_connection(struct veth_lpar_connection *cnx)
veth_kick_statemachine(cnx); veth_kick_statemachine(cnx);
spin_unlock_irq(&cnx->lock); spin_unlock_irq(&cnx->lock);
/* There's a slim chance the reset code has just queued the /* ensure the statemachine runs now and waits for its completion */
* statemachine to run in five seconds. If so we need to cancel flush_delayed_work_sync(&cnx->statemachine_wq);
* that and requeue the work to run now. */
if (cancel_delayed_work(&cnx->statemachine_wq)) {
spin_lock_irq(&cnx->lock);
veth_kick_statemachine(cnx);
spin_unlock_irq(&cnx->lock);
}
/* Wait for the state machine to run. */
flush_scheduled_work();
} }
static void veth_destroy_connection(struct veth_lpar_connection *cnx) static void veth_destroy_connection(struct veth_lpar_connection *cnx)
...@@ -1653,15 +1644,14 @@ static void __exit veth_module_cleanup(void) ...@@ -1653,15 +1644,14 @@ static void __exit veth_module_cleanup(void)
/* Disconnect our "irq" to stop events coming from the Hypervisor. */ /* Disconnect our "irq" to stop events coming from the Hypervisor. */
HvLpEvent_unregisterHandler(HvLpEvent_Type_VirtualLan); HvLpEvent_unregisterHandler(HvLpEvent_Type_VirtualLan);
/* Make sure any work queued from Hypervisor callbacks is finished. */
flush_scheduled_work();
for (i = 0; i < HVMAXARCHITECTEDLPS; ++i) { for (i = 0; i < HVMAXARCHITECTEDLPS; ++i) {
cnx = veth_cnx[i]; cnx = veth_cnx[i];
if (!cnx) if (!cnx)
continue; continue;
/* Cancel work queued from Hypervisor callbacks */
cancel_delayed_work_sync(&cnx->statemachine_wq);
/* Remove the connection from sysfs */ /* Remove the connection from sysfs */
kobject_del(&cnx->kobject); kobject_del(&cnx->kobject);
/* Drop the driver's reference to the connection */ /* Drop the driver's reference to the connection */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册