diff options
author | Yang Zhong <yang.zhong@intel.com> | 2017-03-30 18:20:50 +0800 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2017-03-30 10:33:34 +0200 |
commit | ea7d0e304775e81c07269e22b4412d328c3fb2fa (patch) | |
tree | 569ee92e1bae2c2786e20cce007e0bd5ce69a7c3 /malloc.c | |
parent | fd8d084d31c83419500b17b4909b0ed6e8144acd (diff) | |
download | qboot-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.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -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; } |