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

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: ab519a011c ("powerpc/pseries: Kernel DLPAR Infrastructure")
Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com>
Reviewed-by: Tyrel Datwyler <tyreld@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210107025900.410369-1-nathanl@linux.ibm.com
This commit is contained in:
Nathan Lynch 2021-01-06 20:59:00 -06:00 коммит произвёл Michael Ellerman
Родитель 3cb1aa7aa3
Коммит 768d70e19b
1 изменённых файлов: 3 добавлений и 4 удалений

Просмотреть файл

@ -127,7 +127,6 @@ void dlpar_free_cc_nodes(struct device_node *dn)
#define NEXT_PROPERTY 3 #define NEXT_PROPERTY 3
#define PREV_PARENT 4 #define PREV_PARENT 4
#define MORE_MEMORY 5 #define MORE_MEMORY 5
#define CALL_AGAIN -2
#define ERR_CFG_USE -9003 #define ERR_CFG_USE -9003
struct device_node *dlpar_configure_connector(__be32 drc_index, struct device_node *dlpar_configure_connector(__be32 drc_index,
@ -168,6 +167,9 @@ struct device_node *dlpar_configure_connector(__be32 drc_index,
spin_unlock(&rtas_data_buf_lock); spin_unlock(&rtas_data_buf_lock);
if (rtas_busy_delay(rc))
continue;
switch (rc) { switch (rc) {
case COMPLETE: case COMPLETE:
break; break;
@ -216,9 +218,6 @@ struct device_node *dlpar_configure_connector(__be32 drc_index,
last_dn = last_dn->parent; last_dn = last_dn->parent;
break; break;
case CALL_AGAIN:
break;
case MORE_MEMORY: case MORE_MEMORY:
case ERR_CFG_USE: case ERR_CFG_USE:
default: default: