init.c (fc8e1ead9314cf0e0f1922e661428b93d3a50d88) init.c (c44c9ec0f38b939b3200436e3aa95c1aa83c41c7)
1#include <linux/initrd.h>
2#include <linux/ioport.h>
3#include <linux/swap.h>
4
5#include <asm/cacheflush.h>
6#include <asm/e820.h>
7#include <asm/init.h>
8#include <asm/page.h>

--- 14 unchanged lines hidden (view full) ---

23int after_bootmem;
24
25int direct_gbpages
26#ifdef CONFIG_DIRECT_GBPAGES
27 = 1
28#endif
29;
30
1#include <linux/initrd.h>
2#include <linux/ioport.h>
3#include <linux/swap.h>
4
5#include <asm/cacheflush.h>
6#include <asm/e820.h>
7#include <asm/init.h>
8#include <asm/page.h>

--- 14 unchanged lines hidden (view full) ---

23int after_bootmem;
24
25int direct_gbpages
26#ifdef CONFIG_DIRECT_GBPAGES
27 = 1
28#endif
29;
30
31int nx_enabled;
32
33#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
34static int disable_nx __cpuinitdata;
35
36/*
37 * noexec = on|off
38 *
39 * Control non-executable mappings for processes.
40 *
41 * on Enable
42 * off Disable
43 */
44static int __init noexec_setup(char *str)
45{
46 if (!str)
47 return -EINVAL;
48 if (!strncmp(str, "on", 2)) {
49 __supported_pte_mask |= _PAGE_NX;
50 disable_nx = 0;
51 } else if (!strncmp(str, "off", 3)) {
52 disable_nx = 1;
53 __supported_pte_mask &= ~_PAGE_NX;
54 }
55 return 0;
56}
57early_param("noexec", noexec_setup);
58#endif
59
60#ifdef CONFIG_X86_PAE
61static void __init set_nx(void)
62{
63 unsigned int v[4], l, h;
64
65 if (cpu_has_pae && (cpuid_eax(0x80000000) > 0x80000001)) {
66 cpuid(0x80000001, &v[0], &v[1], &v[2], &v[3]);
67
68 if ((v[3] & (1 << 20)) && !disable_nx) {
69 rdmsr(MSR_EFER, l, h);
70 l |= EFER_NX;
71 wrmsr(MSR_EFER, l, h);
72 nx_enabled = 1;
73 __supported_pte_mask |= _PAGE_NX;
74 }
75 }
76}
77#else
78static inline void set_nx(void)
79{
80}
81#endif
82
83#ifdef CONFIG_X86_64
84void __cpuinit check_efer(void)
85{
86 unsigned long efer;
87
88 rdmsrl(MSR_EFER, efer);
89 if (!(efer & EFER_NX) || disable_nx)
90 __supported_pte_mask &= ~_PAGE_NX;
91}
92#endif
93
94static void __init find_early_table_space(unsigned long end, int use_pse,
95 int use_gbpages)
96{
97 unsigned long puds, pmds, ptes, tables, start;
98
99 puds = (end + PUD_SIZE - 1) >> PUD_SHIFT;
100 tables = roundup(puds * sizeof(pud_t), PAGE_SIZE);
101

--- 354 unchanged lines hidden ---
31static void __init find_early_table_space(unsigned long end, int use_pse,
32 int use_gbpages)
33{
34 unsigned long puds, pmds, ptes, tables, start;
35
36 puds = (end + PUD_SIZE - 1) >> PUD_SHIFT;
37 tables = roundup(puds * sizeof(pud_t), PAGE_SIZE);
38

--- 354 unchanged lines hidden ---