summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <[email protected]>2018-09-15 00:50:54 -0600
committerAlexander Graf <[email protected]>2018-09-23 21:55:30 +0200
commit613185023f0e84c410a2c088dd030ca696834763 (patch)
tree4f9d19d853a09a6009bd936fd6ae7c24ab5009d0
parenta46714ffc31c46930965596e2da9ecfac648c1d3 (diff)
sandbox: Align RAM buffer to the machine page size
At present the sandbox RAM buffer is not aligned to any particular address boundary. This makes the internal pointers somewhat random with respect to the associated RAM buffer addresses. Align the buffer to the page size of the machine to help with this. Note that there is a header at the start of the allocated pointer. To avoid returning a pointer which is not aligned to a page boundary, we waste almost an entire page of memory for each allocation. Signed-off-by: Simon Glass <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
-rw-r--r--arch/sandbox/cpu/os.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c
index 5839932b005..a1a982af2de 100644
--- a/arch/sandbox/cpu/os.c
+++ b/arch/sandbox/cpu/os.c
@@ -143,14 +143,15 @@ void os_tty_raw(int fd, bool allow_sigs)
void *os_malloc(size_t length)
{
struct os_mem_hdr *hdr;
+ int page_size = getpagesize();
- hdr = mmap(NULL, length + sizeof(*hdr), PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ hdr = mmap(NULL, length + page_size,
+ PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (hdr == MAP_FAILED)
return NULL;
hdr->length = length;
- return hdr + 1;
+ return (void *)hdr + page_size;
}
void os_free(void *ptr)