aboutsummaryrefslogtreecommitdiff
path: root/malloc.c
diff options
context:
space:
mode:
authorYang Zhong <yang.zhong@intel.com>2017-03-30 18:20:50 +0800
committerPaolo Bonzini <pbonzini@redhat.com>2017-03-30 10:33:34 +0200
commitea7d0e304775e81c07269e22b4412d328c3fb2fa (patch)
tree569ee92e1bae2c2786e20cce007e0bd5ce69a7c3 /malloc.c
parentfd8d084d31c83419500b17b4909b0ed6e8144acd (diff)
downloadqboot-ea7d0e304775e81c07269e22b4412d328c3fb2fa.zip
qboot-ea7d0e304775e81c07269e22b4412d328c3fb2fa.tar.gz
qboot-ea7d0e304775e81c07269e22b4412d328c3fb2fa.tar.bz2
qboot: modified the malloc for fseg and high momory.
The fseg and high memory malloc all use the up align mode in do_alloc(),which will result in qboot hang issue.The high memory use the down align mode and fseg memory use the up align mode. With those changes,the qemu can boot up the image with qboot. Signed-off-by: Yang Zhong <yang.zhong@intel.com> Message-Id: <1490869250-4357-1-git-send-email-yang.zhong@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'malloc.c')
-rw-r--r--malloc.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/malloc.c b/malloc.c
index c8d865b..8738373 100644
--- a/malloc.c
+++ b/malloc.c
@@ -5,15 +5,17 @@
static uint8_t *fseg_base = &edata;
static uint8_t *malloc_top = &stext;
-void *malloc(int n)
+void *malloc_align(int n, int align)
{
- malloc_top -= (n + 15) & -16;
+ malloc_top = (uint8_t *) ((uintptr_t)(malloc_top - n) & -align);
return malloc_top;
}
-void *malloc_fseg(int n)
+void *malloc_fseg_align(int n, int align)
{
- void *p = fseg_base;
- fseg_base += (n + 15) & -16;
+ void *p;
+ fseg_base = (uint8_t *) (((uintptr_t)fseg_base + align - 1) & -align);
+ p = fseg_base;
+ fseg_base += n;
return p;
}