diff mbox

[07/21] oss/dmabuf: use dma_map_single

Message ID 1366910944-3033663-8-git-send-email-arnd@arndb.de (mailing list archive)
State New, archived
Headers show

Commit Message

Arnd Bergmann April 25, 2013, 5:28 p.m. UTC
The virt_to_bus/bus_to_virt functions have been deprecated
for as long as I can remember, and they are used in very
few remaining instances, usually in obscure ISA device
drivers. The OSS sound drivers are the only ones that are
still used on the ARM architecture, and only on some of
the earliest StrongARM machines.

The problem for converting the OSS subsystem to use
dma_map_single instead is that the caller of virt_to_bus
does not have a device pointer, since the subsystem has
never been ported to use the common device infrastructure.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Jaroslav Kysela <perex@perex.cz>
Cc: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel@alsa-project.org
---
 sound/oss/dmabuf.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Takashi Iwai April 26, 2013, 5:41 a.m. UTC | #1
At Thu, 25 Apr 2013 19:28:50 +0200,
Arnd Bergmann wrote:
> 
> The virt_to_bus/bus_to_virt functions have been deprecated
> for as long as I can remember, and they are used in very
> few remaining instances, usually in obscure ISA device
> drivers. The OSS sound drivers are the only ones that are
> still used on the ARM architecture, and only on some of
> the earliest StrongARM machines.
> 
> The problem for converting the OSS subsystem to use
> dma_map_single instead is that the caller of virt_to_bus
> does not have a device pointer, since the subsystem has
> never been ported to use the common device infrastructure.
> 
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> Cc: Jaroslav Kysela <perex@perex.cz>
> Cc: Takashi Iwai <tiwai@suse.de>
> Cc: alsa-devel@alsa-project.org

Applied now, but the only problem is that it's difficult to test it :)
Let's see.


Thanks!

Takashi

> ---
>  sound/oss/dmabuf.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/oss/dmabuf.c b/sound/oss/dmabuf.c
> index bcc3e8e..a59c888 100644
> --- a/sound/oss/dmabuf.c
> +++ b/sound/oss/dmabuf.c
> @@ -114,7 +114,7 @@ static int sound_alloc_dmap(struct dma_buffparms *dmap)
>  		}
>  	}
>  	dmap->raw_buf = start_addr;
> -	dmap->raw_buf_phys = virt_to_bus(start_addr);
> +	dmap->raw_buf_phys = dma_map_single(NULL, start_addr, dmap->buffsize, DMA_BIDIRECTIONAL);
>  
>  	for (page = virt_to_page(start_addr); page <= virt_to_page(end_addr); page++)
>  		SetPageReserved(page);
> @@ -139,6 +139,7 @@ static void sound_free_dmap(struct dma_buffparms *dmap)
>  	for (page = virt_to_page(start_addr); page <= virt_to_page(end_addr); page++)
>  		ClearPageReserved(page);
>  
> +	dma_unmap_single(NULL, dmap->raw_buf_phys, dmap->buffsize, DMA_BIDIRECTIONAL);
>  	free_pages((unsigned long) dmap->raw_buf, sz);
>  	dmap->raw_buf = NULL;
>  }
> -- 
> 1.8.1.2
>
diff mbox

Patch

diff --git a/sound/oss/dmabuf.c b/sound/oss/dmabuf.c
index bcc3e8e..a59c888 100644
--- a/sound/oss/dmabuf.c
+++ b/sound/oss/dmabuf.c
@@ -114,7 +114,7 @@  static int sound_alloc_dmap(struct dma_buffparms *dmap)
 		}
 	}
 	dmap->raw_buf = start_addr;
-	dmap->raw_buf_phys = virt_to_bus(start_addr);
+	dmap->raw_buf_phys = dma_map_single(NULL, start_addr, dmap->buffsize, DMA_BIDIRECTIONAL);
 
 	for (page = virt_to_page(start_addr); page <= virt_to_page(end_addr); page++)
 		SetPageReserved(page);
@@ -139,6 +139,7 @@  static void sound_free_dmap(struct dma_buffparms *dmap)
 	for (page = virt_to_page(start_addr); page <= virt_to_page(end_addr); page++)
 		ClearPageReserved(page);
 
+	dma_unmap_single(NULL, dmap->raw_buf_phys, dmap->buffsize, DMA_BIDIRECTIONAL);
 	free_pages((unsigned long) dmap->raw_buf, sz);
 	dmap->raw_buf = NULL;
 }