Commit ca1cbf90 authored by David Kershner's avatar David Kershner Committed by Greg Kroah-Hartman

staging: unisys: visorbus: fix double response

This patch addresses the problem that we were sending double responses
back to the s-Par Firmware when processing CONTROLVM Messages. Every
message responds individually and the epilog functions would send a
response as well.

Since a message could delay the response, it was decided to remove the
extra response from the epilog function.
Signed-off-by: default avatarDavid Kershner <david.kershner@unisys.com>
Reviewed-by: default avatarTim Sell <Timothy.Sell@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c4fe36cd
...@@ -728,12 +728,17 @@ bus_epilog(struct visor_device *bus_info, ...@@ -728,12 +728,17 @@ bus_epilog(struct visor_device *bus_info,
if (response == CONTROLVM_RESP_SUCCESS) { if (response == CONTROLVM_RESP_SUCCESS) {
switch (cmd) { switch (cmd) {
case CONTROLVM_BUS_CREATE: case CONTROLVM_BUS_CREATE:
/* chipset_bus_create is responsible to respond */
chipset_bus_create(bus_info); chipset_bus_create(bus_info);
break; break;
case CONTROLVM_BUS_DESTROY: case CONTROLVM_BUS_DESTROY:
/* chipset_bus_destroy is responsible to respond */
chipset_bus_destroy(bus_info); chipset_bus_destroy(bus_info);
break; break;
default:
goto out_respond;
} }
return;
} }
out_respond: out_respond:
...@@ -779,6 +784,7 @@ device_epilog(struct visor_device *dev_info, ...@@ -779,6 +784,7 @@ device_epilog(struct visor_device *dev_info,
if (response >= 0) { if (response >= 0) {
switch (cmd) { switch (cmd) {
case CONTROLVM_DEVICE_CREATE: case CONTROLVM_DEVICE_CREATE:
/* chipset_device_create is responsible to respond */
chipset_device_create(dev_info); chipset_device_create(dev_info);
break; break;
case CONTROLVM_DEVICE_CHANGESTATE: case CONTROLVM_DEVICE_CHANGESTATE:
...@@ -786,6 +792,7 @@ device_epilog(struct visor_device *dev_info, ...@@ -786,6 +792,7 @@ device_epilog(struct visor_device *dev_info,
if (state.alive == segment_state_running.alive && if (state.alive == segment_state_running.alive &&
state.operating == state.operating ==
segment_state_running.operating) { segment_state_running.operating) {
/* chipset_device_resume will respond */
chipset_device_resume(dev_info); chipset_device_resume(dev_info);
} }
/* ServerNotReady / ServerLost / SegmentStateStandby */ /* ServerNotReady / ServerLost / SegmentStateStandby */
...@@ -794,15 +801,20 @@ device_epilog(struct visor_device *dev_info, ...@@ -794,15 +801,20 @@ device_epilog(struct visor_device *dev_info,
segment_state_standby.operating) { segment_state_standby.operating) {
/* /*
* technically this is standby case * technically this is standby case
* where server is lost * where server is lost and
* chipset_device_pause will respond
*/ */
chipset_device_pause(dev_info); chipset_device_pause(dev_info);
} }
break; break;
case CONTROLVM_DEVICE_DESTROY: case CONTROLVM_DEVICE_DESTROY:
/* chipset_device_destroy is responsible to respond */
chipset_device_destroy(dev_info); chipset_device_destroy(dev_info);
break; break;
default:
goto out_respond;
} }
return;
} }
out_respond: out_respond:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment