summaryrefslogtreecommitdiffstats
path: root/drivers/staging/unisys
diff options
context:
space:
mode:
authorDavid Kershner <david.kershner@unisys.com>2016-11-03 11:44:18 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-11-07 10:56:39 +0100
commitca1cbf907092e447be7c16df48458c02e5358308 (patch)
tree27f459406f1373a977b9db4114c91e50b1ab9487 /drivers/staging/unisys
parentc4fe36cd262d5fe710ff9ee43cb99337e8b050de (diff)
downloadop-kernel-dev-ca1cbf907092e447be7c16df48458c02e5358308.zip
op-kernel-dev-ca1cbf907092e447be7c16df48458c02e5358308.tar.gz
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>
Diffstat (limited to 'drivers/staging/unisys')
-rw-r--r--drivers/staging/unisys/visorbus/visorchipset.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/staging/unisys/visorbus/visorchipset.c b/drivers/staging/unisys/visorbus/visorchipset.c
index 0cd4ae2..7e2004f 100644
--- a/drivers/staging/unisys/visorbus/visorchipset.c
+++ b/drivers/staging/unisys/visorbus/visorchipset.c
@@ -728,12 +728,17 @@ bus_epilog(struct visor_device *bus_info,
if (response == CONTROLVM_RESP_SUCCESS) {
switch (cmd) {
case CONTROLVM_BUS_CREATE:
+ /* chipset_bus_create is responsible to respond */
chipset_bus_create(bus_info);
break;
case CONTROLVM_BUS_DESTROY:
+ /* chipset_bus_destroy is responsible to respond */
chipset_bus_destroy(bus_info);
break;
+ default:
+ goto out_respond;
}
+ return;
}
out_respond:
@@ -779,6 +784,7 @@ device_epilog(struct visor_device *dev_info,
if (response >= 0) {
switch (cmd) {
case CONTROLVM_DEVICE_CREATE:
+ /* chipset_device_create is responsible to respond */
chipset_device_create(dev_info);
break;
case CONTROLVM_DEVICE_CHANGESTATE:
@@ -786,6 +792,7 @@ device_epilog(struct visor_device *dev_info,
if (state.alive == segment_state_running.alive &&
state.operating ==
segment_state_running.operating) {
+ /* chipset_device_resume will respond */
chipset_device_resume(dev_info);
}
/* ServerNotReady / ServerLost / SegmentStateStandby */
@@ -794,15 +801,20 @@ device_epilog(struct visor_device *dev_info,
segment_state_standby.operating) {
/*
* technically this is standby case
- * where server is lost
+ * where server is lost and
+ * chipset_device_pause will respond
*/
chipset_device_pause(dev_info);
}
break;
case CONTROLVM_DEVICE_DESTROY:
+ /* chipset_device_destroy is responsible to respond */
chipset_device_destroy(dev_info);
break;
+ default:
+ goto out_respond;
}
+ return;
}
out_respond:
OpenPOWER on IntegriCloud