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: David Kershner <david.kershner@unisys.com> Reviewed-by: Tim Sell <Timothy.Sell@unisys.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
c4fe36cd26
commit
ca1cbf9070
|
@ -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,
|
||||||
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,
|
||||||
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,
|
||||||
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:
|
||||||
|
|
Loading…
Reference in New Issue