Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 39a33b59 authored by Haren Myneni's avatar Haren Myneni Committed by Benjamin Herrenschmidt
Browse files

powerpc/pseries: Device tree should only be updated once after suspend/migrate



The current code makes rtas calls for update-nodes, activate-firmware and then
update-nodes again. The FW provides the same data for both update-nodes calls.
As a result a proc entry exists error is reported for the second update while
adding device nodes.

This patch makes a single rtas call for update-nodes after activating the FW.
It also add rtas_busy delay for the activate-firmware rtas call.

Signed-off-by: default avatarHaren Myneni <hbabu@us.ibm.com>
Signed-off-by: default avatarTyrel Datwyler <tyreld@linux.vnet.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 639291f2
Loading
Loading
Loading
Loading
+10 −16
Original line number Diff line number Diff line
@@ -290,13 +290,6 @@ void post_mobility_fixup(void)
	int rc;
	int activate_fw_token;

	rc = pseries_devicetree_update(MIGRATION_SCOPE);
	if (rc) {
		printk(KERN_ERR "Initial post-mobility device tree update "
		       "failed: %d\n", rc);
		return;
	}

	activate_fw_token = rtas_token("ibm,activate-firmware");
	if (activate_fw_token == RTAS_UNKNOWN_SERVICE) {
		printk(KERN_ERR "Could not make post-mobility "
@@ -304,16 +297,17 @@ void post_mobility_fixup(void)
		return;
	}

	do {
		rc = rtas_call(activate_fw_token, 0, 1, NULL);
	if (!rc) {
		rc = pseries_devicetree_update(MIGRATION_SCOPE);
	} while (rtas_busy_delay(rc));

	if (rc)
			printk(KERN_ERR "Secondary post-mobility device tree "
			       "update failed: %d\n", rc);
	} else {
		printk(KERN_ERR "Post-mobility activate-fw failed: %d\n", rc);
		return;
	}

	rc = pseries_devicetree_update(MIGRATION_SCOPE);
	if (rc)
		printk(KERN_ERR "Post-mobility device tree update "
			"failed: %d\n", rc);

	return;
}