Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -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: