From: Jesse Larrew <jlar...@linux.vnet.ibm.com> When rtasd receives a PRRN event, it needs to make a series of RTAS calls (ibm,update-nodes and ibm,update-properties) to retrieve the updated device tree information. These calls are already handled in the pseries_devtree_update() routine used in partition migration.
This patch simply exposes pseries_devicetree_update() so it can be called by rtasd. pseries_devicetree_update() and supporting functions are also modified to take a 32-bit 'scope' parameter. This parameter is required by the ibm,update-nodes/ibm,update-properties RTAS calls, and the appropriate value is contained within the RTAS event for PRRN notifications. In pseries_devicetree_update() it was previously hard-coded to 1, the scope value for partition migration. Signed-off-by: Nathan Fontenot <nf...@linux.vnet.ibm.com> --- arch/powerpc/include/asm/rtas.h | 1 + arch/powerpc/platforms/pseries/mobility.c | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) Index: powerpc/arch/powerpc/include/asm/rtas.h =================================================================== --- powerpc.orig/arch/powerpc/include/asm/rtas.h 2013-03-08 19:23:06.000000000 -0600 +++ powerpc/arch/powerpc/include/asm/rtas.h 2013-03-08 19:56:13.000000000 -0600 @@ -276,6 +276,7 @@ const char *uname, int depth, void *data); extern void pSeries_log_error(char *buf, unsigned int err_type, int fatal); +extern int pseries_devicetree_update(s32 scope); #ifdef CONFIG_PPC_RTAS_DAEMON extern void rtas_cancel_event_scan(void); Index: powerpc/arch/powerpc/platforms/pseries/mobility.c =================================================================== --- powerpc.orig/arch/powerpc/platforms/pseries/mobility.c 2013-03-08 19:23:07.000000000 -0600 +++ powerpc/arch/powerpc/platforms/pseries/mobility.c 2013-03-08 19:56:13.000000000 -0600 @@ -37,14 +37,16 @@ #define UPDATE_DT_NODE 0x02000000 #define ADD_DT_NODE 0x03000000 -static int mobility_rtas_call(int token, char *buf) +#define MIGRATION_SCOPE (1) + +static int mobility_rtas_call(int token, char *buf, s32 scope) { int rc; spin_lock(&rtas_data_buf_lock); memcpy(rtas_data_buf, buf, RTAS_DATA_BUF_SIZE); - rc = rtas_call(token, 2, 1, NULL, rtas_data_buf, 1); + rc = rtas_call(token, 2, 1, NULL, rtas_data_buf, scope); memcpy(buf, rtas_data_buf, RTAS_DATA_BUF_SIZE); spin_unlock(&rtas_data_buf_lock); @@ -123,7 +125,7 @@ return 0; } -static int update_dt_node(u32 phandle) +static int update_dt_node(u32 phandle, s32 scope) { struct update_props_workarea *upwa; struct device_node *dn; @@ -151,7 +153,8 @@ upwa->phandle = phandle; do { - rc = mobility_rtas_call(update_properties_token, rtas_buf); + rc = mobility_rtas_call(update_properties_token, rtas_buf, + scope); if (rc < 0) break; @@ -219,7 +222,7 @@ return rc; } -static int pseries_devicetree_update(void) +int pseries_devicetree_update(s32 scope) { char *rtas_buf; u32 *data; @@ -235,7 +238,7 @@ return -ENOMEM; do { - rc = mobility_rtas_call(update_nodes_token, rtas_buf); + rc = mobility_rtas_call(update_nodes_token, rtas_buf, scope); if (rc && rc != 1) break; @@ -256,7 +259,7 @@ delete_dt_node(phandle); break; case UPDATE_DT_NODE: - update_dt_node(phandle); + update_dt_node(phandle, scope); break; case ADD_DT_NODE: drc_index = *data++; @@ -276,7 +279,7 @@ int rc; int activate_fw_token; - rc = pseries_devicetree_update(); + rc = pseries_devicetree_update(MIGRATION_SCOPE); if (rc) { printk(KERN_ERR "Initial post-mobility device tree update " "failed: %d\n", rc); @@ -292,7 +295,7 @@ rc = rtas_call(activate_fw_token, 0, 1, NULL); if (!rc) { - rc = pseries_devicetree_update(); + rc = pseries_devicetree_update(MIGRATION_SCOPE); if (rc) printk(KERN_ERR "Secondary post-mobility device tree " "update failed: %d\n", rc); _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev