lkml.org 
[lkml]   [2010]   [Sep]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/5] ACPI, APEI, Fix ERST MOVE_DATA instruction implementation
    Date
    The src_base and dst_base fields in apei_exec_context are physical
    address, so they should be ioremaped before being used in ERST
    MOVE_DATA instruction.

    Reported-by: Javier Martinez Canillas <martinez.javier@gmail.com>
    Reported-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Huang Ying <ying.huang@intel.com>
    ---
    drivers/acpi/apei/erst.c | 20 +++++++++++++++++---
    1 files changed, 17 insertions(+), 3 deletions(-)

    diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c
    index 40b01c3..a103963 100644
    --- a/drivers/acpi/apei/erst.c
    +++ b/drivers/acpi/apei/erst.c
    @@ -266,13 +266,27 @@ static int erst_exec_move_data(struct apei_exec_context *ctx,
    {
    int rc;
    u64 offset;
    + void *src, *dst;
    +
    + /* ioremap does not work in interrupt context */
    + if (in_interrupt())
    + return -EBUSY;

    rc = __apei_exec_read_register(entry, &offset);
    if (rc)
    return rc;
    - memmove((void *)ctx->dst_base + offset,
    - (void *)ctx->src_base + offset,
    - ctx->var2);
    +
    + src = ioremap(ctx->src_base + offset, ctx->var2);
    + if (!src)
    + return -ENOMEM;
    + dst = ioremap(ctx->dst_base + offset, ctx->var2);
    + if (!dst)
    + return -ENOMEM;
    +
    + memmove(dst, src, ctx->var2);
    +
    + iounmap(src);
    + iounmap(dst);

    return 0;
    }
    --
    1.7.1


    \
     
     \ /
      Last update: 2010-09-19 05:05    [W:0.021 / U:30.556 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site