From e84d42130297de428638dde7994f93c8a757c645 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 30 Jan 2008 13:34:08 +0100 Subject: [PATCH] --- yaml --- r: 80543 b: refs/heads/master c: 3b233e52f70bf102078b2c0c3f7f86a441689056 h: refs/heads/master i: 80541: 4dafbd0b503c8816052fe330be044ffa2c29b27f 80539: afd0431564c0d04c2d1ed942c78ad89937a6ca49 80535: bf66862884bf05859c93bb7a567e7e4841023c01 80527: 6d71f35bd48facfe9e11aa63bd3aaac0ce7a356e 80511: aa8bd81ff5f6279dee10df193b03f68d94ccb9c6 v: v3 --- [refs] | 2 +- trunk/arch/x86/mm/pageattr.c | 22 ++++++++-------------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index 796a9f59324c..308959b70691 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cd8ddf1a2800026dd58433333cce7a65cbc6c6d2 +refs/heads/master: 3b233e52f70bf102078b2c0c3f7f86a441689056 diff --git a/trunk/arch/x86/mm/pageattr.c b/trunk/arch/x86/mm/pageattr.c index 90b658ac39c2..bbfc8e2466ab 100644 --- a/trunk/arch/x86/mm/pageattr.c +++ b/trunk/arch/x86/mm/pageattr.c @@ -64,35 +64,29 @@ static void cpa_flush_all(void) on_each_cpu(__cpa_flush_all, NULL, 1, 1); } -struct clflush_data { - unsigned long addr; - int numpages; -}; - static void __cpa_flush_range(void *arg) { - struct clflush_data *cld = arg; - /* * We could optimize that further and do individual per page * tlb invalidates for a low number of pages. Caveat: we must * flush the high aliases on 64bit as well. */ __flush_tlb_all(); - - clflush_cache_range((void *) cld->addr, cld->numpages * PAGE_SIZE); } static void cpa_flush_range(unsigned long addr, int numpages) { - struct clflush_data cld; - BUG_ON(irqs_disabled()); - cld.addr = addr; - cld.numpages = numpages; + on_each_cpu(__cpa_flush_range, NULL, 1, 1); - on_each_cpu(__cpa_flush_range, &cld, 1, 1); + /* + * We only need to flush on one CPU, + * clflush is a MESI-coherent instruction that + * will cause all other CPUs to flush the same + * cachelines: + */ + clflush_cache_range((void *) addr, numpages * PAGE_SIZE); } /*