microblaze: Optimize CACHE_LOOP_LIMITS and CACHE_RANGE_LOOP macros
authorMichal Simek <monstr@monstr.eu>
Mon, 26 Apr 2010 06:54:13 +0000 (08:54 +0200)
committerMichal Simek <monstr@monstr.eu>
Thu, 6 May 2010 09:22:00 +0000 (11:22 +0200)
commit3274c5707c22221574b396d140d0db3480a2027a
tree914be5462b00a74db910795062f5616baa0a3ce6
parent385e1efafc73a5deeb20645ae8b227b4896852e2
microblaze: Optimize CACHE_LOOP_LIMITS and CACHE_RANGE_LOOP macros

1. Remove CACHE_ALL_LOOP2 macro because it is identical to CACHE_ALL_LOOP
2. Change BUG_ON to WARN_ON
3. Remove end aligned from CACHE_LOOP_LIMITS.
C implementation do not need aligned end address and ASM code do aligned
in their macros
4. ASM optimized  CACHE_RANGE_LOOP_1/2 macros needs to get aligned end address.
Because end address is compound from start + size, end address is the first address
which is exclude.

Here is the corresponding code which describe it.
+       int align = ~(line_length - 1);
+       end = ((end & align) == end) ? end - line_length : end & align;

a) end is aligned:
it is necessary to subtruct line length because we don't want to work with
next cacheline
b) end address is not aligned:
Just align it to be ready for ASM code.

Signed-off-by: Michal Simek <monstr@monstr.eu>
arch/microblaze/kernel/cpu/cache.c