On 17/03/2021 06.40, Yury Norov wrote: > On Tue, Mar 16, 2021 at 01:42:45PM +0200, Andy Shevchenko wrote: >>> It would also be much easier to review if you just redefined the >>> BITMAP_LAST_WORD_MASK macros etc. in terms of these new things, so you >>> wouldn't have to do a lot of mechanical changes at the same time as >>> introducing the new ones - especially when those mechanical changes >>> involve adding a "minus 1" everywhere. >> >> I tend to agree with Rasmus here. > > OK. All this plus terrible GENMASK(high, low) design, when high goes > first, makes me feel like we need to deprecate GENMASK and propose a > new interface. > > What do you think about this: > BITS_FIRST(bitnum) -> [0, bitnum) > BITS_LAST(bitnum) -> [bitnum, BITS_PER_LONG) > BITS_RANGE(begin, end) -> [begin, end) Better, though I'm not too happy about BITS_LAST(n) not producing a word with the n highest bits set. I dunno, I don't have better names. BITS_FROM/BITS_UPTO perhaps, but not really (and upto sounds like it is inclusive). BITS_LOW/BITS_HIGH have the same problem as BITS_LAST. Also, be careful to document what one can expect from the boundary values 0/BITS_PER_LONG. Is BITS_FIRST(0) a valid invocation? Does it yield 0UL? How about BITS_FIRST(BITS_PER_LONG), does that give ~0UL? Note that BITMAP_{FIRST,LAST}_WORD_MASK never produce 0, they're never used except with a word we know to be part of the bitmap. > We can pick BITS_{LAST,FIRST} implementation from existing BITMAP_*_WORD_MASK > analogues, and make the BITS_RANGE like: > #define BITS_RANGE(begin, end) BITS_FIRST(end) & BITS_LAST(begin) > > Regarding BITMAP_*_WORD_MASK, I can save them in bitmap.h as aliases > to BITS_{LAST,FIRST} to avoid massive renaming. (Should I?) Yes, now that I read these again, I definitely think the BITMAP_{FIRST,LAST}_WORD_MASK should stay (whether their implementation change I don't care). Their names document what they do much better than if you replace them with their potential new implementations: BITMAP_FIRST_WORD_MASK(start) is obviously about having to mask off some low bits of the first word we're looking at because we're looking at an offset into the bitmap, and similarly BITMAP_LAST_WORD_MASK(nbits) explains itself: nbits is such that the last word needs some masking. But their replacements would be BITS_LAST(start) and BITS_FIRST(nbits) respectively (possibly with those arguments reduced mod N), which is quite confusing. > Would this all work for you? Maybe, I think I'd have to see the implementation and how those new macros get used. Thanks, Rasmus