Gilles Chanteperdrix wrote:
> Jan Kiszka wrote:
>  > Hi,
>  > 
>  > playing a stupid rt_heap user (actually I didn't just play this...), I
>  > stumbled over this undocumented oddity:
>  > 
>  > rt_heap_create(&heap, name, 10000, H_PRIO|H_MAPPABLE);
>  > rt_heap_alloc(&heap, 10000, TM_NONBLOCK, &ptr);
>  > 
>  > Creation is successful, allocation fails. The reason: while during
>  > creation the net heap size is rounded down to page boundaries, the
>  > allocation of memory > PAGE_SIZE is rounded up. One could add H_SINGLE
>  > to the flags, but this may even result in allocating less memory than
>  > the user expected, causing severe problems later.
>  > 
>  > How to resolve this best? I thought about rounding twice in
>  > rt_head_create (one time the net size, the second time including the
>  > overhead), but this encodes characteristics of the underlying heap
>  > allocator into the skin (I have a generic heap allocator framework in
>  > mind for 2.3). So I decided to do this rounding in xnheap_overhead()
>  > instead, see attached patch. Hope I didn't skewed up any calculation. At
>  > least the scenario above now works fine.
> 
> The problem I see with this patch is that you are counting 
> (rounded_hsize - hsize) as part of the overhead, whereas you would like to
> count it as free space. Would not it make more sense to do the rounding
> in xnheap_init_mapped ?
> 

I was thinking of the open-coded

allocate(heap_size + xnheap_overhead)
xnheap_init()

in many skins as well.

Jan

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to