i386: --- arch/i386/mm/pageattr.c | 10 ++++++++++ include/asm-i386/cacheflush.h | 1 + 2 files changed, 11 insertions(+) Index: linux/arch/i386/mm/pageattr.c =================================================================== --- linux.orig/arch/i386/mm/pageattr.c +++ linux/arch/i386/mm/pageattr.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -207,6 +208,17 @@ int change_page_attr(struct page *page, return err; } +int change_page_attr_addr(unsigned long addr, int numpages, pgprot_t prot) +{ + unsigned long pfn = addr >> PAGE_SHIFT; + int err = 0; + if (pfn < max_low_pfn) { + err = change_page_attr(pfn_to_page(pfn), + min_t(unsigned,numpages,max_low_pfn-pfn), prot); + } + return err; +} + void global_flush_tlb(void) { struct list_head l; Index: linux/include/asm-i386/cacheflush.h =================================================================== --- linux.orig/include/asm-i386/cacheflush.h +++ linux/include/asm-i386/cacheflush.h @@ -25,6 +25,7 @@ void global_flush_tlb(void); int change_page_attr(struct page *page, int numpages, pgprot_t prot); +int change_page_attr_addr(unsigned long pfn, int numpages, pgprot_t prot); #ifdef CONFIG_DEBUG_PAGEALLOC /* internal debugging function */