+#ifdef CONFIG_PPC
flush_icache_range( addr, addr + size );
+#endif
I'm not sure what your flush_icache_range() does exactly, but at a minimum it is misnamed: you need to flush the dcache for this range to memory (dcbst is enough), do a sync, invalidate the icache (icbi), do another sync, do an isync.
Segher