#include <linux/rtnetlink.h>
 #include <linux/sched/signal.h>
 #include <linux/net.h>
+#include <linux/pm_runtime.h>
 #include <net/devlink.h>
 #include <net/xdp_sock_drv.h>
 #include <net/flow_offload.h>
        int rc;
        netdev_features_t old_features;
 
-       if (!dev || !netif_device_present(dev))
+       if (!dev)
                return -ENODEV;
 
        if (copy_from_user(ðcmd, useraddr, sizeof(ethcmd)))
                        return -EPERM;
        }
 
+       if (dev->dev.parent)
+               pm_runtime_get_sync(dev->dev.parent);
+
+       if (!netif_device_present(dev)) {
+               rc = -ENODEV;
+               goto out;
+       }
+
        if (dev->ethtool_ops->begin) {
                rc = dev->ethtool_ops->begin(dev);
-               if (rc  < 0)
-                       return rc;
+               if (rc < 0)
+                       goto out;
        }
        old_features = dev->features;
 
 
        if (old_features != dev->features)
                netdev_features_change(dev);
+out:
+       if (dev->dev.parent)
+               pm_runtime_put(dev->dev.parent);
 
        return rc;
 }