diff options
Diffstat (limited to 'arch/powerpc/lib/rheap.c')
-rw-r--r-- | arch/powerpc/lib/rheap.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/arch/powerpc/lib/rheap.c b/arch/powerpc/lib/rheap.c index b2f6dcc59600..180ee2933ab9 100644 --- a/arch/powerpc/lib/rheap.c +++ b/arch/powerpc/lib/rheap.c | |||
@@ -468,25 +468,19 @@ unsigned long rh_alloc_align(rh_info_t * info, int size, int alignment, const ch | |||
468 | if (blk->size == size) { | 468 | if (blk->size == size) { |
469 | /* Move from free list to taken list */ | 469 | /* Move from free list to taken list */ |
470 | list_del(&blk->list); | 470 | list_del(&blk->list); |
471 | blk->owner = owner; | 471 | newblk = blk; |
472 | start = blk->start; | 472 | } else { |
473 | 473 | newblk = get_slot(info); | |
474 | attach_taken_block(info, blk); | 474 | newblk->start = blk->start; |
475 | newblk->size = size; | ||
475 | 476 | ||
476 | return start; | 477 | /* blk still in free list, with updated start, size */ |
478 | blk->start += size; | ||
479 | blk->size -= size; | ||
477 | } | 480 | } |
478 | 481 | ||
479 | newblk = get_slot(info); | ||
480 | newblk->start = blk->start; | ||
481 | newblk->size = size; | ||
482 | newblk->owner = owner; | 482 | newblk->owner = owner; |
483 | |||
484 | /* blk still in free list, with updated start, size */ | ||
485 | blk->start += size; | ||
486 | blk->size -= size; | ||
487 | |||
488 | start = newblk->start; | 483 | start = newblk->start; |
489 | |||
490 | attach_taken_block(info, newblk); | 484 | attach_taken_block(info, newblk); |
491 | 485 | ||
492 | /* for larger alignment return fixed up pointer */ | 486 | /* for larger alignment return fixed up pointer */ |