On 19 July 2012 22:45, Jiří Zárevúcky <[email protected]> wrote:
> On 30 August 2011 23:54, Jakub Jermar <[email protected]> wrote:
>> On 08/17/2011 05:42 PM, Vojtech Horky wrote:
>>> +     /*
>>> +      * When growing the heap, we need to allocate at least this much
>>> +      * space.
>>> +      * Generally, to allocate x bytes aligned at y, we need at least
>>> +      * space x + y bytes.
>>> +      * Here we add some extra space (through ALIGN_UP(..., BASE_ALIGN))
>>> +      * just to be on the safe side.
>>> +      * Notice that we need to take care of all structures as growing
>>> +      * the heap might bring a new AS area.
>>> +      */
>>> +     size_t grow_size = ALIGN_UP(sizeof(heap_area_t), BASE_ALIGN)
>>> +         + ALIGN_UP(sizeof(heap_block_head_t), BASE_ALIGN)
>>> +         + falign
>>> +         + ALIGN_UP(size, BASE_ALIGN)
>>> +         + ALIGN_UP(sizeof(heap_block_foot_t), BASE_ALIGN);
>>
>> This extra space makes the whole thing look strange. Either it is needed
>> and it shouldn't be called 'extra', or it is not needed and it shouldn't
>> be there at all.
>>
>
> Here is my attempt at a patch.
> It's a little bit more complex, because I merged grow with subsequent
> allocation for sanity checking and to eliminate the unnecessary
> search.
> I also only add a necessary amount when resizing an existing area.
> Seems to work fine for me.
>

Scrap that, it's completely wrong.
As for the actual cause, it's the block header and footer that are
messing up the alignment.
I'm working on a patch that fixes it properly.

-- Jirka Zr.

_______________________________________________
HelenOS-devel mailing list
[email protected]
http://lists.modry.cz/cgi-bin/listinfo/helenos-devel

Reply via email to