[...] > > @@ -1852,12 +1863,17 @@ static int rtl8169_set_wol(struct net_device > *dev, struct ethtool_wolinfo *wol) > > tp->features |= RTL_FEATURE_WOL; > > else > > tp->features &= ~RTL_FEATURE_WOL; > > - __rtl8169_set_wol(tp, wol->wolopts); > > + if (pm_runtime_active(&pdev->dev)) > > + __rtl8169_set_wol(tp, wol->wolopts); > > + else > > + tp->saved_wolopts = wol->wolopts; > > > > rtl_unlock_work(tp); > > > > device_set_wakeup_enable(&tp->pci_dev->dev, wol->wolopts); > > > > + pm_runtime_put_noidle(&pdev->dev); > > + > > return 0; > > Either the driver resumes the device so that it can perform requested > operation or it signals .set_wol failure when the device is suspended. > > If the driver does something else, "spam removal" translates to "silent > failure".
Because "tp->saved_wolopts" will be used to set hardware wol capability in rtl8169_runtime_resume(). So I prefer to keep "wol->wolopts" to " tp->saved_wolopts " in runtime suspend state and set this to this "wol->wolopts" to hardware in in rtl8169_runtime_resume(). Thanks. ------Please consider the environment before printing this e-mail.