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 ? -- Gilles Chanteperdrix. _______________________________________________ Xenomai-core mailing list Xenomaifirstname.lastname@example.org https://mail.gna.org/listinfo/xenomai-core