| 
									
										
										
										
											2007-10-15 23:28:20 +02:00
										 |  |  | #ifndef _ASM_X86_CACHEFLUSH_H
 | 
					
						
							|  |  |  | #define _ASM_X86_CACHEFLUSH_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Keep includes the same across arches.  */ | 
					
						
							|  |  |  | #include <linux/mm.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Caches aren't brain-dead on the intel. */ | 
					
						
							|  |  |  | #define flush_cache_all()			do { } while (0)
 | 
					
						
							|  |  |  | #define flush_cache_mm(mm)			do { } while (0)
 | 
					
						
							|  |  |  | #define flush_cache_dup_mm(mm)			do { } while (0)
 | 
					
						
							|  |  |  | #define flush_cache_range(vma, start, end)	do { } while (0)
 | 
					
						
							|  |  |  | #define flush_cache_page(vma, vmaddr, pfn)	do { } while (0)
 | 
					
						
							|  |  |  | #define flush_dcache_page(page)			do { } while (0)
 | 
					
						
							|  |  |  | #define flush_dcache_mmap_lock(mapping)		do { } while (0)
 | 
					
						
							|  |  |  | #define flush_dcache_mmap_unlock(mapping)	do { } while (0)
 | 
					
						
							|  |  |  | #define flush_icache_range(start, end)		do { } while (0)
 | 
					
						
							|  |  |  | #define flush_icache_page(vma,pg)		do { } while (0)
 | 
					
						
							|  |  |  | #define flush_icache_user_range(vma,pg,adr,len)	do { } while (0)
 | 
					
						
							|  |  |  | #define flush_cache_vmap(start, end)		do { } while (0)
 | 
					
						
							|  |  |  | #define flush_cache_vunmap(start, end)		do { } while (0)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \
 | 
					
						
							|  |  |  | 	memcpy(dst, src, len) | 
					
						
							|  |  |  | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \
 | 
					
						
							|  |  |  | 	memcpy(dst, src, len) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:34:06 +01:00
										 |  |  | int __deprecated_for_modules change_page_attr(struct page *page, int numpages, | 
					
						
							|  |  |  | 								pgprot_t prot); | 
					
						
							| 
									
										
										
											
												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>
											
										 
											2008-01-30 13:34:06 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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); | 
					
						
							| 
									
										
										
										
											2008-01-30 13:34:07 +01:00
										 |  |  | int set_memory_np(unsigned long addr, int numpages); | 
					
						
							| 
									
										
										
											
												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>
											
										 
											2008-01-30 13:34:06 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:34:09 +01:00
										 |  |  | void clflush_cache_range(void *addr, unsigned int size); | 
					
						
							| 
									
										
										
										
											2007-10-15 23:28:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-09 23:24:09 +01:00
										 |  |  | void cpa_init(void); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-15 23:28:20 +02:00
										 |  |  | #ifdef CONFIG_DEBUG_RODATA
 | 
					
						
							|  |  |  | void mark_rodata_ro(void); | 
					
						
							| 
									
										
										
										
											2008-02-12 12:12:01 -08:00
										 |  |  | extern const int rodata_test_data; | 
					
						
							| 
									
										
										
										
											2007-10-15 23:28:20 +02:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2008-02-12 12:12:01 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:34:08 +01:00
										 |  |  | #ifdef CONFIG_DEBUG_RODATA_TEST
 | 
					
						
							| 
									
										
										
										
											2008-02-12 12:12:01 -08:00
										 |  |  | int rodata_test(void); | 
					
						
							| 
									
										
										
										
											2008-01-30 13:34:08 +01:00
										 |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2008-02-12 12:12:01 -08:00
										 |  |  | static inline int rodata_test(void) | 
					
						
							| 
									
										
										
										
											2008-01-30 13:34:08 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2008-02-12 12:12:01 -08:00
										 |  |  | 	return 0; | 
					
						
							| 
									
										
										
										
											2008-01-30 13:34:08 +01:00
										 |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2007-10-15 23:28:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-11 11:20:03 +02:00
										 |  |  | #endif
 |