Re: [PATCH v7u1 03/31] x86, realmode: set real_mode permissions early
From: Borislav Petkov
Date: Fri Jan 04 2013 - 15:14:52 EST
On Thu, Jan 03, 2013 at 04:48:23PM -0800, Yinghai Lu wrote:
> Trampoline code is executed by APs with kernel low mapping.
> We need to set trampoline code to EXEC early before we do smp
> AP bootings.
"... before we boot the APs."
> Found the problem after switching to #PF handler set page table,
> and we do not set initial kernel low mapping with EXEC anymore in
"...table, since we do not make initial kernel low mapping executable
anymore, in ..."
> Change to use early_initcall instead that will make sure tramopline
> will have EXEC set.
> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>
> arch/x86/realmode/init.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
> diff --git a/arch/x86/realmode/init.c b/arch/x86/realmode/init.c
> index 8045026..b96fe6f 100644
> --- a/arch/x86/realmode/init.c
> +++ b/arch/x86/realmode/init.c
> @@ -111,5 +111,9 @@ static int __init set_real_mode_permissions(void)
> return 0;
> + * Trampoline will be executed by APs with SMP.
> + * So we need to set it to EXEC in do_pre_smp_initcalls() at least,
> + * and that needs early_initcall().
> + */
Now you have two conflicting comments, one over
set_real_mode_permissions() the one you're adding here. Let's merge them
into one (the diff is ontop of your patch).
diff --git a/arch/x86/realmode/init.c b/arch/x86/realmode/init.c
index b96fe6f54d2f..9eb0fa95881e 100644
@@ -84,10 +84,11 @@ void __init setup_real_mode(void)
- * set_real_mode_permissions() gets called very early, to guarantee the
- * availability of low memory. This is before the proper kernel page
- * tables are set up, so we cannot set page permissions in that
- * function. Thus, we use an arch_initcall instead.
+ * This function gets called very early to guarantee the availability
+ * of low memory. This is even before the proper kernel page tables are
+ * set up, so we cannot set page permissions in that function. However,
+ * trampoline code will be executed by APs so we need it to be marked
+ * executable at pre-SMP time, thus run it as a early_initcall().
static int __init set_real_mode_permissions(void)
@@ -111,9 +112,4 @@ static int __init set_real_mode_permissions(void)
- * Trampoline will be executed by APs with SMP.
- * So we need to set it to EXEC in do_pre_smp_initcalls() at least,
- * and that needs early_initcall().
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/