On Wed, Jun 24, 2009 at 03:18:24PM -0700, Kaz Kylheku wrote: > +void __flush_icache_page(struct vm_area_struct *vma, struct page *page) > +{ > + if (vma->vm_flags & VM_EXEC) > + flush_icache_range((unsigned long) page_address(page), > PAGE_SIZE); > +} Flush_icache_range takes two arguments, start and end address. Both addresses are the virtual addresses at which the code will run. Iow both arguments are wrong. The result is that for start address values normally passed to flush_icache_range it will optimize the flush into a full cache flush of I-cache and D-cache - iow you're lucky. Ralf