|
@@ -129,14 +129,16 @@ within(unsigned long addr, unsigned long start, unsigned long end)
|
|
|
*/
|
|
|
void clflush_cache_range(void *vaddr, unsigned int size)
|
|
|
{
|
|
|
- unsigned long clflush_mask = boot_cpu_data.x86_clflush_size - 1;
|
|
|
+ const unsigned long clflush_size = boot_cpu_data.x86_clflush_size;
|
|
|
+ void *p = (void *)((unsigned long)vaddr & ~(clflush_size - 1));
|
|
|
void *vend = vaddr + size;
|
|
|
- void *p;
|
|
|
+
|
|
|
+ if (p >= vend)
|
|
|
+ return;
|
|
|
|
|
|
mb();
|
|
|
|
|
|
- for (p = (void *)((unsigned long)vaddr & ~clflush_mask);
|
|
|
- p < vend; p += boot_cpu_data.x86_clflush_size)
|
|
|
+ for (; p < vend; p += clflush_size)
|
|
|
clflushopt(p);
|
|
|
|
|
|
mb();
|