Commit 3960f2faaf0a67ad352bd5d4085e43f19f33ab91

Authored by Greg Ungerer
Committed by Linus Torvalds
1 parent 845884d332

[PATCH] m68knommu: fix find_next_zero_bit in bitops.h

We're starting a number of big applications (memory footprint app.
1MByte) on our Arcturus uC5272.  Therefore memory fragmentation is a
real pain for us.  We've switched to uClinux-2.4.27-uc1 and found that
page_alloc2 fragments the memory heavily.

Digging into it we found a bug in the find_next_zero_bit function in the
m68knommu/bitops.h file.  if the size isn't a multiple of 32 than the
upper bits of the last word to be searched should be masked.  But the
functions masks the lower bits of the last word because it uses a right
shift instead of a left shift operator.

Patch submitted by Sascha Smejkal <s.smejkal@centersystems.at>

Signed-off-by: Greg Ungerer <gerg@uclinux.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Showing 1 changed file with 1 additions and 1 deletions Side-by-side Diff

include/asm-m68knommu/bitops.h
... ... @@ -290,7 +290,7 @@
290 290 tmp = *p;
291 291  
292 292 found_first:
293   - tmp |= ~0UL >> size;
  293 + tmp |= ~0UL << size;
294 294 found_middle:
295 295 return result + ffz(tmp);
296 296 }