diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-02-14 09:22:33 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-02-14 09:22:33 +0000 |
commit | fdbcfd71bbc84b9e44bc0c79489b750109a380d0 (patch) | |
tree | 9148f8d2fa70d4520467feddd63299def577d9d8 /extras/mini-os/lib | |
parent | f280af038a947b67694780f999e06e05d11de1cf (diff) | |
download | xen-fdbcfd71bbc84b9e44bc0c79489b750109a380d0.tar.gz xen-fdbcfd71bbc84b9e44bc0c79489b750109a380d0.tar.bz2 xen-fdbcfd71bbc84b9e44bc0c79489b750109a380d0.zip |
Mini-OS: Fix alignment in maybe_split()
Needed on ia64, speeds up on x86.
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/lib')
-rw-r--r-- | extras/mini-os/lib/xmalloc.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/extras/mini-os/lib/xmalloc.c b/extras/mini-os/lib/xmalloc.c index 9e59c9f834..d4c3941738 100644 --- a/extras/mini-os/lib/xmalloc.c +++ b/extras/mini-os/lib/xmalloc.c @@ -62,10 +62,19 @@ struct xmalloc_pad size_t hdr_size; }; +/* Return size, increased to alignment with align. */ +static inline size_t align_up(size_t size, size_t align) +{ + return (size + align - 1) & ~(align - 1); +} + static void maybe_split(struct xmalloc_hdr *hdr, size_t size, size_t block) { struct xmalloc_hdr *extra; - size_t leftover = block - size; + size_t leftover; + size = align_up(size, __alignof__(struct xmalloc_hdr)); + size = align_up(size, __alignof__(struct xmalloc_pad)); + leftover = block - size; /* If enough is left to make a block, put it on free list. */ if ( leftover >= (2 * (sizeof(struct xmalloc_hdr) + sizeof(struct xmalloc_pad))) ) @@ -100,12 +109,6 @@ static struct xmalloc_hdr *xmalloc_new_page(size_t size) return hdr; } -/* Return size, increased to alignment with align. */ -static inline size_t align_up(size_t size, size_t align) -{ - return (size + align - 1) & ~(align - 1); -} - /* Big object? Just use the page allocator. */ static void *xmalloc_whole_pages(size_t size, size_t align) { |