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

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
Loading
Loading
Loading
Loading
+4 −17
Original line number Diff line number Diff line
@@ -50,21 +50,6 @@ static int pseries_suspend_begin(u64 stream_id)
	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
 *
@@ -127,8 +112,11 @@ static ssize_t store_hibernate(struct device *dev,
	if (!rc)
		rc = pm_suspend(PM_SUSPEND_MEM);

	if (!rc)
	if (!rc) {
		rc = count;
		post_mobility_fixup();
	}


	return rc;
}
@@ -214,7 +202,6 @@ static int __init pseries_suspend_init(void)
	if ((rc = pseries_suspend_sysfs_register(&suspend_dev)))
		return rc;

	ppc_md.suspend_enable_irqs = pseries_suspend_enable_irqs;
	suspend_set_ops(&pseries_suspend_ops);
	return 0;
}