void __init x86_report_nx(void)
{
+ int nx_emulation = 0;
+
if (!cpu_has_nx) {
-#ifdef CONFIG_X86_32
- if (!disable_nx)
- printk(KERN_INFO "NX (Execute Disable) protection: "
- "approximated by x86 segment limits\n");
- else
- printk(KERN_INFO "NX (Execute Disable) protection: "
- "approximation disabled by kernel command "
- "line option\n");
-#else
printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
"missing in CPU!\n");
-#endif
+ nx_emulation = 1;
} else {
#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
if (disable_nx) {
#else
/* 32bit non-PAE kernel, NX cannot be used */
printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
- "cannot be enabled: non-PAE kernel!\n");
+ "cannot be enabled in hardware: non-PAE kernel!\n");
+ nx_emulation = 1;
+#endif
+ }
+
+ if (nx_emulation) {
+#ifdef CONFIG_X86_32
+ if (!disable_nx)
+ printk(KERN_INFO "NX (Execute Disable) protection: "
+ "approximated by x86 segment limits\n");
+ else
+ printk(KERN_INFO "NX (Execute Disable) protection: "
+ "approximation disabled by kernel command "
+ "line option\n");
#endif
}
}