提交 1c2de47c 编写于 作者: T Timur Tabi 提交者: Paul Mackerras

[POWERPC] Fix alignment problem in rh_alloc_align() with exact-sized 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: NTimur Tabi <timur@freescale.com>
Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
上级 991eb43a
......@@ -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 */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册