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));
}