summaryrefslogtreecommitdiffstats
path: root/include/asm-x86/cacheflush.h
diff options
context:
space:
mode:
authorArjan van de Ven <arjan@infradead.org>2008-01-30 13:34:06 +0100
committerIngo Molnar <mingo@elte.hu>2008-01-30 13:34:06 +0100
commit75cbade8ea3127a84e3da7c2c15808e54f0df7e8 (patch)
treeb91fd5e8f9f5f8da0da55a7783c70fc3149cbf2d /include/asm-x86/cacheflush.h
parente81d5dc41b67349c06e80658227c9156738f0df1 (diff)
downloadlinux-75cbade8ea3127a84e3da7c2c15808e54f0df7e8.tar.gz
linux-75cbade8ea3127a84e3da7c2c15808e54f0df7e8.tar.bz2
linux-75cbade8ea3127a84e3da7c2c15808e54f0df7e8.zip
x86: a new API for drivers/etc to control cache and other page attributes
Right now, if drivers or other code want to change, say, a cache attribute of a page, the only API they have is change_page_attr(). c-p-a is a really bad API for this, because it forces the caller to know *ALL* the attributes he wants for the page, not just the 1 thing he wants to change. So code that wants to set a page uncachable, needs to be aware of the NX status as well etc etc etc. This patch introduces a set of new APIs for this, set_pages_<attr> and set_memory_<attr>, that offer a logical change to the user, and leave all attributes not implied by the requested logical change alone. Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/asm-x86/cacheflush.h')
-rw-r--r--include/asm-x86/cacheflush.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/include/asm-x86/cacheflush.h b/include/asm-x86/cacheflush.h
index fccb563e2305..7b928d55c190 100644
--- a/include/asm-x86/cacheflush.h
+++ b/include/asm-x86/cacheflush.h
@@ -27,6 +27,21 @@
void global_flush_tlb(void);
int change_page_attr(struct page *page, int numpages, pgprot_t prot);
int change_page_attr_addr(unsigned long addr, int numpages, pgprot_t prot);
+
+int set_pages_uc(struct page *page, int numpages);
+int set_pages_wb(struct page *page, int numpages);
+int set_pages_x(struct page *page, int numpages);
+int set_pages_nx(struct page *page, int numpages);
+int set_pages_ro(struct page *page, int numpages);
+int set_pages_rw(struct page *page, int numpages);
+
+int set_memory_uc(unsigned long addr, int numpages);
+int set_memory_wb(unsigned long addr, int numpages);
+int set_memory_x(unsigned long addr, int numpages);
+int set_memory_nx(unsigned long addr, int numpages);
+int set_memory_ro(unsigned long addr, int numpages);
+int set_memory_rw(unsigned long addr, int numpages);
+
void clflush_cache_range(void *addr, int size);
#ifdef CONFIG_DEBUG_RODATA