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... Jan -- Siemens AG, Corporate Technology, CT SE 2 Corporate Competence Center Embedded Linux _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core