| From ef3e4c13550387fd5f8b60aef4b69b70be8e414e Mon Sep 17 00:00:00 2001 |
| From: Guennadi Liakhovetski <g.liakhovetski@gmx.de> |
| Date: Thu, 9 Sep 2010 16:37:43 -0700 |
| Subject: [PATCH] mmc: fix the use of kunmap_atomic() in tmio_mmc.h |
| |
| commit 5600efb1bc2745d93ae0bc08130117a84f2b9d69 upstream. |
| |
| kunmap_atomic() takes the cookie, returned by the kmap_atomic() as its |
| argument and not the page address, used as an argument to kmap_atomic(). |
| This patch fixes the compile error: |
| |
| In file included from drivers/mmc/host/tmio_mmc.c:37: |
| drivers/mmc/host/tmio_mmc.h: In function 'tmio_mmc_kunmap_atomic': |
| drivers/mmc/host/tmio_mmc.h:192: error: negative width in bit-field '<anonymous>' |
| |
| Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> |
| Acked-by: Eric Miao <eric.y.miao@gmail.com> |
| Tested-by: Magnus Damm <damm@opensource.se> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| 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 b2b577f..73f8ba7 100644 |
| --- a/drivers/mmc/host/tmio_mmc.c |
| +++ b/drivers/mmc/host/tmio_mmc.c |
| @@ -163,6 +163,7 @@ tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command *cmd) |
| static inline 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; |
| @@ -172,8 +173,8 @@ static inline 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) |
| @@ -190,7 +191,7 @@ static inline 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 1836ed9..87b3517 100644 |
| --- a/drivers/mmc/host/tmio_mmc.h |
| +++ b/drivers/mmc/host/tmio_mmc.h |
| @@ -161,19 +161,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.0.4 |
| |