File librtas1.bug-985643_open_RTAS_error_facility.patch of Package librtas1
@@ -, +, @@
---
librtas_src/syscall_calls.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
Index: librtas-1.4.1/librtas_src/syscall_calls.c
===================================================================
--- librtas-1.4.1.orig/librtas_src/syscall_calls.c
+++ librtas-1.4.1/librtas_src/syscall_calls.c
@@ -466,15 +466,20 @@ int rtas_errinjct_close(int otoken)
*/
int rtas_errinjct_open(int *otoken)
{
- __be32 be_otoken;
+ __be32 be_status;
int rc, status;
rc = sanity_check();
if (rc)
return rc;
- rc = rtas_call("ibm,open-errinjct", 0, 2, &be_otoken, &status);
- *otoken = be32toh(be_otoken);
+ /*
+ * Unlike other RTAS calls, here first output parameter is otoken,
+ * not status. rtas_call converts otoken to host endianess. We
+ * have to convert status parameter.
+ */
+ rc = rtas_call("ibm,open-errinjct", 0, 2, otoken, &be_status);
+ status = be32toh(be_status);
dbg("(%p) = %d, %d\n", otoken, rc ? rc : status, *otoken);
return rc ? rc : status;