William Lee Irwin III wrote: >William Lee Irwin III wrote: > > >>>It returns a false positive when size + 3*BYTES_PER_WORD == 2**n, e.g. >>>size == 16373. Here, fls(size - 1) == 13, but fls(size - 1 + 12) == 13 >>>while size - 1 + 12 == 16384, where we'd want the check to fail. >>> >>> > >On Sat, May 22, 2004 at 10:43:47AM +0200, Manfred Spraul wrote: > > >>No, 16373 must fail: After adding 12 bytes the object size would be >>16385, which would mean an order==3 allocation. >>And 16372 must succeed: 16384 is still an order==2 allocation. >>The idea is that there shouldn't be an allocation order increase due to >>redzoning, and afaics that doesn't happen, except between 4082 and 4095 >>bytes. >> >> > >Yes. While you've corrected the one-offs in my post (arithmetic is boring, >we have machines to do that for us now) > I admit, I'm cheating: I'd copied the test to user space and then tested all values between 32 and 131072. 16372 passes: fls(16371) == fls(16383). I'll send a patch to Andrew to fix the range between 4084 and 4095. -- Manfred