Messages in this thread Patch in this message | | | Date | Fri, 25 Jan 2008 10:16:55 +0100 | From | Ingo Molnar <> | Subject | Re: [PATCH 4/6] x86: fix some bugs about EFI runtime code mapping |
| |
* Huang, Ying <ying.huang@intel.com> wrote:
> This patch fixes some bugs of making EFI runtime code executable. > > - Use change_page_attr in i386 too. Because the runtime code may be > mapped not through ioremap. > > - If there is no _PAGE_NX in __supported_pte_mask, the change_page_attr > is not called. > > - Make efi_ioremap map pages as PAGE_KERNEL_EXEC, because EFI runtime > code may be mapped through efi_ioremap.
thanks, applied.
note that here:
> - set_fixmap_nocache(FIX_EFI_IO_MAP_FIRST_PAGE - pages_mapped, > - offset); > + __set_fixmap(FIX_EFI_IO_MAP_FIRST_PAGE - pages_mapped, > + offset, PAGE_KERNEL_EXEC);
you've changed it from nocache-noexec to cached-exec. I suspect that's what we want - except if an early EFI area can be non-prefetchable device memory. Can that ever happen? Would you like to have PAGE_KERNEL_NOCACHE_EXEC perhaps? I implemented that yesterday but did not commit it yet. (see the patch below)
Ingo
-----------------> Subject: x86: add PAGE_KERNEL_EXEC_NOCACHE From: Ingo Molnar <mingo@elte.hu>
add PAGE_KERNEL_EXEC_NOCACHE.
Signed-off-by: Ingo Molnar <mingo@elte.hu> --- include/asm-x86/pgtable.h | 2 ++ 1 file changed, 2 insertions(+)
Index: linux-x86.q/include/asm-x86/pgtable.h =================================================================== --- linux-x86.q.orig/include/asm-x86/pgtable.h +++ linux-x86.q/include/asm-x86/pgtable.h @@ -79,6 +79,7 @@ extern pteval_t __PAGE_KERNEL, __PAGE_KE #define __PAGE_KERNEL_RO (__PAGE_KERNEL & ~_PAGE_RW) #define __PAGE_KERNEL_RX (__PAGE_KERNEL_EXEC & ~_PAGE_RW) +#define __PAGE_KERNEL_EXEC_NOCACHE (__PAGE_KERNEL_EXEC | _PAGE_PCD | _PAGE_PWT) #define __PAGE_KERNEL_NOCACHE (__PAGE_KERNEL | _PAGE_PCD | _PAGE_PWT) #define __PAGE_KERNEL_VSYSCALL (__PAGE_KERNEL_RX | _PAGE_USER) #define __PAGE_KERNEL_VSYSCALL_NOCACHE (__PAGE_KERNEL_VSYSCALL | _PAGE_PCD | _PAGE_PWT) @@ -96,6 +97,7 @@ extern pteval_t __PAGE_KERNEL, __PAGE_KE #define PAGE_KERNEL_EXEC MAKE_GLOBAL(__PAGE_KERNEL_EXEC) #define PAGE_KERNEL_RX MAKE_GLOBAL(__PAGE_KERNEL_RX) #define PAGE_KERNEL_NOCACHE MAKE_GLOBAL(__PAGE_KERNEL_NOCACHE) +#define PAGE_KERNEL_EXEC_NOCACHE MAKE_GLOBAL(__PAGE_KERNEL_EXEC_NOCACHE) #define PAGE_KERNEL_LARGE MAKE_GLOBAL(__PAGE_KERNEL_LARGE) #define PAGE_KERNEL_LARGE_EXEC MAKE_GLOBAL(__PAGE_KERNEL_LARGE_EXEC) #define PAGE_KERNEL_VSYSCALL MAKE_GLOBAL(__PAGE_KERNEL_VSYSCALL)
| |