Re: [PATCH] MMC: fix the use of kunmap_atomic() in tmio_mmc.h

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Aug 15, 2010 at 4:29 AM, Guennadi Liakhovetski
<g.liakhovetski@xxxxxx> wrote:
> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@xxxxxx>

If I understand the kunmap_atomic() thing correctly, this looks good to me.

Acked-by: Eric Miao <eric.y.miao@xxxxxxxxx>


> ---
>  drivers/mmc/host/tmio_mmc.c |    7 ++++---
>  drivers/mmc/host/tmio_mmc.h |    8 +++-----
>  2 files changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/mmc/host/tmio_mmc.c b/drivers/mmc/host/tmio_mmc.c
> index ee7d0a5..69d98e3 100644
> --- a/drivers/mmc/host/tmio_mmc.c
> +++ b/drivers/mmc/host/tmio_mmc.c
> @@ -164,6 +164,7 @@ tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command *cmd)
>  static void tmio_mmc_pio_irq(struct tmio_mmc_host *host)
>  {
>        struct mmc_data *data = host->data;
> +       void *sg_virt;
>        unsigned short *buf;
>        unsigned int count;
>        unsigned long flags;
> @@ -173,8 +174,8 @@ static void tmio_mmc_pio_irq(struct tmio_mmc_host *host)
>                return;
>        }
>
> -       buf = (unsigned short *)(tmio_mmc_kmap_atomic(host, &flags) +
> -             host->sg_off);
> +       sg_virt = tmio_mmc_kmap_atomic(host->sg_ptr, &flags);
> +       buf = (unsigned short *)(sg_virt + host->sg_off);
>
>        count = host->sg_ptr->length - host->sg_off;
>        if (count > data->blksz)
> @@ -191,7 +192,7 @@ static void tmio_mmc_pio_irq(struct tmio_mmc_host *host)
>
>        host->sg_off += count;
>
> -       tmio_mmc_kunmap_atomic(host, &flags);
> +       tmio_mmc_kunmap_atomic(sg_virt, &flags);
>
>        if (host->sg_off == host->sg_ptr->length)
>                tmio_mmc_next_sg(host);
> diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
> index 64f7d5d..446f9e9 100644
> --- a/drivers/mmc/host/tmio_mmc.h
> +++ b/drivers/mmc/host/tmio_mmc.h
> @@ -177,19 +177,17 @@ static inline int tmio_mmc_next_sg(struct tmio_mmc_host *host)
>        return --host->sg_len;
>  }
>
> -static inline char *tmio_mmc_kmap_atomic(struct tmio_mmc_host *host,
> +static inline char *tmio_mmc_kmap_atomic(struct scatterlist *sg,
>        unsigned long *flags)
>  {
> -       struct scatterlist *sg = host->sg_ptr;
> -
>        local_irq_save(*flags);
>        return kmap_atomic(sg_page(sg), KM_BIO_SRC_IRQ) + sg->offset;
>  }
>
> -static inline void tmio_mmc_kunmap_atomic(struct tmio_mmc_host *host,
> +static inline void tmio_mmc_kunmap_atomic(void *virt,
>        unsigned long *flags)
>  {
> -       kunmap_atomic(sg_page(host->sg_ptr), KM_BIO_SRC_IRQ);
> +       kunmap_atomic(virt, KM_BIO_SRC_IRQ);
>        local_irq_restore(*flags);
>  }
>
> --
> 1.7.2
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux