[PATCH 04/15] staging: unisys: visorbus: fix double response

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
Reviewed-by: Tim Sell <Timothy.Sell@xxxxxxxxxx>
---
 drivers/staging/unisys/visorbus/visorchipset.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

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 @@ enum crash_obj_type {
 	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 @@ enum crash_obj_type {
 	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 @@ enum crash_obj_type {
 			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 @@ enum crash_obj_type {
 				 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:
-- 
1.9.1

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



[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux