Jan Kiszka wrote:
> Jan Kiszka wrote:
>> Philippe Gerum wrote:
>>> We should indeed postpone this just in case the upper layer indexes the
>>> extra
>>> state on the minor value. We can also simplify a few things doing so.
>>>
>>> --- ksrc/nucleus/pipe.c (revision 4565)
>>> +++ ksrc/nucleus/pipe.c (working copy)
>>> @@ -77,11 +77,9 @@
>>>
>>> static inline void xnpipe_minor_free(int minor)
>>> {
>>> - if (minor < 0 || minor >= XNPIPE_NDEVS)
>>> - return;
>>> -
>>> - __clrbits(xnpipe_bitmap[minor / BITS_PER_LONG],
>>> - 1UL << (minor % BITS_PER_LONG));
>>> + /* May be called with nklock free. */
>>> + clrbits(xnpipe_bitmap[minor / BITS_PER_LONG],
>>> + 1UL << (minor % BITS_PER_LONG));
>> Bad news: This doesn't fly as is. All modifying operations on
>> xnpipe_bitmap must be atomic and xnpipe_bitmap has to be
>> xnarch_atomic_t. But then find_first_zero_bit breaks. Is there some
>> version for atomic arrays? I guess we have to open-code this, at least
>> down to word-level...
>
> Ok, xnpipe_bitmap can remain ulong but
> a) xnpipe_minor_alloc must use setbits and
> b) for some reasons clrbits in xnpipe_minor_free does not build on my 64
> bit host. Maybe compiler issue. Investigating...
Yes, clrbits is atomic_clear_mask which does an andl, so, does not work
for 64 bits arguments.
--
Gilles.
_______________________________________________
Xenomai-core mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-core