On Mon, 22 Mar 2021, Matthew Wilcox wrote: > On Mon, Mar 22, 2021 at 10:05:05AM -0400, Mikulas Patocka wrote: > > This patch replaces a loop with a "tzcnt" instruction. > > Are you sure that's an optimisation? The loop would execute very few > times under normal circumstances (a maximum of three times on x86). > Some numbers would be nice. According to Agner's instruction tables, tzcnt has latency 3 on Skylake and 2 on Zen. (386, 486, Pentium and K6 didn't have hardware for the bsf instruction, they executed it in microcode bit-by-bit, but newer processors execute it quickly). The patch reduces code size by 16 bytes. Mikulas > > Signed-off-by: Mikulas Patocka <mpatocka@xxxxxxxxxx> > > > > Index: linux-2.6/fs/buffer.c > > =================================================================== > > --- linux-2.6.orig/fs/buffer.c > > +++ linux-2.6/fs/buffer.c > > Are ... are you still using CVS?! > > > @@ -1020,11 +1020,7 @@ grow_buffers(struct block_device *bdev, > > pgoff_t index; > > int sizebits; > > > > - sizebits = -1; > > - do { > > - sizebits++; > > - } while ((size << sizebits) < PAGE_SIZE); > > - > > + sizebits = PAGE_SHIFT - __ffs(size); > > index = block >> sizebits; > > > > /* > > >