lkml.org 
[lkml]   [2010]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 2/2] x86/amd-iommu: warn when issuing command to uninitiailed cmd buffer
    To catch future potential issues we can add a warning whenever we issue
    a command before the command buffer is fully initialized.

    Signed-off-by: Chris Wright <chrisw@sous-sol.org>
    ---
    Or not...this is just if you think it's useful ;-)

    arch/x86/include/asm/amd_iommu_types.h | 1 +
    arch/x86/kernel/amd_iommu.c | 1 +
    arch/x86/kernel/amd_iommu_init.c | 5 +++--
    3 files changed, 5 insertions(+), 2 deletions(-)

    --- a/arch/x86/include/asm/amd_iommu_types.h
    +++ b/arch/x86/include/asm/amd_iommu_types.h
    @@ -140,6 +140,7 @@

    /* constants to configure the command buffer */
    #define CMD_BUFFER_SIZE 8192
    +#define CMD_BUFFER_UNINITIALIZED 1
    #define CMD_BUFFER_ENTRIES 512
    #define MMIO_CMD_SIZE_SHIFT 56
    #define MMIO_CMD_SIZE_512 (0x9ULL << MMIO_CMD_SIZE_SHIFT)
    --- a/arch/x86/kernel/amd_iommu.c
    +++ b/arch/x86/kernel/amd_iommu.c
    @@ -392,6 +392,7 @@ static int __iommu_queue_command(struct
    u32 tail, head;
    u8 *target;

    + WARN_ON(iommu->cmd_buf_size & CMD_BUFFER_UNINITIALIZED);;
    tail = readl(iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);
    target = iommu->cmd_buf + tail;
    memcpy_toio(target, cmd, sizeof(*cmd));
    --- a/arch/x86/kernel/amd_iommu_init.c
    +++ b/arch/x86/kernel/amd_iommu_init.c
    @@ -436,7 +436,7 @@ static u8 * __init alloc_command_buffer(
    if (cmd_buf == NULL)
    return NULL;

    - iommu->cmd_buf_size = CMD_BUFFER_SIZE;
    + iommu->cmd_buf_size = CMD_BUFFER_SIZE | CMD_BUFFER_UNINITIALIZED;

    return cmd_buf;
    }
    @@ -453,6 +453,7 @@ void amd_iommu_reset_cmd_buffer(struct a
    writel(0x00, iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);

    iommu_feature_enable(iommu, CONTROL_CMDBUF_EN);
    + iommu->cmd_buf_size &= ~(CMD_BUFFER_UNINITIALIZED);
    }

    /*
    @@ -477,7 +478,7 @@ static void iommu_enable_command_buffer(
    static void __init free_command_buffer(struct amd_iommu *iommu)
    {
    free_pages((unsigned long)iommu->cmd_buf,
    - get_order(iommu->cmd_buf_size));
    + get_order(iommu->cmd_buf_size & ~(CMD_BUFFER_UNINITIALIZED)));
    }

    /* allocates the memory where the IOMMU will log its events to */

    \
     
     \ /
      Last update: 2010-04-02 03:35    [W:0.023 / U:0.812 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site