efi: Use efi_mm in x86 as well as ARM

Presently, only ARM uses mm_struct to manage EFI page tables and EFI
runtime region mappings. As this is the preferred approach, let's make
this data structure common across architectures. Specially, for x86,
using this data structure improves code maintainability and readability.

Tested-by: Bhupesh Sharma <bhsharma@redhat.com>
[ardb: don't #include the world to get a declaration of struct mm_struct]
Signed-off-by: Sai Praneeth Prakhya <sai.praneeth.prakhya@intel.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Matt Fleming <matt@codeblueprint.co.uk>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Lee, Chun-Yi <jlee@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Shankar <ravi.v.shankar@intel.com>
Cc: Ricardo Neri <ricardo.neri@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Luck <tony.luck@intel.com>
Cc: linux-efi@vger.kernel.org
Link: http://lkml.kernel.org/r/20180312084500.10764-2-ard.biesheuvel@linaro.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
Sai Praneeth 2018-03-12 08:44:56 +00:00 коммит произвёл Ingo Molnar
Родитель b0599e2801
Коммит 7e904a91bf
5 изменённых файлов: 15 добавлений и 9 удалений

Просмотреть файл

@ -7,6 +7,7 @@
#include <asm/processor-flags.h> #include <asm/processor-flags.h>
#include <asm/tlb.h> #include <asm/tlb.h>
#include <asm/nospec-branch.h> #include <asm/nospec-branch.h>
#include <asm/mmu_context.h>
/* /*
* We map the EFI regions needed for runtime services non-contiguously, * We map the EFI regions needed for runtime services non-contiguously,

Просмотреть файл

@ -233,6 +233,9 @@ int __init efi_alloc_page_tables(void)
return -ENOMEM; return -ENOMEM;
} }
mm_init_cpumask(&efi_mm);
init_new_context(NULL, &efi_mm);
return 0; return 0;
} }

Просмотреть файл

@ -31,15 +31,6 @@
extern u64 efi_system_table; extern u64 efi_system_table;
static struct mm_struct efi_mm = {
.mm_rb = RB_ROOT,
.mm_users = ATOMIC_INIT(2),
.mm_count = ATOMIC_INIT(1),
.mmap_sem = __RWSEM_INITIALIZER(efi_mm.mmap_sem),
.page_table_lock = __SPIN_LOCK_UNLOCKED(efi_mm.page_table_lock),
.mmlist = LIST_HEAD_INIT(efi_mm.mmlist),
};
#ifdef CONFIG_ARM64_PTDUMP_DEBUGFS #ifdef CONFIG_ARM64_PTDUMP_DEBUGFS
#include <asm/ptdump.h> #include <asm/ptdump.h>

Просмотреть файл

@ -75,6 +75,15 @@ static unsigned long *efi_tables[] = {
&efi.mem_attr_table, &efi.mem_attr_table,
}; };
struct mm_struct efi_mm = {
.mm_rb = RB_ROOT,
.mm_users = ATOMIC_INIT(2),
.mm_count = ATOMIC_INIT(1),
.mmap_sem = __RWSEM_INITIALIZER(efi_mm.mmap_sem),
.page_table_lock = __SPIN_LOCK_UNLOCKED(efi_mm.page_table_lock),
.mmlist = LIST_HEAD_INIT(efi_mm.mmlist),
};
static bool disable_runtime; static bool disable_runtime;
static int __init setup_noefi(char *arg) static int __init setup_noefi(char *arg)
{ {

Просмотреть файл

@ -966,6 +966,8 @@ extern struct efi {
unsigned long flags; unsigned long flags;
} efi; } efi;
extern struct mm_struct efi_mm;
static inline int static inline int
efi_guidcmp (efi_guid_t left, efi_guid_t right) efi_guidcmp (efi_guid_t left, efi_guid_t right)
{ {