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

staging: unisys: visorbus: save_crash_message add error handling



Add proper error handling to the function save_crash_message.

Signed-off-by: default avatarDavid Kershner <david.kershner@unisys.com>
Reported-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2c4ef563
Loading
Loading
Loading
Loading
+28 −22
Original line number Diff line number Diff line
@@ -579,57 +579,63 @@ enum crash_obj_type {
	CRASH_BUS,
};

static void
static int
save_crash_message(struct controlvm_message *msg, enum crash_obj_type typ)
{
	u32 local_crash_msg_offset;
	u16 local_crash_msg_count;
	int err;

	if (visorchannel_read(controlvm_channel,
	err = visorchannel_read(controlvm_channel,
				offsetof(struct spar_controlvm_channel_protocol,
					 saved_crash_message_count),
			      &local_crash_msg_count, sizeof(u16)) < 0) {
				&local_crash_msg_count, sizeof(u16));
	if (err) {
		POSTCODE_LINUX_2(CRASH_DEV_CTRL_RD_FAILURE_PC,
				 POSTCODE_SEVERITY_ERR);
		return;
		return err;
	}

	if (local_crash_msg_count != CONTROLVM_CRASHMSG_MAX) {
		POSTCODE_LINUX_3(CRASH_DEV_COUNT_FAILURE_PC,
				 local_crash_msg_count,
				 POSTCODE_SEVERITY_ERR);
		return;
		return -EIO;
	}

	if (visorchannel_read(controlvm_channel,
	err = visorchannel_read(controlvm_channel,
				offsetof(struct spar_controlvm_channel_protocol,
					 saved_crash_message_offset),
			      &local_crash_msg_offset, sizeof(u32)) < 0) {
				&local_crash_msg_offset, sizeof(u32));
	if (err) {
		POSTCODE_LINUX_2(CRASH_DEV_CTRL_RD_FAILURE_PC,
				 POSTCODE_SEVERITY_ERR);
		return;
		return err;
	}

	if (typ == CRASH_BUS) {
		if (visorchannel_write(controlvm_channel,
		err = visorchannel_write(controlvm_channel,
					 local_crash_msg_offset,
					 msg,
				       sizeof(struct controlvm_message)) < 0) {
					sizeof(struct controlvm_message));
		if (err) {
			POSTCODE_LINUX_2(SAVE_MSG_BUS_FAILURE_PC,
					 POSTCODE_SEVERITY_ERR);
			return;
			return err;
		}
	} else {
		local_crash_msg_offset += sizeof(struct controlvm_message);
		if (visorchannel_write(controlvm_channel,
		err = visorchannel_write(controlvm_channel,
					 local_crash_msg_offset,
					 msg,
				       sizeof(struct controlvm_message)) < 0) {
					 sizeof(struct controlvm_message));
		if (err) {
			POSTCODE_LINUX_2(SAVE_MSG_DEV_FAILURE_PC,
					 POSTCODE_SEVERITY_ERR);
			return;
			return err;
		}
	}
	return 0;
}

static void