linux-efi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dennis Chen <dennis.chen-5wv7dgnIgG8@public.gmane.org>
To: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Cc: "linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
	<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
	nd-5wv7dgnIgG8@public.gmane.org,
	Catalin Marinas <catalin.marinas-5wv7dgnIgG8@public.gmane.org>,
	Steve Capper <steve.capper-5wv7dgnIgG8@public.gmane.org>,
	Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
	Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
	"Rafael J . Wysocki"
	<rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Matt Fleming
	<matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>,
	"linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org"
	<linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org>,
	"linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH v2 2/2] arm64:acpi Fix the acpi alignment exeception when 'mem=' specified
Date: Fri, 24 Jun 2016 20:01:00 +0800	[thread overview]
Message-ID: <20160624120058.GA19972@arm.com> (raw)
In-Reply-To: <CAKv+Gu8ZyWG-OZ8=2u9jrdS-0j+qL1sstPQ0uX=j7wyj+ETo-w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

On Fri, Jun 24, 2016 at 12:43:52PM +0200, Ard Biesheuvel wrote:
> On 24 June 2016 at 05:13, Dennis Chen <dennis.chen-5wv7dgnIgG8@public.gmane.org> wrote:
> > When booting an ACPI enabled kernel with 'mem=', probably the ACPI data
> > regions loaded by firmware will beyond the limit of the memory, in this
> > case we need to nomap the region above the limit while not removing
> > it from memblock, because once region removed from memblock, the ACPI
> > will think that region is not a normal memory and map it as device type
> > memory accordingly. Since the ACPI core will produce non-alignment access
> > when paring AML data stream, hence result in alignment fault upon the io
> > mapped memory space.
> >
> > For example, below is an alignment exception observed on softIron board
> > when booting the kernel with 'acpi=force mem=8G':
> > ...
> > [ 0.542475] Unable to handle kernel paging request at virtual address ffff0000080521e7
> > [ 0.550457] pgd = ffff000008aa0000
> > [ 0.553880] [ffff0000080521e7] *pgd=000000801fffe003, *pud=000000801fffd003, *pmd=000000801fffc003, *pte=00e80083ff1c1707
> > [    0.564939] Internal error: Oops: 96000021 [#1] PREEMPT SMP
> > [    0.570553] Modules linked in:
> > [    0.573626] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.7.0-rc3-next-20160616+ #172
> > [    0.581344] Hardware name: AMD Overdrive/Supercharger/Default string, BIOS ROD1001A 02/09/2016
> > [    0.590025] task: ffff800001ef0000 ti: ffff800001ef8000 task.ti: ffff800001ef8000
> > [    0.597571] PC is at acpi_ns_lookup+0x520/0x734
> > [    0.602134] LR is at acpi_ns_lookup+0x4a4/0x734
> > [    0.606693] pc : [<ffff0000083b8b10>] lr : [<ffff0000083b8a94>] pstate: 60000045
> > [    0.614145] sp : ffff800001efb8b0
> > [    0.617478] x29: ffff800001efb8c0 x28: 000000000000001b
> > [    0.622829] x27: 0000000000000001 x26: 0000000000000000
> > [    0.628181] x25: ffff800001efb9e8 x24: ffff000008a10000
> > [    0.633531] x23: 0000000000000001 x22: 0000000000000001
> > [    0.638881] x21: ffff000008724000 x20: 000000000000001b
> > [    0.644230] x19: ffff0000080521e7 x18: 000000000000000d
> > [    0.649580] x17: 00000000000038ff x16: 0000000000000002
> > [    0.654929] x15: 0000000000000007 x14: 0000000000007fff
> > [    0.660278] x13: ffffff0000000000 x12: 0000000000000018
> > [    0.665627] x11: 000000001fffd200 x10: 00000000ffffff76
> > [    0.670978] x9 : 000000000000005f x8 : ffff000008725fa8
> > [    0.676328] x7 : ffff000008a8df70 x6 : ffff000008a8df70
> > [    0.681679] x5 : ffff000008a8d000 x4 : 0000000000000010
> > [    0.687027] x3 : 0000000000000010 x2 : 000000000000000c
> > [    0.692378] x1 : 0000000000000006 x0 : 0000000000000000
> > ...
> > [    1.262235] [<ffff0000083b8b10>] acpi_ns_lookup+0x520/0x734
> > [    1.267845] [<ffff0000083a7160>] acpi_ds_load1_begin_op+0x174/0x4fc
> > [    1.274156] [<ffff0000083c1f4c>] acpi_ps_build_named_op+0xf8/0x220
> > [    1.280380] [<ffff0000083c227c>] acpi_ps_create_op+0x208/0x33c
> > [    1.286254] [<ffff0000083c1820>] acpi_ps_parse_loop+0x204/0x838
> > [    1.292215] [<ffff0000083c2fd4>] acpi_ps_parse_aml+0x1bc/0x42c
> > [    1.298090] [<ffff0000083bc6e8>] acpi_ns_one_complete_parse+0x1e8/0x22c
> > [    1.304753] [<ffff0000083bc7b8>] acpi_ns_parse_table+0x8c/0x128
> > [    1.310716] [<ffff0000083bb8fc>] acpi_ns_load_table+0xc0/0x1e8
> > [    1.316591] [<ffff0000083c9068>] acpi_tb_load_namespace+0xf8/0x2e8
> > [    1.322818] [<ffff000008984128>] acpi_load_tables+0x7c/0x110
> > [    1.328516] [<ffff000008982ea4>] acpi_init+0x90/0x2c0
> > [    1.333603] [<ffff0000080819fc>] do_one_initcall+0x38/0x12c
> > [    1.339215] [<ffff000008960cd4>] kernel_init_freeable+0x148/0x1ec
> > [    1.345353] [<ffff0000086b7d30>] kernel_init+0x10/0xec
> > [    1.350529] [<ffff000008084e10>] ret_from_fork+0x10/0x40
> > [    1.355878] Code: b9009fbc 2a00037b 36380057 3219037b (b9400260)
> > [    1.362035] ---[ end trace 03381e5eb0a24de4 ]---
> > [    1.366691] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
> >
> > With 'efi=debug', we can see those ACPI regions loaded by firmware on
> > that board as:
> > [    0.000000] efi:   0x0083ff1b5000-0x0083ff1c2fff [ACPI Reclaim Memory|   |  |  |  |  |  |  |   |WB|WT|WC|UC]*
> > [    0.000000] efi:   0x0083ff223000-0x0083ff224fff [ACPI Memory NVS    |   |  |  |  |  |  |  |   |WB|WT|WC|UC]*
> >
> > This patch is trying to address the above issues by nomaping the region
> > instead of removing it.
> >
> > Signed-off-by: Dennis Chen <dennis.chen-5wv7dgnIgG8@public.gmane.org>
> > Cc: Catalin Marinas <catalin.marinas-5wv7dgnIgG8@public.gmane.org>
> > Cc: Steve Capper <steve.capper-5wv7dgnIgG8@public.gmane.org>
> > Cc: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
> > Cc: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
> > Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
> > Cc: Rafael J. Wysocki <rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > Cc: Matt Fleming <matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
> > Cc: linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org
> > Cc: linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> > Cc: linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> > ---
> > Changes in v2:
> > Update the commit message and remove the memblock_is_map_memory() check
> > according to the suggestion from Mark Rutland.
> >
> >  arch/arm64/mm/init.c | 9 +++++----
> >  1 file changed, 5 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
> > index d45f862..6af2456 100644
> > --- a/arch/arm64/mm/init.c
> > +++ b/arch/arm64/mm/init.c
> > @@ -222,12 +222,13 @@ void __init arm64_memblock_init(void)
> >
> >         /*
> >          * Apply the memory limit if it was set. Since the kernel may be loaded
> > -        * high up in memory, add back the kernel region that must be accessible
> > -        * via the linear mapping.
> > +        * in the memory regions above the limit, so we need to clear the
> > +        * MEMBLOCK_NOMAP flag of this region to make it can be accessible via
> > +        * the linear mapping.
> >          */
> >         if (memory_limit != (phys_addr_t)ULLONG_MAX) {
> > -               memblock_enforce_memory_limit(memory_limit);
> > -               memblock_add(__pa(_text), (u64)(_end - _text));
> > +               memblock_mem_limit_mark_nomap(memory_limit);
> > +               memblock_clear_nomap(__pa(_text), (u64)(_end - _text));
> 
> Up until now, we have ignored the effect of having NOMAP memblocks on
> the return values of functions like memblock_phys_mem_size() and
> memblock_mem_size(), since they could reasonably be expected to cover
> only a small slice of all available memory. However, after applying
> this patch, it may well be the case that most of memory is marked
> NOMAP, and these functions will cease to work as expected.
>
Hi Ard, I noticed these inconsistences as you mentioned, but seems the
available memory is limited correctly. For this case('mem='), will it bring
some substantive side effects except that some log messages maybe confusing?  
> 
> This means NOMAP is really only suited to punch some holes into the
> kernel direct mapping, and so implementing the memory limit by marking
> everything NOMAP is not the way to go. Instead, we should probably
> reorder the init sequence so that the regions that are reserved in the
> UEFI memory map are declared and marked NOMAP [again] after applying
> the memory limit in the old way.
>
Before this patch, I have another one addressing the same issue [1], with
that patch we'll not have these inconsistences, but it looks like a little
bit complicated, so it becomes current one. Any comments about that?

[1]http://lists.infradead.org/pipermail/linux-arm-kernel/2016-June/438443.html

Thanks,
Dennis
> 
> -- 
> Ard.
> 

  parent reply	other threads:[~2016-06-24 12:01 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-24  3:13 [PATCH v2 1/2] mm: memblock Add some new functions to address the mem limit issue Dennis Chen
     [not found] ` <1466738027-15066-1-git-send-email-dennis.chen-5wv7dgnIgG8@public.gmane.org>
2016-06-24  3:13   ` [PATCH v2 2/2] arm64:acpi Fix the acpi alignment exeception when 'mem=' specified Dennis Chen
2016-06-24 10:43     ` Ard Biesheuvel
     [not found]       ` <CAKv+Gu8ZyWG-OZ8=2u9jrdS-0j+qL1sstPQ0uX=j7wyj+ETo-w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-06-24 12:01         ` Dennis Chen [this message]
2016-06-24 14:12           ` Ard Biesheuvel
     [not found]             ` <CAKv+Gu9XHYVEoL846WBx6PZqSnbBCjwup0CPkZ1JexJVkvds9A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-06-27  1:20               ` Dennis Chen
2016-06-27  9:53               ` Mark Rutland
2016-06-28  2:20                 ` Dennis Chen

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=20160624120058.GA19972@arm.com \
    --to=dennis.chen-5wv7dgnigg8@public.gmane.org \
    --cc=ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=catalin.marinas-5wv7dgnIgG8@public.gmane.org \
    --cc=linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
    --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
    --cc=matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org \
    --cc=nd-5wv7dgnIgG8@public.gmane.org \
    --cc=rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=steve.capper-5wv7dgnIgG8@public.gmane.org \
    --cc=will.deacon-5wv7dgnIgG8@public.gmane.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).