tree: https://git.kernel.org/pub/scm/linux/kernel/git/efi/efi.git next head: 4543fea0423b221d6d77224c595d73797ff958c7 commit: 4543fea0423b221d6d77224c595d73797ff958c7 [8/8] acpi: bgrt: parse BGRT to obtain BMP address before it gets clobbered config: i386-randconfig-b0-02011955 (attached as .config) compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4 reproduce: git checkout 4543fea0423b221d6d77224c595d73797ff958c7 # save the attached .config to linux build tree make ARCH=i386 All warnings (new ones prefixed by >>): In file included from arch/x86/include/asm/string.h:3:0, from include/linux/string.h:20, from arch/x86/include/asm/page_32.h:35, from arch/x86/include/asm/page.h:14, from arch/x86/include/asm/thread_info.h:12, from include/linux/thread_info.h:38, from arch/x86/include/asm/preempt.h:7, from include/linux/preempt.h:78, from include/linux/spinlock.h:51, from include/linux/mmzone.h:8, from include/linux/gfp.h:6, from include/linux/slab.h:15, from include/linux/resource_ext.h:19, from include/linux/acpi.h:26, from drivers/firmware//efi/efi-bgrt.c:18: drivers/firmware//efi/efi-bgrt.c: In function 'efi_bgrt_init': include/linux/kernel.h:846:29: warning: comparison of distinct pointer types lacks a cast (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1))) ^ arch/x86/include/asm/string_32.h:183:48: note: in definition of macro 'memcpy' #define memcpy(t, f, n) __builtin_memcpy(t, f, n) ^ include/linux/kernel.h:860:4: note: in expansion of macro '__typecheck' (__typecheck(x, y) && __no_side_effects(x, y)) ^ include/linux/kernel.h:870:24: note: in expansion of macro '__safe_cmp' __builtin_choose_expr(__safe_cmp(x, y), \ ^ include/linux/kernel.h:879:19: note: in expansion of macro '__careful_cmp' #define min(x, y) __careful_cmp(x, y, <) ^ >> drivers/firmware//efi/efi-bgrt.c:109:22: note: in expansion of macro 'min' memcpy(bgrt, table, min(len, sizeof(bgrt_tab))); ^ vim +/min +109 drivers/firmware//efi/efi-bgrt.c 29 30 void __init efi_bgrt_init(unsigned long rsdp_phys) 31 { 32 void *image; 33 struct bmp_header bmp_header; 34 struct acpi_table_bgrt *bgrt = &bgrt_tab; 35 struct acpi_table_bgrt *table = NULL; 36 struct acpi_table_rsdp *rsdp; 37 struct acpi_table_header *hdr; 38 u64 xsdt_phys = 0; 39 u32 rsdt_phys = 0; 40 unsigned long len; 41 42 if (!efi_enabled(EFI_MEMMAP)) 43 return; 44 45 /* map the root pointer table to find the xsdt/rsdt values */ 46 rsdp = early_memremap_ro(rsdp_phys, sizeof(*rsdp)); 47 if (rsdp) { 48 if (ACPI_VALIDATE_RSDP_SIG(rsdp->signature)) { 49 xsdt_phys = rsdp->xsdt_physical_address; 50 rsdt_phys = rsdp->rsdt_physical_address; 51 } 52 early_memunmap(rsdp, sizeof(*rsdp)); 53 } 54 55 if (WARN_ON(!xsdt_phys && !rsdt_phys)) 56 return; 57 58 /* obtain the length of whichever table we will be using */ 59 hdr = early_memremap_ro(xsdt_phys ?: rsdt_phys, sizeof(*hdr)); 60 if (WARN_ON(!hdr)) 61 return; 62 len = hdr->length; 63 early_memunmap(hdr, sizeof(*hdr)); 64 65 /* remap with the correct length */ 66 hdr = early_memremap_ro(xsdt_phys ?: rsdt_phys, len); 67 if (WARN_ON(!hdr)) 68 return; 69 70 if (xsdt_phys) { 71 struct acpi_table_xsdt *xsdt = (void *)hdr; 72 int i; 73 74 for (i = 0; i < (len - sizeof(*hdr)) / sizeof(u64); i++) { 75 table = early_memremap_ro(xsdt->table_offset_entry[i], 76 sizeof(*table)); 77 if (WARN_ON(!table)) 78 break; 79 80 if (ACPI_COMPARE_NAME(table->header.signature, 81 ACPI_SIG_BGRT)) 82 break; 83 early_memunmap(table, sizeof(*table)); 84 table = NULL; 85 } 86 } else if (rsdt_phys) { 87 struct acpi_table_rsdt *rsdt = (void *)hdr; 88 int i; 89 90 for (i = 0; i < (len - sizeof(*hdr)) / sizeof(u32); i++) { 91 table = early_memremap_ro(rsdt->table_offset_entry[i], 92 sizeof(*table)); 93 if (WARN_ON(!table)) 94 break; 95 96 if (ACPI_COMPARE_NAME(table->header.signature, 97 ACPI_SIG_BGRT)) 98 break; 99 early_memunmap(table, sizeof(*table)); 100 table = NULL; 101 } 102 } 103 early_memunmap(hdr, len); 104 105 if (!table) 106 return; 107 108 len = table->header.length; > 109 memcpy(bgrt, table, min(len, sizeof(bgrt_tab))); --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip