mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: tip-bot for Andy Lutomirski <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: tglx@linutronix.de, luto@kernel.org, hpa@zytor.com,
	peterz@infradead.org, mario_limonciello@dell.com,
	brgerst@gmail.com, jpoimboe@redhat.com, mfleming@suse.de,
	mingo@kernel.org, dvlasenk@redhat.com, bp@alien8.de,
	linux-kernel@vger.kernel.org, torvalds@linux-foundation.org,
	mjg59@srcf.ucam.org
Subject: [tip:x86/urgent] x86/boot: Defer setup_real_mode() to early_initcall time
Date: Thu, 11 Aug 2016 04:58:48 -0700	[thread overview]
Message-ID: <tip-d0de0f685db7faf2ae4597a39a59996dd84e18c7@git.kernel.org> (raw)
In-Reply-To: <fd62f0da4f79357695e9bf3e365623736b05f119.1470821230.git.luto@kernel.org>

Commit-ID:  d0de0f685db7faf2ae4597a39a59996dd84e18c7
Gitweb:     http://git.kernel.org/tip/d0de0f685db7faf2ae4597a39a59996dd84e18c7
Author:     Andy Lutomirski <luto@kernel.org>
AuthorDate: Wed, 10 Aug 2016 02:29:15 -0700
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 11 Aug 2016 11:15:00 +0200

x86/boot: Defer setup_real_mode() to early_initcall time

There's no need to run setup_real_mode() as early as we run it.
Defer it to the same early_initcall that sets up the page
permissions for the real mode code.

This should be a code size reduction.  More importantly, it give us
a longer window in which we can allocate the real mode trampoline.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mario Limonciello <mario_limonciello@dell.com>
Cc: Matt Fleming <mfleming@suse.de>
Cc: Matthew Garrett <mjg59@srcf.ucam.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/fd62f0da4f79357695e9bf3e365623736b05f119.1470821230.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/include/asm/realmode.h |  1 -
 arch/x86/kernel/setup.c         |  2 --
 arch/x86/realmode/init.c        | 15 ++++++++++++---
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/arch/x86/include/asm/realmode.h b/arch/x86/include/asm/realmode.h
index 9c6b890..8d67777 100644
--- a/arch/x86/include/asm/realmode.h
+++ b/arch/x86/include/asm/realmode.h
@@ -59,6 +59,5 @@ extern unsigned char secondary_startup_64[];
 #endif
 
 void reserve_real_mode(void);
-void setup_real_mode(void);
 
 #endif /* _ARCH_X86_REALMODE_H */
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 95c8c9c..0fa60f5 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -1141,8 +1141,6 @@ void __init setup_arch(char **cmdline_p)
 		/* A CPU has %cr4 if and only if it has CPUID. */
 		mmu_cr4_features = __read_cr4();
 
-	setup_real_mode();
-
 	memblock_set_current_limit(get_max_mapped());
 
 	/*
diff --git a/arch/x86/realmode/init.c b/arch/x86/realmode/init.c
index c5bdc4e..747b71e 100644
--- a/arch/x86/realmode/init.c
+++ b/arch/x86/realmode/init.c
@@ -30,7 +30,7 @@ void __init reserve_real_mode(void)
 	       base, (unsigned long long)mem, size);
 }
 
-void __init setup_real_mode(void)
+static void __init setup_real_mode(void)
 {
 	u16 real_mode_seg;
 	const u32 *rel;
@@ -101,7 +101,7 @@ void __init setup_real_mode(void)
  * need to mark it executable at do_pre_smp_initcalls() at least,
  * thus run it as a early_initcall().
  */
-static int __init set_real_mode_permissions(void)
+static void __init set_real_mode_permissions(void)
 {
 	unsigned char *base = (unsigned char *) real_mode_header;
 	size_t size = PAGE_ALIGN(real_mode_blob_end - real_mode_blob);
@@ -120,7 +120,16 @@ static int __init set_real_mode_permissions(void)
 	set_memory_nx((unsigned long) base, size >> PAGE_SHIFT);
 	set_memory_ro((unsigned long) base, ro_size >> PAGE_SHIFT);
 	set_memory_x((unsigned long) text_start, text_size >> PAGE_SHIFT);
+}
+
+static int __init init_real_mode(void)
+{
+	if (!real_mode_header)
+		panic("Real mode trampoline was not allocated");
+
+	setup_real_mode();
+	set_real_mode_permissions();
 
 	return 0;
 }
-early_initcall(set_real_mode_permissions);
+early_initcall(init_real_mode);

  reply	other threads:[~2016-08-11 11:59 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-10  9:29 [PATCH v2 0/5] Allow the trampoline to use EFI boot services RAM Andy Lutomirski
2016-08-10  9:29 ` [PATCH v2 1/5] x86/boot: Run reserve_bios_regions() after we initialize the memory map Andy Lutomirski
2016-08-11 11:57   ` [tip:x86/urgent] " tip-bot for Andy Lutomirski
2016-08-10  9:29 ` [PATCH v2 2/5] x86/boot: Synchronize trampoline_cr4_features and mmu_cr4_features directly Andy Lutomirski
2016-08-11 11:58   ` [tip:x86/urgent] " tip-bot for Andy Lutomirski
2016-08-10  9:29 ` [PATCH v2 3/5] x86/boot: Defer setup_real_mode() to early_initcall time Andy Lutomirski
2016-08-11 11:58   ` tip-bot for Andy Lutomirski [this message]
2016-08-10  9:29 ` [PATCH v2 4/5] x86/boot: Rework reserve_real_mode() to allow multiple tries Andy Lutomirski
2016-08-11 11:59   ` [tip:x86/urgent] " tip-bot for Andy Lutomirski
2016-08-10  9:29 ` [PATCH v2 5/5] x86/efi: Allocate a trampoline if needed in efi_free_boot_services() Andy Lutomirski
2016-08-11 16:19   ` [tip:x86/urgent] " tip-bot for Andy Lutomirski
2016-08-10 12:28 ` [PATCH v2 0/5] Allow the trampoline to use EFI boot services RAM Ingo Molnar
2016-08-10 13:21   ` Andy Lutomirski
2016-08-10 16:08     ` Mario_Limonciello
2016-08-10 12:30 ` Ingo Molnar
2016-08-10 13:18   ` Andy Lutomirski
2016-08-11  8:52     ` Ingo Molnar
2016-08-11 10:36       ` Matt Fleming

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tip-d0de0f685db7faf2ae4597a39a59996dd84e18c7@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=bp@alien8.de \
    --cc=brgerst@gmail.com \
    --cc=dvlasenk@redhat.com \
    --cc=hpa@zytor.com \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mario_limonciello@dell.com \
    --cc=mfleming@suse.de \
    --cc=mingo@kernel.org \
    --cc=mjg59@srcf.ucam.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome