lkml.org 
[lkml]   [2012]   [Oct]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 122/180] pcdp: use early_ioremap/early_iounmap to access pcdp table
    2.6.32-longterm review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Greg Pearson <greg.pearson@hp.com>

    commit 6c4088ac3a4d82779903433bcd5f048c58fb1aca upstream.

    efi_setup_pcdp_console() is called during boot to parse the HCDP/PCDP
    EFI system table and setup an early console for printk output. The
    routine uses ioremap/iounmap to setup access to the HCDP/PCDP table
    information.

    The call to ioremap is happening early in the boot process which leads
    to a panic on x86_64 systems:

    panic+0x01ca
    do_exit+0x043c
    oops_end+0x00a7
    no_context+0x0119
    __bad_area_nosemaphore+0x0138
    bad_area_nosemaphore+0x000e
    do_page_fault+0x0321
    page_fault+0x0020
    reserve_memtype+0x02a1
    __ioremap_caller+0x0123
    ioremap_nocache+0x0012
    efi_setup_pcdp_console+0x002b
    setup_arch+0x03a9
    start_kernel+0x00d4
    x86_64_start_reservations+0x012c
    x86_64_start_kernel+0x00fe

    This replaces the calls to ioremap/iounmap in efi_setup_pcdp_console()
    with calls to early_ioremap/early_iounmap which can be called during
    early boot.

    This patch was tested on an x86_64 prototype system which uses the
    HCDP/PCDP table for early console setup.

    Signed-off-by: Greg Pearson <greg.pearson@hp.com>
    Acked-by: Khalid Aziz <khalid.aziz@hp.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>
    ---
    drivers/firmware/pcdp.c | 4 ++--
    1 files changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/firmware/pcdp.c b/drivers/firmware/pcdp.c
    index 51e0e2d..a330492 100644
    --- a/drivers/firmware/pcdp.c
    +++ b/drivers/firmware/pcdp.c
    @@ -95,7 +95,7 @@ efi_setup_pcdp_console(char *cmdline)
    if (efi.hcdp == EFI_INVALID_TABLE_ADDR)
    return -ENODEV;

    - pcdp = ioremap(efi.hcdp, 4096);
    + pcdp = early_ioremap(efi.hcdp, 4096);
    printk(KERN_INFO "PCDP: v%d at 0x%lx\n", pcdp->rev, efi.hcdp);

    if (strstr(cmdline, "console=hcdp")) {
    @@ -131,6 +131,6 @@ efi_setup_pcdp_console(char *cmdline)
    }

    out:
    - iounmap(pcdp);
    + early_iounmap(pcdp, 4096);
    return rc;
    }
    --
    1.7.2.1.45.g54fbc




    \
     
     \ /
      Last update: 2012-10-02 02:41    [W:4.167 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site