A NULL pending_msg_hdr is not an error, it just means that the firmware
does not want an error response for that message.

Signed-off-by: David Kershner <david.kersh...@unisys.com>
Reviewed-by: Tim Sell <timothy.s...@unisys.com>
---
 drivers/staging/unisys/visorbus/visorbus_main.c |  3 ++-
 drivers/staging/unisys/visorbus/visorchipset.c  | 13 ++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/unisys/visorbus/visorbus_main.c 
b/drivers/staging/unisys/visorbus/visorbus_main.c
index 7bfccc8..b35b8a6 100644
--- a/drivers/staging/unisys/visorbus/visorbus_main.c
+++ b/drivers/staging/unisys/visorbus/visorbus_main.c
@@ -690,8 +690,9 @@ void remove_visor_device(struct visor_device *dev)
 {
        list_del(&dev->list_all);
        put_device(&dev->device);
+       if (dev->pending_msg_hdr)
+               visorbus_response(dev, 0, CONTROLVM_DEVICE_DESTROY);
        device_unregister(&dev->device);
-       visorbus_response(dev, 0, CONTROLVM_DEVICE_DESTROY);
 }
 
 static int get_vbus_header_info(struct visorchannel *chan,
diff --git a/drivers/staging/unisys/visorbus/visorchipset.c 
b/drivers/staging/unisys/visorbus/visorchipset.c
index 14bc219..df7429d 100644
--- a/drivers/staging/unisys/visorbus/visorchipset.c
+++ b/drivers/staging/unisys/visorbus/visorchipset.c
@@ -481,9 +481,6 @@ static int controlvm_responder(enum controlvm_id cmd_id,
                               struct controlvm_message_header *pending_msg_hdr,
                               int response)
 {
-       if (!pending_msg_hdr)
-               return -EIO;
-
        if (pending_msg_hdr->id != (u32)cmd_id)
                return -EINVAL;
 
@@ -497,8 +494,6 @@ static int device_changestate_responder(
 {
        struct controlvm_message outmsg;
 
-       if (!p->pending_msg_hdr)
-               return -EIO;
        if (p->pending_msg_hdr->id != cmd_id)
                return -EINVAL;
 
@@ -1391,8 +1386,10 @@ static void setup_crash_devices_work_queue(struct 
work_struct *work)
 void visorbus_response(struct visor_device *bus_info, int response,
                       int controlvm_id)
 {
-       controlvm_responder(controlvm_id, bus_info->pending_msg_hdr, response);
+       if (!bus_info->pending_msg_hdr)
+               return;
 
+       controlvm_responder(controlvm_id, bus_info->pending_msg_hdr, response);
        kfree(bus_info->pending_msg_hdr);
        bus_info->pending_msg_hdr = NULL;
 }
@@ -1401,9 +1398,11 @@ void visorbus_device_changestate_response(struct 
visor_device *dev_info,
                                          int response,
                                          struct visor_segment_state state)
 {
+       if (!dev_info->pending_msg_hdr)
+               return;
+
        device_changestate_responder(CONTROLVM_DEVICE_CHANGESTATE, dev_info,
                                     response, state);
-
        kfree(dev_info->pending_msg_hdr);
        dev_info->pending_msg_hdr = NULL;
 }
-- 
1.9.1

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

Reply via email to