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;
openSUSE Build Service is sponsored by