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

Commit cab5b8b9 authored by Nathan Lynch's avatar Nathan Lynch Committed by Greg Kroah-Hartman
Browse files

powerpc/pseries/dlpar: handle ibm, configure-connector delay status



[ Upstream commit 768d70e19ba525debd571b36e6d0ab19956c63d7 ]

dlpar_configure_connector() has two problems in its handling of
ibm,configure-connector's return status:

1. When the status is -2 (busy, call again), we call
   ibm,configure-connector again immediately without checking whether
   to schedule, which can result in monopolizing the CPU.
2. Extended delay status (9900..9905) goes completely unhandled,
   causing the configuration to unnecessarily terminate.

Fix both of these issues by using rtas_busy_delay().

Fixes: ab519a01 ("powerpc/pseries: Kernel DLPAR Infrastructure")
Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
Reviewed-by: default avatarTyrel Datwyler <tyreld@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210107025900.410369-1-nathanl@linux.ibm.com


Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent c4a0bb8b
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -132,7 +132,6 @@ void dlpar_free_cc_nodes(struct device_node *dn)
#define NEXT_PROPERTY   3
#define PREV_PARENT     4
#define MORE_MEMORY     5
#define CALL_AGAIN	-2
#define ERR_CFG_USE     -9003

struct device_node *dlpar_configure_connector(__be32 drc_index,
@@ -173,6 +172,9 @@ struct device_node *dlpar_configure_connector(__be32 drc_index,

		spin_unlock(&rtas_data_buf_lock);

		if (rtas_busy_delay(rc))
			continue;

		switch (rc) {
		case COMPLETE:
			break;
@@ -221,9 +223,6 @@ struct device_node *dlpar_configure_connector(__be32 drc_index,
			last_dn = last_dn->parent;
			break;

		case CALL_AGAIN:
			break;

		case MORE_MEMORY:
		case ERR_CFG_USE:
		default: