lkml.org 
[lkml]   [2010]   [Apr]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/4] MMC: atmel-mci: prevent kernel oops while removing card
    Date
    The removing of an SD card in certain circumstances can lead to a kernel oops
    if we do not make sure that the "data" field of the host structure is valid.
    This patch adds a test in atmci_dma_cleanup() function and also calls
    atmci_stop_dma() before throwing away the reference to data.

    Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
    ---
    drivers/mmc/host/atmel-mci.c | 9 +++++----
    1 files changed, 5 insertions(+), 4 deletions(-)

    diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
    index 321e0bf..12572e5 100644
    --- a/drivers/mmc/host/atmel-mci.c
    +++ b/drivers/mmc/host/atmel-mci.c
    @@ -569,9 +569,10 @@ static void atmci_dma_cleanup(struct atmel_mci *host)
    {
    struct mmc_data *data = host->data;

    - dma_unmap_sg(&host->pdev->dev, data->sg, data->sg_len,
    - ((data->flags & MMC_DATA_WRITE)
    - ? DMA_TO_DEVICE : DMA_FROM_DEVICE));
    + if (data)
    + dma_unmap_sg(&host->pdev->dev, data->sg, data->sg_len,
    + ((data->flags & MMC_DATA_WRITE)
    + ? DMA_TO_DEVICE : DMA_FROM_DEVICE));
    }

    static void atmci_stop_dma(struct atmel_mci *host)
    @@ -1113,8 +1114,8 @@ static void atmci_command_complete(struct atmel_mci *host,
    "command error: status=0x%08x\n", status);

    if (cmd->data) {
    - host->data = NULL;
    atmci_stop_dma(host);
    + host->data = NULL;
    mci_writel(host, IDR, MCI_NOTBUSY
    | MCI_TXRDY | MCI_RXRDY
    | ATMCI_DATA_ERROR_FLAGS);
    --
    1.5.6.5


    \
     
     \ /
      Last update: 2010-04-27 15:25    [W:0.022 / U:59.680 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site