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-allyesconfig (attached as .config) compiler: gcc-8 (Debian 8.2.0-14) 8.2.0 reproduce: git checkout 4543fea0423b221d6d77224c595d73797ff958c7 # save the attached .config to linux build tree make ARCH=i386
All warnings (new ones prefixed by >>):
drivers/firmware/efi/efi-bgrt.c: In function 'efi_bgrt_init':
>> drivers/firmware/efi/efi-bgrt.c:109:73: warning: comparison of distinct
>> pointer types lacks a cast
memcpy(bgrt, table, min(len, sizeof(bgrt_tab)));
^
vim +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
.config.gz
Description: application/gzip
