Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1258418

[tip:core/efi] efi: Use correct type for struct efi_memory_map:: phys_map

From tip-bot for Ard Biesheuvel <tipbot@zytor.com>
Newsgroups linux.kernel
Subject [tip:core/efi] efi: Use correct type for struct efi_memory_map:: phys_map
Date 2015-10-28 22:00 +0100
Message-ID <qoFZ8-7Bh-13@gated-at.bofh.it> (permalink)
References <qmH8Z-5X0-7@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Commit-ID:  44511fb9e55ada760822b0b0d7be9d150576f17f
Gitweb:     http://git.kernel.org/tip/44511fb9e55ada760822b0b0d7be9d150576f17f
Author:     Ard Biesheuvel <ard.biesheuvel@linaro.org>
AuthorDate: Fri, 23 Oct 2015 11:48:16 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Wed, 28 Oct 2015 12:28:06 +0100

efi: Use correct type for struct efi_memory_map::phys_map

We have been getting away with using a void* for the physical
address of the UEFI memory map, since, even on 32-bit platforms
with 64-bit physical addresses, no truncation takes place if the
memory map has been allocated by the firmware (which only uses
1:1 virtually addressable memory), which is usually the case.

However, commit:

  0f96a99dab36 ("efi: Add "efi_fake_mem" boot option")

adds code that clones and modifies the UEFI memory map, and the
clone may live above 4 GB on 32-bit platforms.

This means our use of void* for struct efi_memory_map::phys_map has
graduated from 'incorrect but working' to 'incorrect and
broken', and we need to fix it.

So redefine struct efi_memory_map::phys_map as phys_addr_t, and
get rid of a bunch of casts that are now unneeded.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Matt Fleming <matt@codeblueprint.co.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: izumi.taku@jp.fujitsu.com
Cc: kamezawa.hiroyu@jp.fujitsu.com
Cc: linux-efi@vger.kernel.org
Cc: matt.fleming@intel.com
Link: http://lkml.kernel.org/r/1445593697-1342-1-git-send-email-ard.biesheuvel@linaro.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/arm64/kernel/efi.c     | 4 ++--
 arch/x86/platform/efi/efi.c | 4 ++--
 drivers/firmware/efi/efi.c  | 8 ++++----
 include/linux/efi.h         | 2 +-
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
index 4b7df34..61eb1d1 100644
--- a/arch/arm64/kernel/efi.c
+++ b/arch/arm64/kernel/efi.c
@@ -208,7 +208,7 @@ void __init efi_init(void)
 
 	memblock_reserve(params.mmap & PAGE_MASK,
 			 PAGE_ALIGN(params.mmap_size + (params.mmap & ~PAGE_MASK)));
-	memmap.phys_map = (void *)params.mmap;
+	memmap.phys_map = params.mmap;
 	memmap.map = early_memremap(params.mmap, params.mmap_size);
 	memmap.map_end = memmap.map + params.mmap_size;
 	memmap.desc_size = params.desc_size;
@@ -282,7 +282,7 @@ static int __init arm64_enable_runtime_services(void)
 	pr_info("Remapping and enabling EFI services.\n");
 
 	mapsize = memmap.map_end - memmap.map;
-	memmap.map = (__force void *)ioremap_cache((phys_addr_t)memmap.phys_map,
+	memmap.map = (__force void *)ioremap_cache(memmap.phys_map,
 						   mapsize);
 	if (!memmap.map) {
 		pr_err("Failed to remap EFI memory map\n");
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
index 3e1d09e..ad28540 100644
--- a/arch/x86/platform/efi/efi.c
+++ b/arch/x86/platform/efi/efi.c
@@ -194,7 +194,7 @@ static void __init do_add_efi_memmap(void)
 int __init efi_memblock_x86_reserve_range(void)
 {
 	struct efi_info *e = &boot_params.efi_info;
-	unsigned long pmap;
+	phys_addr_t pmap;
 
 	if (efi_enabled(EFI_PARAVIRT))
 		return 0;
@@ -209,7 +209,7 @@ int __init efi_memblock_x86_reserve_range(void)
 #else
 	pmap = (e->efi_memmap |	((__u64)e->efi_memmap_hi << 32));
 #endif
-	memmap.phys_map		= (void *)pmap;
+	memmap.phys_map		= pmap;
 	memmap.nr_map		= e->efi_memmap_size /
 				  e->efi_memdesc_size;
 	memmap.desc_size	= e->efi_memdesc_size;
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
index 31fc864..027ca21 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
@@ -254,7 +254,7 @@ subsys_initcall(efisubsys_init);
 int __init efi_mem_desc_lookup(u64 phys_addr, efi_memory_desc_t *out_md)
 {
 	struct efi_memory_map *map = efi.memmap;
-	void *p, *e;
+	phys_addr_t p, e;
 
 	if (!efi_enabled(EFI_MEMMAP)) {
 		pr_err_once("EFI_MEMMAP is not enabled.\n");
@@ -286,10 +286,10 @@ int __init efi_mem_desc_lookup(u64 phys_addr, efi_memory_desc_t *out_md)
 		 * So just always get our own virtual map on the CPU.
 		 *
 		 */
-		md = early_memremap((phys_addr_t)p, sizeof (*md));
+		md = early_memremap(p, sizeof (*md));
 		if (!md) {
-			pr_err_once("early_memremap(%p, %zu) failed.\n",
-				    p, sizeof (*md));
+			pr_err_once("early_memremap(%pa, %zu) failed.\n",
+				    &p, sizeof (*md));
 			return -ENOMEM;
 		}
 
diff --git a/include/linux/efi.h b/include/linux/efi.h
index 4d01c10..569b5a8 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -680,7 +680,7 @@ typedef struct {
 } efi_system_table_t;
 
 struct efi_memory_map {
-	void *phys_map;
+	phys_addr_t phys_map;
 	void *map;
 	void *map_end;
 	int nr_map;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v2] efi: Fix warning of int-to-pointer-cast on x86 32-bit builds Taku Izumi <izumi.taku@jp.fujitsu.com> - 2015-10-23 02:50 +0200
  Re: [PATCH v2] efi: Fix warning of int-to-pointer-cast on x86 32-bit builds Ard Biesheuvel <ard.biesheuvel@linaro.org> - 2015-10-23 10:40 +0200
    Re: [PATCH v2] efi: Fix warning of int-to-pointer-cast on x86 32-bit  builds Ingo Molnar <mingo@kernel.org> - 2015-10-23 11:00 +0200
      [PATCH 1/2] efi: use correct type for struct efi_memory_map::phys_map Ard Biesheuvel <ard.biesheuvel@linaro.org> - 2015-10-23 11:50 +0200
        [PATCH 2/2] efi: Fix warning of int-to-pointer-cast on x86 32-bit builds Ard Biesheuvel <ard.biesheuvel@linaro.org> - 2015-10-23 11:50 +0200
          Re: [PATCH 2/2] efi: Fix warning of int-to-pointer-cast on x86  32-bit builds Ingo Molnar <mingo@kernel.org> - 2015-10-23 12:30 +0200
            Re: [PATCH 2/2] efi: Fix warning of int-to-pointer-cast on x86  32-bit builds Ingo Molnar <mingo@kernel.org> - 2015-10-23 12:40 +0200
              Re: [PATCH 2/2] efi: Fix warning of int-to-pointer-cast on x86  32-bit builds Ingo Molnar <mingo@kernel.org> - 2015-10-23 12:40 +0200
                Re: [PATCH 2/2] efi: Fix warning of int-to-pointer-cast on x86  32-bit builds Matt Fleming <matt@codeblueprint.co.uk> - 2015-10-27 22:20 +0100
                Re: [PATCH 2/2] efi: Fix warning of int-to-pointer-cast on x86  32-bit builds Ingo Molnar <mingo@kernel.org> - 2015-10-28 12:40 +0100
          Re: [PATCH 2/2] efi: Fix warning of int-to-pointer-cast on x86  32-bit builds Matt Fleming <matt@codeblueprint.co.uk> - 2015-10-27 22:20 +0100
          [tip:core/efi] efi:   Fix warning of int-to-pointer-cast on x86 32-bit builds tip-bot for Taku Izumi <tipbot@zytor.com> - 2015-10-28 22:00 +0100
        Re: [PATCH 1/2] efi: use correct type for struct  efi_memory_map::phys_map Matt Fleming <matt@codeblueprint.co.uk> - 2015-10-27 22:10 +0100
        [tip:core/efi] efi: Use correct type for struct efi_memory_map::  phys_map tip-bot for Ard Biesheuvel <tipbot@zytor.com> - 2015-10-28 22:00 +0100
    Re: [PATCH v2] efi: Fix warning of int-to-pointer-cast on x86 32-bit  builds Matt Fleming <matt@codeblueprint.co.uk> - 2015-10-26 22:10 +0100
      Re: [PATCH v2] efi: Fix warning of int-to-pointer-cast on x86 32-bit builds Ard Biesheuvel <ard.biesheuvel@linaro.org> - 2015-10-27 03:40 +0100
        Re: [PATCH v2] efi: Fix warning of int-to-pointer-cast on x86 32-bit  builds Matt Fleming <matt@codeblueprint.co.uk> - 2015-10-27 22:10 +0100
  Re: [PATCH v2] efi: Fix warning of int-to-pointer-cast on x86 32-bit  builds Ingo Molnar <mingo@kernel.org> - 2015-10-23 10:50 +0200

csiph-web