r8169: remove rtl8169_reinit_task.
I see no good reason to keep both rtl8169_reinit_task and rtl8169_reset_task: - rtl8169_reinit_task adds a software failure point which does relate to any hardware state - they handle hardware the same. Remember that rtl8169_reinit_task was introduced in the 8169 only era to handle PCI errors way before the 8168 asked for pll and firmware ops and compare : rtl8169_reinit_task | rtl8169_reset_task ----------------------------+-------------------------- rtl8169_wait_for_quiescence | rtl8169_hw_reset rtl8169_update_counters | rtl8169_wait_for_quiescence rtl8169_hw_reset | rtl_hw_start rtl8169_rx_missed | rtl8169_check_link_status rtl_pll_power_down | rtl_request_firmware | rtl8169_init_phy | rtl_pll_power_up | rtl_hw_start | rtl8169_check_link_status | Signed-off-by: Francois Romieu <romieu@fr.zoreil.com> Cc: Hayes Wang <hayeswang@realtek.com>
This commit is contained in:
parent
4512ff9f36
commit
209e5ac83b
|
@ -5353,34 +5353,6 @@ static void rtl8169_wait_for_quiescence(struct net_device *dev)
|
||||||
napi_enable(&tp->napi);
|
napi_enable(&tp->napi);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl8169_reinit_task(struct work_struct *work)
|
|
||||||
{
|
|
||||||
struct rtl8169_private *tp =
|
|
||||||
container_of(work, struct rtl8169_private, task.work);
|
|
||||||
struct net_device *dev = tp->dev;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
rtnl_lock();
|
|
||||||
|
|
||||||
if (!netif_running(dev))
|
|
||||||
goto out_unlock;
|
|
||||||
|
|
||||||
rtl8169_wait_for_quiescence(dev);
|
|
||||||
rtl8169_close(dev);
|
|
||||||
|
|
||||||
ret = rtl8169_open(dev);
|
|
||||||
if (unlikely(ret < 0)) {
|
|
||||||
if (net_ratelimit())
|
|
||||||
netif_err(tp, drv, dev,
|
|
||||||
"reinit failure (status = %d). Rescheduling\n",
|
|
||||||
ret);
|
|
||||||
rtl8169_schedule_work(dev, rtl8169_reinit_task);
|
|
||||||
}
|
|
||||||
|
|
||||||
out_unlock:
|
|
||||||
rtnl_unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rtl8169_reset_task(struct work_struct *work)
|
static void rtl8169_reset_task(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct rtl8169_private *tp =
|
struct rtl8169_private *tp =
|
||||||
|
@ -5616,7 +5588,7 @@ static void rtl8169_pcierr_interrupt(struct net_device *dev)
|
||||||
|
|
||||||
rtl8169_hw_reset(tp);
|
rtl8169_hw_reset(tp);
|
||||||
|
|
||||||
rtl8169_schedule_work(dev, rtl8169_reinit_task);
|
rtl8169_schedule_work(dev, rtl8169_reset_task);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl8169_tx_interrupt(struct net_device *dev,
|
static void rtl8169_tx_interrupt(struct net_device *dev,
|
||||||
|
@ -5923,8 +5895,8 @@ static void rtl8169_down(struct net_device *dev)
|
||||||
rtl8169_hw_reset(tp);
|
rtl8169_hw_reset(tp);
|
||||||
/*
|
/*
|
||||||
* At this point device interrupts can not be enabled in any function,
|
* At this point device interrupts can not be enabled in any function,
|
||||||
* as netif_running is not true (rtl8169_interrupt, rtl8169_reset_task,
|
* as netif_running is not true (rtl8169_interrupt, rtl8169_reset_task)
|
||||||
* rtl8169_reinit_task) and napi is disabled (rtl8169_poll).
|
* and napi is disabled (rtl8169_poll).
|
||||||
*/
|
*/
|
||||||
rtl8169_rx_missed(dev, ioaddr);
|
rtl8169_rx_missed(dev, ioaddr);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue