]>
Commit | Line | Data |
---|---|---|
b0c55c62 | 1 | diff -ru usr/src/nv/nv-vm.c usr/src/nv.1321905/nv-vm.c |
2 | --- usr/src/nv/nv-vm.c 2005-03-22 16:19:09.000000000 +0100 | |
3 | +++ usr/src/nv.1321905/nv-vm.c 2005-10-23 15:43:12.860170440 +0200 | |
4 | @@ -248,6 +248,20 @@ | |
5 | /* lock the page for dma purposes */ | |
6 | SetPageReserved(NV_GET_PAGE_STRUCT(phys_addr)); | |
7 | ||
8 | +#if defined(_PAGE_NX) | |
9 | + if ((_PAGE_NX & pgprot_val(PAGE_KERNEL)) != 0 && phys_addr < 0x400000) { | |
10 | + // Until a bug in change_page_attr() is fixed | |
11 | + // we avoid pages with physaddr < 0x400000, | |
12 | + // since splitting "jumbo" mappings results | |
13 | + // in kernel pages being mapped as PAGE_KERNEL, which | |
14 | + // may include _PAGE_NX, effectively making much of the | |
15 | + // kernel code non-executable. | |
16 | + nv_printf(NV_DBG_MEMINFO, "NVRM: nv_vm_malloc discarding page @%08x\n", phys_addr); | |
17 | + --i; | |
18 | + continue; | |
19 | + } | |
20 | +#endif | |
21 | + | |
22 | page_ptr = at->page_table[i]; | |
23 | page_ptr->phys_addr = phys_addr; | |
24 | page_ptr->virt_addr = virt_addr; |