Re: [PATCH v2 1/3] powerpc/pseries: Device tree should only be updated once after suspend/migrate

2014-01-28 Thread Nathan Fontenot
On 01/22/2014 01:58 PM, Tyrel Datwyler wrote:
 From: Haren Myneni hb...@us.ibm.com
 
 From: Haren Myneni hb...@us.ibm.com
 
 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: Haren Myneni hb...@us.ibm.com
 Signed-off-by: Tyrel Datwyler tyr...@linux.vnet.ibm.com

Acked-by: Nathan fontenot nf...@linux.vnet.ibm.com

 ---
  arch/powerpc/platforms/pseries/mobility.c | 26 ++
  1 file changed, 10 insertions(+), 16 deletions(-)
 
 diff --git a/arch/powerpc/platforms/pseries/mobility.c 
 b/arch/powerpc/platforms/pseries/mobility.c
 index cde4e0a..bde7eba 100644
 --- a/arch/powerpc/platforms/pseries/mobility.c
 +++ b/arch/powerpc/platforms/pseries/mobility.c
 @@ -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;
   }
 
 - rc = rtas_call(activate_fw_token, 0, 1, NULL);
 - if (!rc) {
 - rc = pseries_devicetree_update(MIGRATION_SCOPE);
 - if (rc)
 - printk(KERN_ERR Secondary post-mobility device tree 
 -update failed: %d\n, rc);
 - } else {
 + do {
 + rc = rtas_call(activate_fw_token, 0, 1, NULL);
 + } while (rtas_busy_delay(rc));
 +
 + if (rc)
   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;
  }
 

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH v2 1/3] powerpc/pseries: Device tree should only be updated once after suspend/migrate

2014-01-22 Thread Tyrel Datwyler
From: Haren Myneni hb...@us.ibm.com

From: Haren Myneni hb...@us.ibm.com

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: Haren Myneni hb...@us.ibm.com
Signed-off-by: Tyrel Datwyler tyr...@linux.vnet.ibm.com
---
 arch/powerpc/platforms/pseries/mobility.c | 26 ++
 1 file changed, 10 insertions(+), 16 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/mobility.c 
b/arch/powerpc/platforms/pseries/mobility.c
index cde4e0a..bde7eba 100644
--- a/arch/powerpc/platforms/pseries/mobility.c
+++ b/arch/powerpc/platforms/pseries/mobility.c
@@ -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;
}
 
-   rc = rtas_call(activate_fw_token, 0, 1, NULL);
-   if (!rc) {
-   rc = pseries_devicetree_update(MIGRATION_SCOPE);
-   if (rc)
-   printk(KERN_ERR Secondary post-mobility device tree 
-  update failed: %d\n, rc);
-   } else {
+   do {
+   rc = rtas_call(activate_fw_token, 0, 1, NULL);
+   } while (rtas_busy_delay(rc));
+
+   if (rc)
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;
 }
-- 
1.7.12.4

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev