[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210223154758.GF1741768@linux.ibm.com>
Date: Tue, 23 Feb 2021 17:47:58 +0200
From: Mike Rapoport <rppt@...ux.ibm.com>
To: George Kennedy <george.kennedy@...cle.com>
Cc: David Hildenbrand <david@...hat.com>,
Andrey Konovalov <andreyknvl@...gle.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Catalin Marinas <catalin.marinas@....com>,
Vincenzo Frascino <vincenzo.frascino@....com>,
Dmitry Vyukov <dvyukov@...gle.com>,
Konrad Rzeszutek Wilk <konrad@...nok.org>,
Will Deacon <will.deacon@....com>,
Andrey Ryabinin <aryabinin@...tuozzo.com>,
Alexander Potapenko <glider@...gle.com>,
Marco Elver <elver@...gle.com>,
Peter Collingbourne <pcc@...gle.com>,
Evgenii Stepanov <eugenis@...gle.com>,
Branislav Rankov <Branislav.Rankov@....com>,
Kevin Brodsky <kevin.brodsky@....com>,
Christoph Hellwig <hch@...radead.org>,
kasan-dev <kasan-dev@...glegroups.com>,
Linux ARM <linux-arm-kernel@...ts.infradead.org>,
Linux Memory Management List <linux-mm@...ck.org>,
LKML <linux-kernel@...r.kernel.org>,
Dhaval Giani <dhaval.giani@...cle.com>
Subject: Re: [PATCH] mm, kasan: don't poison boot memory
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.
Powered by blists - more mailing lists