mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 20:53:53 +08:00
x86: clflush_page_range needs mfence
clflush is an unordered operation with respect to other memory traffic, including other CLFLUSH instructions. This needs proper fencing with mfence. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
af1e6844d6
commit
cd8ddf1a28
@ -25,12 +25,24 @@ within(unsigned long addr, unsigned long start, unsigned long end)
|
||||
/*
|
||||
* Flushing functions
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* clflush_cache_range - flush a cache range with clflush
|
||||
* @addr: virtual start address
|
||||
* @size: number of bytes to flush
|
||||
*
|
||||
* clflush is an unordered instruction which needs fencing with mfence
|
||||
* to avoid ordering issues.
|
||||
*/
|
||||
void clflush_cache_range(void *addr, int size)
|
||||
{
|
||||
int i;
|
||||
|
||||
mb();
|
||||
for (i = 0; i < size; i += boot_cpu_data.x86_clflush_size)
|
||||
clflush(addr+i);
|
||||
mb();
|
||||
}
|
||||
|
||||
static void __cpa_flush_all(void *arg)
|
||||
|
Loading…
Reference in New Issue
Block a user