Remove size field from MESSAGE return code.

The primary can read the message size from the SPCI header so doesn't
not need the value included in the return code.

Change-Id: I10ad11c502df9f39f45e12a81e00a99c4ebe1faf
diff --git a/driver/linux b/driver/linux
index 614ed7f..9470423 160000
--- a/driver/linux
+++ b/driver/linux
@@ -1 +1 @@
-Subproject commit 614ed7ffdf9ebb7ef587ed40527c03eb23a756c5
+Subproject commit 9470423471ad43b3aa2e5d43e4bd37f1c53e8e6e
diff --git a/inc/vmapi/hf/abi.h b/inc/vmapi/hf/abi.h
index f46ed29..55c7491 100644
--- a/inc/vmapi/hf/abi.h
+++ b/inc/vmapi/hf/abi.h
@@ -93,7 +93,6 @@
 		} wake_up;
 		struct {
 			uint16_t vm_id;
-			uint32_t size;
 		} message;
 		struct {
 			uint64_t ns;
@@ -134,8 +133,7 @@
 		ret |= (uint64_t)res.wake_up.vcpu << 16;
 		break;
 	case HF_VCPU_RUN_MESSAGE:
-		ret |= (uint64_t)res.message.size << 32;
-		ret |= (uint64_t)res.message.vm_id << 16;
+		ret |= res.message.vm_id << 8;
 		break;
 	case HF_VCPU_RUN_WAIT_FOR_INTERRUPT:
 	case HF_VCPU_RUN_WAIT_FOR_MESSAGE:
@@ -164,8 +162,7 @@
 		ret.wake_up.vcpu = (res >> 16) & 0xffff;
 		break;
 	case HF_VCPU_RUN_MESSAGE:
-		ret.message.size = res >> 32;
-		ret.message.vm_id = (res >> 16) & 0xffff;
+		ret.message.vm_id = res >> 8;
 		break;
 	case HF_VCPU_RUN_WAIT_FOR_INTERRUPT:
 	case HF_VCPU_RUN_WAIT_FOR_MESSAGE:
diff --git a/src/abi_test.cc b/src/abi_test.cc
index f8cefa5..ed060e8 100644
--- a/src/abi_test.cc
+++ b/src/abi_test.cc
@@ -175,9 +175,8 @@
 {
 	struct hf_vcpu_run_return res = dirty_vcpu_run_return();
 	res.code = HF_VCPU_RUN_MESSAGE;
-	res.message.size = 0xdeadbeef;
 	res.message.vm_id = 0xf007;
-	EXPECT_THAT(hf_vcpu_run_return_encode(res), Eq(0xdeadbeeff0070005));
+	EXPECT_THAT(hf_vcpu_run_return_encode(res), Eq(0x0000000000f00705));
 }
 
 /**
@@ -188,8 +187,7 @@
 	struct hf_vcpu_run_return res =
 		hf_vcpu_run_return_decode(0x1123581314916205);
 	EXPECT_THAT(res.code, Eq(HF_VCPU_RUN_MESSAGE));
-	EXPECT_THAT(res.message.size, Eq(0x11235813));
-	EXPECT_THAT(res.message.vm_id, Eq(0x1491));
+	EXPECT_THAT(res.message.vm_id, Eq(0x9162));
 }
 
 /**
diff --git a/src/api.c b/src/api.c
index 16620a1..2454fc8 100644
--- a/src/api.c
+++ b/src/api.c
@@ -816,7 +816,6 @@
 
 	/* Messages for the primary VM are delivered directly. */
 	if (to->id == HF_PRIMARY_VM_ID) {
-		primary_ret.message.size = size,
 		to->mailbox.state = mailbox_state_read;
 		*next = api_switch_to_primary(current, primary_ret,
 					      vcpu_state_ready);
diff --git a/test/vmapi/gicv3/timer_secondary.c b/test/vmapi/gicv3/timer_secondary.c
index e554551..bcd762a 100644
--- a/test/vmapi/gicv3/timer_secondary.c
+++ b/test/vmapi/gicv3/timer_secondary.c
@@ -73,7 +73,7 @@
 	 */
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response));
+	EXPECT_EQ(recv_buffer->length, sizeof(expected_response));
 	EXPECT_EQ(memcmp(recv_buffer->payload, expected_response,
 			 sizeof(expected_response)),
 		  0);
@@ -156,7 +156,7 @@
 
 	/* Once we wake it up it should get the timer interrupt and respond. */
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response));
+	EXPECT_EQ(recv_buffer->length, sizeof(expected_response));
 	EXPECT_EQ(memcmp(recv_buffer->payload, expected_response,
 			 sizeof(expected_response)),
 		  0);
diff --git a/test/vmapi/primary_with_secondaries/interrupts.c b/test/vmapi/primary_with_secondaries/interrupts.c
index 9429acc..eaee542 100644
--- a/test/vmapi/primary_with_secondaries/interrupts.c
+++ b/test/vmapi/primary_with_secondaries/interrupts.c
@@ -48,7 +48,7 @@
 	EXPECT_EQ(spci_msg_send(0), 0);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response));
+	EXPECT_EQ(mb.recv->length, sizeof(expected_response));
 	EXPECT_EQ(memcmp(mb.recv->payload, expected_response,
 			 sizeof(expected_response)),
 		  0);
@@ -76,7 +76,7 @@
 	hf_interrupt_inject(SERVICE_VM0, 0, EXTERNAL_INTERRUPT_ID_A);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response));
+	EXPECT_EQ(mb.recv->length, sizeof(expected_response));
 	EXPECT_EQ(memcmp(mb.recv->payload, expected_response,
 			 sizeof(expected_response)),
 		  0);
@@ -86,7 +86,7 @@
 	hf_interrupt_inject(SERVICE_VM0, 0, EXTERNAL_INTERRUPT_ID_A);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response));
+	EXPECT_EQ(mb.recv->length, sizeof(expected_response));
 	EXPECT_EQ(memcmp(mb.recv->payload, expected_response,
 			 sizeof(expected_response)),
 		  0);
@@ -114,7 +114,7 @@
 	hf_interrupt_inject(SERVICE_VM0, 0, EXTERNAL_INTERRUPT_ID_A);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response));
+	EXPECT_EQ(mb.recv->length, sizeof(expected_response));
 	EXPECT_EQ(memcmp(mb.recv->payload, expected_response,
 			 sizeof(expected_response)),
 		  0);
@@ -124,7 +124,7 @@
 	hf_interrupt_inject(SERVICE_VM0, 0, EXTERNAL_INTERRUPT_ID_B);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response_2));
+	EXPECT_EQ(mb.recv->length, sizeof(expected_response_2));
 	EXPECT_EQ(memcmp(mb.recv->payload, expected_response_2,
 			 sizeof(expected_response_2)),
 		  0);
@@ -154,7 +154,7 @@
 	hf_interrupt_inject(SERVICE_VM0, 0, EXTERNAL_INTERRUPT_ID_A);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response));
+	EXPECT_EQ(mb.recv->length, sizeof(expected_response));
 	EXPECT_EQ(memcmp(mb.recv->payload, expected_response,
 			 sizeof(expected_response)),
 		  0);
@@ -171,7 +171,7 @@
 	EXPECT_EQ(spci_msg_send(0), 0);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response_2));
+	EXPECT_EQ(mb.recv->length, sizeof(expected_response_2));
 	EXPECT_EQ(memcmp(mb.recv->payload, expected_response_2,
 			 sizeof(expected_response_2)),
 		  0);
@@ -208,7 +208,7 @@
 	EXPECT_EQ(spci_msg_send(0), 0);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response));
+	EXPECT_EQ(mb.recv->length, sizeof(expected_response));
 	EXPECT_EQ(memcmp(mb.recv->payload, expected_response,
 			 sizeof(expected_response)),
 		  0);
@@ -236,7 +236,7 @@
 	hf_interrupt_inject(SERVICE_VM0, 0, EXTERNAL_INTERRUPT_ID_A);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response));
+	EXPECT_EQ(mb.recv->length, sizeof(expected_response));
 	EXPECT_EQ(memcmp(mb.recv->payload, expected_response,
 			 sizeof(expected_response)),
 		  0);
@@ -264,7 +264,7 @@
 	hf_interrupt_inject(SERVICE_VM0, 0, EXTERNAL_INTERRUPT_ID_A);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(expected_response));
+	EXPECT_EQ(mb.recv->length, sizeof(expected_response));
 	EXPECT_EQ(memcmp(mb.recv->payload, expected_response,
 			 sizeof(expected_response)),
 		  0);
@@ -294,7 +294,7 @@
 	hf_interrupt_inject(SERVICE_VM0, 0, EXTERNAL_INTERRUPT_ID_A);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(message));
+	EXPECT_EQ(mb.recv->length, sizeof(message));
 	EXPECT_EQ(memcmp(mb.recv->payload, message, sizeof(message)), 0);
 	EXPECT_EQ(hf_mailbox_clear(), 0);
 }
diff --git a/test/vmapi/primary_with_secondaries/mailbox.c b/test/vmapi/primary_with_secondaries/mailbox.c
index 8615957..287767e 100644
--- a/test/vmapi/primary_with_secondaries/mailbox.c
+++ b/test/vmapi/primary_with_secondaries/mailbox.c
@@ -95,7 +95,7 @@
 	EXPECT_EQ(spci_msg_send(0), 0);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(message));
+	EXPECT_EQ(mb.recv->length, sizeof(message));
 	EXPECT_EQ(memcmp(mb.send->payload, message, sizeof(message)), 0);
 	EXPECT_EQ(hf_mailbox_clear(), 0);
 }
@@ -126,7 +126,7 @@
 		EXPECT_EQ(spci_msg_send(0), 0);
 		run_res = hf_vcpu_run(SERVICE_VM0, 0);
 		EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-		EXPECT_EQ(run_res.message.size, sizeof(message));
+		EXPECT_EQ(mb.recv->length, sizeof(message));
 		EXPECT_EQ(memcmp(mb.recv->payload, message, sizeof(message)),
 			  0);
 		EXPECT_EQ(hf_mailbox_clear(), 0);
@@ -173,7 +173,7 @@
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
 	EXPECT_EQ(run_res.message.vm_id, SERVICE_VM1);
-	EXPECT_EQ(run_res.message.size, 0);
+	EXPECT_EQ(mb.recv->length, 0);
 
 	/* Let SERVICE_VM1 forward the message. */
 	run_res = hf_vcpu_run(SERVICE_VM1, 0);
@@ -181,7 +181,7 @@
 
 	/* Ensure the message is in tact. */
 	EXPECT_EQ(run_res.message.vm_id, HF_PRIMARY_VM_ID);
-	EXPECT_EQ(run_res.message.size, sizeof(message));
+	EXPECT_EQ(mb.recv->length, sizeof(message));
 	EXPECT_EQ(memcmp(mb.recv->payload, message, sizeof(message)), 0);
 	EXPECT_EQ(hf_mailbox_clear(), 0);
 }
@@ -258,7 +258,7 @@
 	EXPECT_EQ(spci_msg_send(0), 0);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(message));
+	EXPECT_EQ(mb.recv->length, sizeof(message));
 	EXPECT_EQ(memcmp(mb.recv->payload, message, sizeof(message)), 0);
 
 	/* Let secondary VM continue running so that it will wait again. */
@@ -294,7 +294,7 @@
 		1);
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(message));
+	EXPECT_EQ(mb.recv->length, sizeof(message));
 	EXPECT_EQ(memcmp(mb.recv->payload, message, sizeof(message)), 0);
 }
 
@@ -325,7 +325,7 @@
 	/* Receive a reply for the first message. */
 	run_res = hf_vcpu_run(SERVICE_VM0, 0);
 	EXPECT_EQ(run_res.code, HF_VCPU_RUN_MESSAGE);
-	EXPECT_EQ(run_res.message.size, sizeof(message));
+	EXPECT_EQ(mb.recv->length, sizeof(message));
 	EXPECT_EQ(memcmp(mb.recv->payload, message, sizeof(message)), 0);
 
 	/* Run VM again so that it clears its mailbox. */
diff --git a/test/vmapi/primary_with_secondaries/run_race.c b/test/vmapi/primary_with_secondaries/run_race.c
index 2a25c65..6a49313 100644
--- a/test/vmapi/primary_with_secondaries/run_race.c
+++ b/test/vmapi/primary_with_secondaries/run_race.c
@@ -47,7 +47,7 @@
 
 		/* Break out if we received a message with non-zero length. */
 		if (run_res.code == HF_VCPU_RUN_MESSAGE &&
-		    run_res.message.size != 0) {
+		    mb->recv->length != 0) {
 			break;
 		}
 
@@ -56,7 +56,7 @@
 	}
 
 	/* Copies the contents of the received boolean to the return value. */
-	if (run_res.message.size == sizeof(ok)) {
+	if (mb->recv->length == sizeof(ok)) {
 		memcpy(&ok, mb->recv->payload, sizeof(ok));
 	}