Hi George, On Tue, Feb 23, 2021 at 09:35:32AM -0500, George Kennedy wrote: > > On 2/23/2021 5:33 AM, Mike Rapoport wrote: > > (re-added CC) > > > > On Mon, Feb 22, 2021 at 08:24:59PM -0500, George Kennedy wrote: > > > On 2/22/2021 4:55 PM, Mike Rapoport wrote: > > > > On Mon, Feb 22, 2021 at 01:42:56PM -0500, George Kennedy wrote: > > > > > On 2/22/2021 11:13 AM, David Hildenbrand wrote: > > > > > > On 22.02.21 16:13, George Kennedy wrote: > > > > > > > > > > > > The PFN 0xbe453 looks a little strange, though. Do we expect ACPI tables > > > > > > close to 3 GiB ? No idea. Could it be that you are trying to map a wrong > > > > > > table? Just a guess. > > > > > > > > > > > > > What would be the correct way to reserve the page so that the above > > > > > > > would not be hit? > > > > > > I would have assumed that if this is a binary blob, that someone (which > > > > > > I think would be acpi code) reserved via memblock_reserve() early during > > > > > > boot. > > > > > > > > > > > > E.g., see drivers/acpi/tables.c:acpi_table_upgrade()->memblock_reserve(). > > > > > acpi_table_upgrade() gets called, but bails out before memblock_reserve() is > > > > > called. Thus, it appears no pages are getting reserved. > > > > acpi_table_upgrade() does not actually reserve memory but rather open > > > > codes memblock allocation with memblock_find_in_range() + > > > > memblock_reserve(), so it does not seem related anyway. > > > > > > > > Do you have by chance a full boot log handy? > > > Hello Mike, > > > > > > Are you after the console output? See attached. > > > > > > It includes my patch to set PG_Reserved along with the dump_page() debug > > > that David asked for - see: "page:" > > So, iBFT is indeed at pfn 0xbe453: > > > > [ 0.077698] ACPI: iBFT 0x00000000BE453000 000800 (v01 BOCHS BXPCFACP 00000000 00000000) > > and it's in E820_TYPE_RAM region rather than in ACPI data: > > > > [ 0.000000] BIOS-e820: [mem 0x0000000000810000-0x00000000008fffff] ACPI NVS > > [ 0.000000] BIOS-e820: [mem 0x0000000000900000-0x00000000be49afff] usable > > [ 0.000000] BIOS-e820: [mem 0x00000000be49b000-0x00000000be49bfff] ACPI data > > > > I could not find anywhere in x86 setup or in ACPI tables parsing the code > > that reserves this memory or any other ACPI data for that matter. It could > > be that I've missed some copying of the data to statically allocated > > initial_tables, but AFAICS any ACPI data that was not marked as such in > > e820 tables by BIOS resides in memory that is considered as free. > > > > Close... > > Applied the patch, see "[ 30.136157] iBFT detected.", but now hit the > following (missing iounmap()? see full console output attached): > > diff --git a/drivers/firmware/iscsi_ibft_find.c > b/drivers/firmware/iscsi_ibft_find.c > index 64bb945..2e5e040 100644 > --- a/drivers/firmware/iscsi_ibft_find.c > +++ b/drivers/firmware/iscsi_ibft_find.c > @@ -80,6 +80,21 @@ static int __init find_ibft_in_mem(void) > done: > return len; > } > + > +static void __init acpi_find_ibft_region(void) > +{ > + int i; > + struct acpi_table_header *table = NULL; > + > + if (acpi_disabled) > + return; > + > + for (i = 0; i < ARRAY_SIZE(ibft_signs) && !ibft_addr; i++) { > + acpi_get_table(ibft_signs[i].sign, 0, &table); > + ibft_addr = (struct acpi_table_ibft *)table; Can you try adding acpi_put_table(table); here? > + } > +} > + -- Sincerely yours, Mike.