Skip to content
  • Dennis Chen's avatar
    arm64:acpi: fix the acpi alignment exception when 'mem=' specified · cb0a6502
    Dennis Chen authored
    When booting an ACPI enabled kernel with 'mem=x', there is the
    possibility that ACPI data regions from the firmware will lie above the
    memory limit.  Ordinarily these will be removed by
    memblock_enforce_memory_limit(.).
    
    Unfortunately, this means that these regions will then be mapped by
    acpi_os_ioremap(.) as device memory (instead of normal) thus unaligned
    accessess will then provoke alignment faults.
    
    In this patch we adopt memblock_mem_limit_remove_map instead, and this
    preserves these ACPI data regions (marked NOMAP) thus ensuring that
    these regions are not mapped as device memory.
    
    For example, below is an alignment exception observed on ARM platform
    when booting the kernel with 'acpi=on mem=8G':
    
      ...
      Unable to handle kernel paging request at virtual address ffff0000080521e7
      pgd = ffff000008aa0000
      [ffff0000080521e7] *pgd=000000801fffe003, *pud=000000801fffd003, *pmd=000000801fffc003, *pte=00e80083ff1c1707
      Internal error: Oops: 96000021 [#1] PREEMPT SMP
      Modules linked in:
      CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.7.0-rc3-next-20160616+ #172
      Hardware name: AMD Overdrive/Supercharger/Default string, BIOS ROD1001A 02/09/2016
      task: ffff800001ef0000 ti: ffff800001ef8000 task.ti: ffff800001ef8000
      PC is at acpi_ns_lookup+0x520/0x734
      LR is at acpi_ns_lookup+0x4a4/0x734
      pc : [<ffff0000083b8b10>] lr : [<ffff0000083b8a94>] pstate: 60000045
      sp : ffff800001efb8b0
      x29: ffff800001efb8c0 x28: 000000000000001b
      x27: 0000000000000001 x26: 0000000000000000
      x25: ffff800001efb9e8 x24: ffff000008a10000
      x23: 0000000000000001 x22: 0000000000000001
      x21: ffff000008724000 x20: 000000000000001b
      x19: ffff0000080521e7 x18: 000000000000000d
      x17: 00000000000038ff x16: 0000000000000002
      x15: 0000000000000007 x14: 0000000000007fff
      x13: ffffff0000000000 x12: 0000000000000018
      x11: 000000001fffd200 x10: 00000000ffffff76
      x9 : 000000000000005f x8 : ffff000008725fa8
      x7 : ffff000008a8df70 x6 : ffff000008a8df70
      x5 : ffff000008a8d000 x4 : 0000000000000010
      x3 : 0000000000000010 x2 : 000000000000000c
      x1 : 0000000000000006 x0 : 0000000000000000
      ...
        acpi_ns_lookup+0x520/0x734
        acpi_ds_load1_begin_op+0x174/0x4fc
        acpi_ps_build_named_op+0xf8/0x220
        acpi_ps_create_op+0x208/0x33c
        acpi_ps_parse_loop+0x204/0x838
        acpi_ps_parse_aml+0x1bc/0x42c
        acpi_ns_one_complete_parse+0x1e8/0x22c
        acpi_ns_parse_table+0x8c/0x128
        acpi_ns_load_table+0xc0/0x1e8
        acpi_tb_load_namespace+0xf8/0x2e8
        acpi_load_tables+0x7c/0x110
        acpi_init+0x90/0x2c0
        do_one_initcall+0x38/0x12c
        kernel_init_freeable+0x148/0x1ec
        kernel_init+0x10/0xec
        ret_from_fork+0x10/0x40
      Code: b9009fbc 2a00037b 36380057 3219037b (b9400260)
      ---[ end trace 03381e5eb0a24de4 ]---
      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:
    
      efi:   0x0083ff185000-0x0083ff1b4fff [Reserved           |   |  |  |  |  |  |  |   |WB|WT|WC|UC]*
      efi:   0x0083ff1b5000-0x0083ff1c2fff [ACPI Reclaim Memory|   |  |  |  |  |  |  |   |WB|WT|WC|UC]*
      efi:   0x0083ff223000-0x0083ff224fff [ACPI Memory NVS    |   |  |  |  |  |  |  |   |WB|WT|WC|UC]*
    
    Link: http://lkml.kernel.org/r/1468475036-5852-3-git-send-email-dennis.chen@arm.com
    
    
    Acked-by: default avatarSteve Capper <steve.capper@arm.com>
    Signed-off-by: default avatarDennis Chen <dennis.chen@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Tang Chen <tangchen@cn.fujitsu.com>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Rafael J. Wysocki <rafael@kernel.org>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Matt Fleming <matt@codeblueprint.co.uk>
    Cc: Kaly Xin <kaly.xin@arm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    cb0a6502