@@ -767,8 +767,11 @@ shmem_pread_fast(struct page *page, int shmem_page_offset, int page_length,
return -EINVAL;
vaddr = kmap_atomic(page);
- if (needs_clflush)
+ if (needs_clflush) {
clflush_cache_range(vaddr + shmem_page_offset, page_length);
+ clflush(vaddr + shmem_page_offset);
+ mb();
+ }
ret = __copy_to_user_inatomic(user_data,
vaddr + shmem_page_offset,
page_length);
@@ -810,10 +813,13 @@ shmem_pread_slow(struct page *page, int shmem_page_offset, int page_length,
int ret;
vaddr = kmap(page);
- if (needs_clflush)
+ if (needs_clflush) {
shmem_clflush_swizzled_range(vaddr + shmem_page_offset,
page_length,
page_do_bit17_swizzling);
+ clflush(vaddr + shmem_page_offset);
+ mb();
+ }
if (page_do_bit17_swizzling)
ret = __copy_to_user_swizzled(user_data,