SPCI: Add a buffer of len PAGE_SIZE to each CPU.
The buffers are used to store a copy of the contents of the Tx buffer
when handling an architected message. This is mostly relevant for
memory sharing.
There exists a single buffer per CPU.
Change-Id: I60c4eab865b01fb73825308439faa72c8af85fb2
diff --git a/src/api.c b/src/api.c
index 98c0827..1fed670 100644
--- a/src/api.c
+++ b/src/api.c
@@ -936,11 +936,9 @@
* Buffer holding the internal copy of the shared memory
* regions.
*/
- /* TODO: Buffer is temporarily in the stack. */
- uint8_t message_buffer
- [sizeof(struct spci_architected_message_header) +
- sizeof(struct spci_memory_region_constituent) +
- sizeof(struct spci_memory_region)];
+ uint8_t *message_buffer = cpu_get_buffer(current->cpu->id);
+ uint32_t message_buffer_size =
+ cpu_get_buffer_size(current->cpu->id);
struct spci_architected_message_header *architected_header =
spci_get_architected_message_header(from->mailbox.send);
@@ -948,7 +946,7 @@
const struct spci_architected_message_header
*architected_message_replica;
- if (from_msg_replica.length > sizeof(message_buffer)) {
+ if (from_msg_replica.length > message_buffer_size) {
ret = SPCI_INVALID_PARAMETERS;
goto out;
}
@@ -960,7 +958,7 @@
}
/* Copy the architected message into an internal buffer. */
- memcpy_s(message_buffer, sizeof(message_buffer),
+ memcpy_s(message_buffer, message_buffer_size,
architected_header, from_msg_replica.length);
architected_message_replica =