The function my_device_changestate was not sending a response if there
was an error with the CONTROLVM message.

Signed-off-by: David Kershner <david.kersh...@unisys.com>
Reported-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>
Reviewed-by: Tim Sell <timothy.s...@unisys.com>
---
 drivers/staging/unisys/visorbus/visorchipset.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/unisys/visorbus/visorchipset.c 
b/drivers/staging/unisys/visorbus/visorchipset.c
index d107121..f8dca04 100644
--- a/drivers/staging/unisys/visorbus/visorchipset.c
+++ b/drivers/staging/unisys/visorbus/visorchipset.c
@@ -1046,15 +1046,22 @@ enum crash_obj_type {
                POSTCODE_LINUX_4(DEVICE_CHANGESTATE_FAILURE_PC, dev_no, bus_no,
                                 POSTCODE_SEVERITY_ERR);
                rc = -CONTROLVM_RESP_ERROR_DEVICE_INVALID;
-       } else if (dev_info->state.created == 0) {
+               goto err_respond;
+       }
+       if (dev_info->state.created == 0) {
                POSTCODE_LINUX_4(DEVICE_CHANGESTATE_FAILURE_PC, dev_no, bus_no,
                                 POSTCODE_SEVERITY_ERR);
                rc = -CONTROLVM_RESP_ERROR_DEVICE_INVALID;
+               goto err_respond;
        }
-       if ((rc >= CONTROLVM_RESP_SUCCESS) && dev_info)
-               device_epilog(dev_info, state,
-                             CONTROLVM_DEVICE_CHANGESTATE, &inmsg->hdr, rc,
-                             inmsg->hdr.flags.response_expected == 1, 1);
+
+       device_epilog(dev_info, state,
+                     CONTROLVM_DEVICE_CHANGESTATE, &inmsg->hdr, rc,
+                     inmsg->hdr.flags.response_expected == 1, 1);
+       return;
+
+err_respond:
+       device_responder(inmsg->hdr.id, &inmsg->hdr, rc);
 }
 
 static void
-- 
1.9.1

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to