return error;
 }
 
+static void dpm_propagate_to_parent(struct device *dev)
+{
+       struct device *parent = dev->parent;
+
+       if (!parent)
+               return;
+
+       spin_lock_irq(&parent->power.lock);
+
+       parent->power.direct_complete = false;
+       if (dev->power.wakeup_path && !parent->power.ignore_children)
+               parent->power.wakeup_path = true;
+
+       spin_unlock_irq(&parent->power.lock);
+}
+
 static void dpm_clear_suppliers_direct_complete(struct device *dev)
 {
        struct device_link *link;
 
  End:
        if (!error) {
-               struct device *parent = dev->parent;
-
                dev->power.is_suspended = true;
-               if (parent) {
-                       spin_lock_irq(&parent->power.lock);
-
-                       dev->parent->power.direct_complete = false;
-                       if (dev->power.wakeup_path
-                           && !dev->parent->power.ignore_children)
-                               dev->parent->power.wakeup_path = true;
-
-                       spin_unlock_irq(&parent->power.lock);
-               }
+               dpm_propagate_to_parent(dev);
                dpm_clear_suppliers_direct_complete(dev);
        }