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