/* s2io_restart_nic - Resets the NIC. @data : long pointer to the device private structure Description: This function is scheduled to be run by the s2io_tx_watchdog function after 0.5 secs to reset the NIC. The idea is to reduce the run time of the watch dog routine which is run holding a spin lock.  */
static void s2io_restart_nic(struct work_struct *work)
/* s2io_restart_nic - Resets the NIC. @data : long pointer to the device private structure Description: This function is scheduled to be run by the s2io_tx_watchdog function after 0.5 secs to reset the NIC. The idea is to reduce the run time of the watch dog routine which is run holding a spin lock.  */
static void s2io_restart_nic(struct work_struct *work)
{
	struct s2io_nic *sp = container_of(work, struct s2io_nic, rst_timer_task);
	struct net_device *dev = sp->dev;
	rtnl_lock();
	if (!netif_running(dev))
		goto out_unlock;
	s2io_card_down(sp);
	if (s2io_card_up(sp)) {
		DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n", dev->name);
	}
	s2io_wake_all_tx_queue(sp);
	DBG_PRINT(ERR_DBG, "%s: was reset by Tx watchdog timer\n", dev->name);
out_unlock:
	rtnl_unlock();
}