Working hypothesis: static int rtl8169_runtime_suspend(struct device *device) { struct rtl8169_private *tp = dev_get_drvdata(device); if (!tp->TxDescArray) { netif_device_detach(tp->dev); return 0; } This test is wrong. I'll make a test kernel that omits it.