Skip to content

Commit

Permalink
[POWERPC] Fix alignment problem in rh_alloc_align() with exact-sized …
Browse files Browse the repository at this point in the history
…blocks

When an rheap is created, the caller can specify the alignment to use.  In
rh_alloc_align(), if a free block is found that is the exact size needed
(including extra space for alignment), that configured alignment value is not
used to align the pointer.  Instead, the default alignment is used.  If the
default alignment is smaller than the configured alignment, then the returned
value will not be aligned correctly.

Signed-off-by: Timur Tabi <timur@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
  • Loading branch information
Timur Tabi authored and Paul Mackerras committed May 17, 2007
1 parent 991eb43 commit 1c2de47
Showing 1 changed file with 8 additions and 14 deletions.
22 changes: 8 additions & 14 deletions arch/powerpc/lib/rheap.c
Original file line number Diff line number Diff line change
Expand Up @@ -468,25 +468,19 @@ unsigned long rh_alloc_align(rh_info_t * info, int size, int alignment, const ch
if (blk->size == size) {
/* Move from free list to taken list */
list_del(&blk->list);
blk->owner = owner;
start = blk->start;

attach_taken_block(info, blk);
newblk = blk;
} else {
newblk = get_slot(info);
newblk->start = blk->start;
newblk->size = size;

return start;
/* blk still in free list, with updated start, size */
blk->start += size;
blk->size -= size;
}

newblk = get_slot(info);
newblk->start = blk->start;
newblk->size = size;
newblk->owner = owner;

/* blk still in free list, with updated start, size */
blk->start += size;
blk->size -= size;

start = newblk->start;

attach_taken_block(info, newblk);

/* for larger alignment return fixed up pointer */
Expand Down

0 comments on commit 1c2de47

Please sign in to comment.