Commit fa53bcdb authored by Nathan Lynch's avatar Nathan Lynch Committed by Michael Ellerman

powerpc/pseries/hibernation: perform post-suspend fixups later

The pseries hibernate code calls post_mobility_fixup() which is sort
of a dumping ground of fixups that need to run after resuming from
suspend regardless of whether suspend was a hibernation or a
migration. Calling post_mobility_fixup() from
pseries_suspend_enable_irqs() runs this code early in resume with
devices suspended and only one CPU up, while the much more commonly
used migration case runs these fixups in a more typical process
context.

Call post_mobility_fixup() after the suspend core returns a success
status to the hibernate sysfs store method and remove
pseries_suspend_enable_irqs().
Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20201207215200.1785968-26-nathanl@linux.ibm.com
parent b8664594
...@@ -50,21 +50,6 @@ static int pseries_suspend_begin(u64 stream_id) ...@@ -50,21 +50,6 @@ static int pseries_suspend_begin(u64 stream_id)
return 0; return 0;
} }
/**
* pseries_suspend_enable_irqs
*
* Post suspend configuration updates
*
**/
static void pseries_suspend_enable_irqs(void)
{
/*
* Update configuration which can be modified based on device tree
* changes during resume.
*/
post_mobility_fixup();
}
/** /**
* pseries_suspend_enter - Final phase of hibernation * pseries_suspend_enter - Final phase of hibernation
* *
...@@ -127,8 +112,11 @@ static ssize_t store_hibernate(struct device *dev, ...@@ -127,8 +112,11 @@ static ssize_t store_hibernate(struct device *dev,
if (!rc) if (!rc)
rc = pm_suspend(PM_SUSPEND_MEM); rc = pm_suspend(PM_SUSPEND_MEM);
if (!rc) if (!rc) {
rc = count; rc = count;
post_mobility_fixup();
}
return rc; return rc;
} }
...@@ -214,7 +202,6 @@ static int __init pseries_suspend_init(void) ...@@ -214,7 +202,6 @@ static int __init pseries_suspend_init(void)
if ((rc = pseries_suspend_sysfs_register(&suspend_dev))) if ((rc = pseries_suspend_sysfs_register(&suspend_dev)))
return rc; return rc;
ppc_md.suspend_enable_irqs = pseries_suspend_enable_irqs;
suspend_set_ops(&pseries_suspend_ops); suspend_set_ops(&pseries_suspend_ops);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment