All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@linux.ibm.com>
To: George Kennedy <george.kennedy@oracle.com>
Cc: Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Marco Elver <elver@google.com>,
	Dhaval Giani <dhaval.giani@oracle.com>,
	David Hildenbrand <david@redhat.com>,
	Andrey Konovalov <andreyknvl@google.com>,
	Kevin Brodsky <kevin.brodsky@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	Branislav Rankov <Branislav.Rankov@arm.com>,
	kasan-dev <kasan-dev@googlegroups.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Christoph Hellwig <hch@infradead.org>,
	Andrey Ryabinin <aryabinin@virtuozzo.com>,
	Alexander Potapenko <glider@google.com>,
	Evgenii Stepanov <eugenis@google.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Konrad Rzeszutek Wilk <konrad@darnok.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Vincenzo Frascino <vincenzo.frascino@arm.com>,
	Peter Collingbourne <pcc@google.com>,
	Linux Memory Management List <linux-mm@kvack.org>,
	Dmitry Vyukov <dvyukov@google.com>
Subject: Re: [PATCH] mm, kasan: don't poison boot memory
Date: Fri, 26 Feb 2021 13:17:30 +0200	[thread overview]
Message-ID: <20210226111730.GL1854360@linux.ibm.com> (raw)
In-Reply-To: <dc5e007c-9223-b03b-1c58-28d2712ec352@oracle.com>

Hi George,

On Thu, Feb 25, 2021 at 08:19:18PM -0500, George Kennedy wrote:
> 
> Mike,
> 
> To get rid of the 0x00000000BE453000 hardcoding, I added the following patch
> to your above patch to get the iBFT table "address" to use with
> memblock_reserve():
> 
> diff --git a/drivers/acpi/acpica/tbfind.c b/drivers/acpi/acpica/tbfind.c
> index 56d81e4..4bc7bf3 100644
> --- a/drivers/acpi/acpica/tbfind.c
> +++ b/drivers/acpi/acpica/tbfind.c
> @@ -120,3 +120,34 @@
>      (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
>      return_ACPI_STATUS(status);
>  }
> +
> +acpi_physical_address
> +acpi_tb_find_table_address(char *signature)
> +{
> +    acpi_physical_address address = 0;
> +    struct acpi_table_desc *table_desc;
> +    int i;
> +
> +    ACPI_FUNCTION_TRACE(tb_find_table_address);
> +
> +printk(KERN_ERR "XXX acpi_tb_find_table_address: signature=%s\n",
> signature);
> +
> +    (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
> +    for (i = 0; i < acpi_gbl_root_table_list.current_table_count; ++i) {
> +        if (memcmp(&(acpi_gbl_root_table_list.tables[i].signature),
> +               signature, ACPI_NAMESEG_SIZE)) {
> +
> +            /* Not the requested table */
> +
> +            continue;
> +        }
> +
> +        /* Table with matching signature has been found */
> +        table_desc = &acpi_gbl_root_table_list.tables[i];
> +        address = table_desc->address;
> +    }
> +
> +    (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
> +printk(KERN_ERR "XXX acpi_tb_find_table_address(EXIT): address=%llx\n",
> address);
> +    return address;
> +}
> diff --git a/drivers/firmware/iscsi_ibft_find.c
> b/drivers/firmware/iscsi_ibft_find.c
> index 95fc1a6..0de70b4 100644
> --- a/drivers/firmware/iscsi_ibft_find.c
> +++ b/drivers/firmware/iscsi_ibft_find.c
> @@ -28,6 +28,8 @@
> 
>  #include <asm/mmzone.h>
> 
> +extern acpi_physical_address acpi_tb_find_table_address(char *signature);
> +
>  /*
>   * Physical location of iSCSI Boot Format Table.
>   */
> @@ -116,24 +118,32 @@ void __init reserve_ibft_region(void)
>  {
>      struct acpi_table_ibft *table;
>      unsigned long size;
> +    acpi_physical_address address;
> 
>      table = find_ibft();
>      if (!table)
>          return;
> 
>      size = PAGE_ALIGN(table->header.length);
> +    address = acpi_tb_find_table_address(table->header.signature);
>  #if 0
>  printk(KERN_ERR "XXX reserve_ibft_region: table=%llx,
> virt_to_phys(table)=%llx, size=%lx\n",
>      (u64)table, virt_to_phys(table), size);
>      memblock_reserve(virt_to_phys(table), size);
>  #else
> -printk(KERN_ERR "XXX reserve_ibft_region: table=%llx, 0x00000000BE453000,
> size=%lx\n",
> -    (u64)table, size);
> -    memblock_reserve(0x00000000BE453000, size);
> +printk(KERN_ERR "XXX reserve_ibft_region: table=%llx, address=%llx,
> size=%lx\n",
> +    (u64)table, address, size);
> +    if (address)
> +        memblock_reserve(address, size);
> +    else
> +        printk(KERN_ERR "%s: Can't find table address\n", __func__);
>  #endif
> 
> -    if (efi_enabled(EFI_BOOT))
> +    if (efi_enabled(EFI_BOOT)) {
> +printk(KERN_ERR "XXX reserve_ibft_region: calling acpi_put_table(%llx)\n",
> (u64)&table->header);
>          acpi_put_table(&table->header);
> -    else
> +    } else {
>          ibft_addr = table;
> +printk(KERN_ERR "XXX reserve_ibft_region: ibft_addr=%llx\n",
> (u64)ibft_addr);
> +    }
>  }
> 
> Debug from the above:
> [    0.050646] ACPI: Early table checksum verification disabled
> [    0.051778] ACPI: RSDP 0x00000000BFBFA014 000024 (v02 BOCHS )
> [    0.052922] ACPI: XSDT 0x00000000BFBF90E8 00004C (v01 BOCHS BXPCFACP
> 00000001      01000013)
> [    0.054623] ACPI: FACP 0x00000000BFBF5000 000074 (v01 BOCHS BXPCFACP
> 00000001 BXPC 00000001)
> [    0.056326] ACPI: DSDT 0x00000000BFBF6000 00238D (v01 BOCHS BXPCDSDT
> 00000001 BXPC 00000001)
> [    0.058016] ACPI: FACS 0x00000000BFBFD000 000040
> [    0.058940] ACPI: APIC 0x00000000BFBF4000 000090 (v01 BOCHS BXPCAPIC
> 00000001 BXPC 00000001)
> [    0.060627] ACPI: HPET 0x00000000BFBF3000 000038 (v01 BOCHS BXPCHPET
> 00000001 BXPC 00000001)
> [    0.062304] ACPI: BGRT 0x00000000BE49B000 000038 (v01 INTEL EDK2    
> 00000002      01000013)
> [    0.063987] ACPI: iBFT 0x00000000BE453000 000800 (v01 BOCHS BXPCFACP
> 00000000      00000000)
> [    0.065683] XXX acpi_tb_find_table_address: signature=iBFT
> [    0.066754] XXX acpi_tb_find_table_address(EXIT): address=be453000
> [    0.067959] XXX reserve_ibft_region: table=ffffffffff240000,
> address=be453000, size=1000
> [    0.069534] XXX reserve_ibft_region: calling
> acpi_put_table(ffffffffff240000)
> 
> Not sure if it's the right thing to do, but added
> "acpi_tb_find_table_address()" to return the physical address of a table to
> use with memblock_reserve().
> 
> virt_to_phys(table) does not seem to return the physical address for the
> iBFT table (it would be nice if struct acpi_table_header also had a
> "address" element for the physical address of the table).

virt_to_phys() does not work that early because then it is mapped with
early_memremap()  which uses different virtual to physical scheme.

I'd say that acpi_tb_find_table_address() makes sense if we'd like to
reserve ACPI tables outside of drivers/acpi. 

But probably we should simply reserve all the tables during
acpi_table_init() so that any table that firmware put in the normal memory
will be surely reserved.
 
> Ran 10 successful boots with the above without failure.

That's good news indeed :)

> George
> > 
> > 

-- 
Sincerely yours,
Mike.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: George Kennedy <george.kennedy@oracle.com>
Cc: David Hildenbrand <david@redhat.com>,
	Andrey Konovalov <andreyknvl@google.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Vincenzo Frascino <vincenzo.frascino@arm.com>,
	Dmitry Vyukov <dvyukov@google.com>,
	Konrad Rzeszutek Wilk <konrad@darnok.org>,
	Will Deacon <will.deacon@arm.com>,
	Andrey Ryabinin <aryabinin@virtuozzo.com>,
	Alexander Potapenko <glider@google.com>,
	Marco Elver <elver@google.com>,
	Peter Collingbourne <pcc@google.com>,
	Evgenii Stepanov <eugenis@google.com>,
	Branislav Rankov <Branislav.Rankov@arm.com>,
	Kevin Brodsky <kevin.brodsky@arm.com>,
	Christoph Hellwig <hch@infradead.org>,
	kasan-dev <kasan-dev@googlegroups.com>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Linux Memory Management List <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Dhaval Giani <dhaval.giani@oracle.com>
Subject: Re: [PATCH] mm, kasan: don't poison boot memory
Date: Fri, 26 Feb 2021 13:17:30 +0200	[thread overview]
Message-ID: <20210226111730.GL1854360@linux.ibm.com> (raw)
In-Reply-To: <dc5e007c-9223-b03b-1c58-28d2712ec352@oracle.com>

Hi George,

On Thu, Feb 25, 2021 at 08:19:18PM -0500, George Kennedy wrote:
> 
> Mike,
> 
> To get rid of the 0x00000000BE453000 hardcoding, I added the following patch
> to your above patch to get the iBFT table "address" to use with
> memblock_reserve():
> 
> diff --git a/drivers/acpi/acpica/tbfind.c b/drivers/acpi/acpica/tbfind.c
> index 56d81e4..4bc7bf3 100644
> --- a/drivers/acpi/acpica/tbfind.c
> +++ b/drivers/acpi/acpica/tbfind.c
> @@ -120,3 +120,34 @@
>      (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
>      return_ACPI_STATUS(status);
>  }
> +
> +acpi_physical_address
> +acpi_tb_find_table_address(char *signature)
> +{
> +    acpi_physical_address address = 0;
> +    struct acpi_table_desc *table_desc;
> +    int i;
> +
> +    ACPI_FUNCTION_TRACE(tb_find_table_address);
> +
> +printk(KERN_ERR "XXX acpi_tb_find_table_address: signature=%s\n",
> signature);
> +
> +    (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
> +    for (i = 0; i < acpi_gbl_root_table_list.current_table_count; ++i) {
> +        if (memcmp(&(acpi_gbl_root_table_list.tables[i].signature),
> +               signature, ACPI_NAMESEG_SIZE)) {
> +
> +            /* Not the requested table */
> +
> +            continue;
> +        }
> +
> +        /* Table with matching signature has been found */
> +        table_desc = &acpi_gbl_root_table_list.tables[i];
> +        address = table_desc->address;
> +    }
> +
> +    (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
> +printk(KERN_ERR "XXX acpi_tb_find_table_address(EXIT): address=%llx\n",
> address);
> +    return address;
> +}
> diff --git a/drivers/firmware/iscsi_ibft_find.c
> b/drivers/firmware/iscsi_ibft_find.c
> index 95fc1a6..0de70b4 100644
> --- a/drivers/firmware/iscsi_ibft_find.c
> +++ b/drivers/firmware/iscsi_ibft_find.c
> @@ -28,6 +28,8 @@
> 
>  #include <asm/mmzone.h>
> 
> +extern acpi_physical_address acpi_tb_find_table_address(char *signature);
> +
>  /*
>   * Physical location of iSCSI Boot Format Table.
>   */
> @@ -116,24 +118,32 @@ void __init reserve_ibft_region(void)
>  {
>      struct acpi_table_ibft *table;
>      unsigned long size;
> +    acpi_physical_address address;
> 
>      table = find_ibft();
>      if (!table)
>          return;
> 
>      size = PAGE_ALIGN(table->header.length);
> +    address = acpi_tb_find_table_address(table->header.signature);
>  #if 0
>  printk(KERN_ERR "XXX reserve_ibft_region: table=%llx,
> virt_to_phys(table)=%llx, size=%lx\n",
>      (u64)table, virt_to_phys(table), size);
>      memblock_reserve(virt_to_phys(table), size);
>  #else
> -printk(KERN_ERR "XXX reserve_ibft_region: table=%llx, 0x00000000BE453000,
> size=%lx\n",
> -    (u64)table, size);
> -    memblock_reserve(0x00000000BE453000, size);
> +printk(KERN_ERR "XXX reserve_ibft_region: table=%llx, address=%llx,
> size=%lx\n",
> +    (u64)table, address, size);
> +    if (address)
> +        memblock_reserve(address, size);
> +    else
> +        printk(KERN_ERR "%s: Can't find table address\n", __func__);
>  #endif
> 
> -    if (efi_enabled(EFI_BOOT))
> +    if (efi_enabled(EFI_BOOT)) {
> +printk(KERN_ERR "XXX reserve_ibft_region: calling acpi_put_table(%llx)\n",
> (u64)&table->header);
>          acpi_put_table(&table->header);
> -    else
> +    } else {
>          ibft_addr = table;
> +printk(KERN_ERR "XXX reserve_ibft_region: ibft_addr=%llx\n",
> (u64)ibft_addr);
> +    }
>  }
> 
> Debug from the above:
> [    0.050646] ACPI: Early table checksum verification disabled
> [    0.051778] ACPI: RSDP 0x00000000BFBFA014 000024 (v02 BOCHS )
> [    0.052922] ACPI: XSDT 0x00000000BFBF90E8 00004C (v01 BOCHS BXPCFACP
> 00000001      01000013)
> [    0.054623] ACPI: FACP 0x00000000BFBF5000 000074 (v01 BOCHS BXPCFACP
> 00000001 BXPC 00000001)
> [    0.056326] ACPI: DSDT 0x00000000BFBF6000 00238D (v01 BOCHS BXPCDSDT
> 00000001 BXPC 00000001)
> [    0.058016] ACPI: FACS 0x00000000BFBFD000 000040
> [    0.058940] ACPI: APIC 0x00000000BFBF4000 000090 (v01 BOCHS BXPCAPIC
> 00000001 BXPC 00000001)
> [    0.060627] ACPI: HPET 0x00000000BFBF3000 000038 (v01 BOCHS BXPCHPET
> 00000001 BXPC 00000001)
> [    0.062304] ACPI: BGRT 0x00000000BE49B000 000038 (v01 INTEL EDK2    
> 00000002      01000013)
> [    0.063987] ACPI: iBFT 0x00000000BE453000 000800 (v01 BOCHS BXPCFACP
> 00000000      00000000)
> [    0.065683] XXX acpi_tb_find_table_address: signature=iBFT
> [    0.066754] XXX acpi_tb_find_table_address(EXIT): address=be453000
> [    0.067959] XXX reserve_ibft_region: table=ffffffffff240000,
> address=be453000, size=1000
> [    0.069534] XXX reserve_ibft_region: calling
> acpi_put_table(ffffffffff240000)
> 
> Not sure if it's the right thing to do, but added
> "acpi_tb_find_table_address()" to return the physical address of a table to
> use with memblock_reserve().
> 
> virt_to_phys(table) does not seem to return the physical address for the
> iBFT table (it would be nice if struct acpi_table_header also had a
> "address" element for the physical address of the table).

virt_to_phys() does not work that early because then it is mapped with
early_memremap()  which uses different virtual to physical scheme.

I'd say that acpi_tb_find_table_address() makes sense if we'd like to
reserve ACPI tables outside of drivers/acpi. 

But probably we should simply reserve all the tables during
acpi_table_init() so that any table that firmware put in the normal memory
will be surely reserved.
 
> Ran 10 successful boots with the above without failure.

That's good news indeed :)

> George
> > 
> > 

-- 
Sincerely yours,
Mike.


  reply	other threads:[~2021-02-26 11:19 UTC|newest]

Thread overview: 89+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-17 20:56 [PATCH] mm, kasan: don't poison boot memory Andrey Konovalov
2021-02-17 20:56 ` Andrey Konovalov
2021-02-18  8:55 ` David Hildenbrand
2021-02-18  8:55   ` David Hildenbrand
2021-02-18 19:40   ` Andrey Konovalov
2021-02-18 19:40     ` Andrey Konovalov
2021-02-18 19:46     ` David Hildenbrand
2021-02-18 19:46       ` David Hildenbrand
2021-02-18 20:26       ` Andrey Konovalov
2021-02-18 20:26         ` Andrey Konovalov
2021-02-19  0:06   ` George Kennedy
2021-02-19  0:06     ` George Kennedy
2021-02-19  0:09     ` Andrey Konovalov
2021-02-19  0:09       ` Andrey Konovalov
2021-02-19 16:45       ` George Kennedy
2021-02-19 16:45         ` George Kennedy
2021-02-19 23:04         ` George Kennedy
2021-02-19 23:04           ` George Kennedy
2021-02-22  9:52           ` David Hildenbrand
2021-02-22  9:52             ` David Hildenbrand
2021-02-22 15:13             ` George Kennedy
2021-02-22 15:13               ` George Kennedy
2021-02-22 16:13               ` David Hildenbrand
2021-02-22 16:13                 ` David Hildenbrand
2021-02-22 16:39                 ` David Hildenbrand
2021-02-22 16:39                   ` David Hildenbrand
2021-02-22 17:40                   ` Konrad Rzeszutek Wilk
2021-02-22 17:40                     ` Konrad Rzeszutek Wilk
2021-02-22 18:45                     ` Mike Rapoport
2021-02-22 18:45                       ` Mike Rapoport
2021-02-22 18:42                 ` George Kennedy
2021-02-22 18:42                   ` George Kennedy
2021-02-22 21:55                   ` Mike Rapoport
2021-02-22 21:55                     ` Mike Rapoport
     [not found]                     ` <9773282a-2854-25a4-9faa-9da5dd34e371@oracle.com>
2021-02-23 10:33                       ` Mike Rapoport
2021-02-23 10:33                         ` Mike Rapoport
     [not found]                         ` <3ef9892f-d657-207f-d4cf-111f98dcb55c@oracle.com>
2021-02-23 15:47                           ` Mike Rapoport
2021-02-23 15:47                             ` Mike Rapoport
2021-02-23 18:05                             ` George Kennedy
2021-02-23 18:05                               ` George Kennedy
2021-02-23 20:09                               ` Mike Rapoport
2021-02-23 20:09                                 ` Mike Rapoport
2021-02-23 21:16                                 ` George Kennedy
2021-02-23 21:32                                   ` Mike Rapoport
2021-02-23 21:32                                     ` Mike Rapoport
2021-02-23 21:46                                     ` George Kennedy
2021-02-23 21:46                                       ` George Kennedy
2021-02-24 10:37                                       ` Mike Rapoport
2021-02-24 10:37                                         ` Mike Rapoport
2021-02-24 14:22                                         ` George Kennedy
2021-02-24 14:22                                           ` George Kennedy
2021-02-25  8:53                                           ` Mike Rapoport
2021-02-25  8:53                                             ` Mike Rapoport
2021-02-25 12:38                                             ` George Kennedy
2021-02-25 12:38                                               ` George Kennedy
2021-02-25 14:57                                               ` Mike Rapoport
2021-02-25 14:57                                                 ` Mike Rapoport
2021-02-25 15:22                                                 ` George Kennedy
2021-02-25 15:22                                                   ` George Kennedy
2021-02-25 16:06                                                   ` George Kennedy
2021-02-25 16:06                                                     ` George Kennedy
2021-02-25 16:07                                                   ` Mike Rapoport
2021-02-25 16:07                                                     ` Mike Rapoport
2021-02-25 16:31                                                     ` George Kennedy
2021-02-25 16:31                                                       ` George Kennedy
2021-02-25 17:23                                                       ` David Hildenbrand
2021-02-25 17:23                                                         ` David Hildenbrand
2021-02-25 17:41                                                         ` Mike Rapoport
2021-02-25 17:41                                                           ` Mike Rapoport
2021-02-25 17:50                                                       ` Mike Rapoport
2021-02-25 17:50                                                         ` Mike Rapoport
2021-02-25 17:33                                                     ` George Kennedy
2021-02-25 17:33                                                       ` George Kennedy
2021-02-26  1:19                                                       ` George Kennedy
2021-02-26  1:19                                                         ` George Kennedy
2021-02-26 11:17                                                         ` Mike Rapoport [this message]
2021-02-26 11:17                                                           ` Mike Rapoport
2021-02-26 16:16                                                           ` George Kennedy
2021-02-26 16:16                                                             ` George Kennedy
2021-02-28 18:08                                                             ` Mike Rapoport
2021-02-28 18:08                                                               ` Mike Rapoport
2021-03-01 14:29                                                               ` George Kennedy
2021-03-01 14:29                                                                 ` George Kennedy
2021-03-02  1:20                                                                 ` George Kennedy
2021-03-02  1:20                                                                   ` George Kennedy
2021-03-02  9:57                                                                   ` Mike Rapoport
2021-03-02  9:57                                                                     ` Mike Rapoport
2021-02-23 21:26                                 ` George Kennedy
2021-02-23 21:26                                   ` George Kennedy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210226111730.GL1854360@linux.ibm.com \
    --to=rppt@linux.ibm.com \
    --cc=Branislav.Rankov@arm.com \
    --cc=akpm@linux-foundation.org \
    --cc=andreyknvl@google.com \
    --cc=aryabinin@virtuozzo.com \
    --cc=catalin.marinas@arm.com \
    --cc=david@redhat.com \
    --cc=dhaval.giani@oracle.com \
    --cc=dvyukov@google.com \
    --cc=elver@google.com \
    --cc=eugenis@google.com \
    --cc=george.kennedy@oracle.com \
    --cc=glider@google.com \
    --cc=hch@infradead.org \
    --cc=kasan-dev@googlegroups.com \
    --cc=kevin.brodsky@arm.com \
    --cc=konrad@darnok.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=pcc@google.com \
    --cc=vincenzo.frascino@arm.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.