ALSA: pcm - define snd_pcm_default_page_ops()
authorTakashi Iwai <tiwai@suse.de>
Thu, 26 Nov 2009 11:43:39 +0000 (12:43 +0100)
committerTakashi Iwai <tiwai@suse.de>
Thu, 26 Nov 2009 14:07:21 +0000 (15:07 +0100)
Add a helper (inline) function as the default page ops.  Any hacks wrt
the page address conversion will be applied in this function.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/pcm_native.c

index f067c5b906e41ebbaabdb48a900356e080a244a9..c906be26c3127ba2cc53ad394021085470122781 100644 (file)
@@ -3062,6 +3062,13 @@ static int snd_pcm_mmap_control(struct snd_pcm_substream *substream, struct file
 }
 #endif /* coherent mmap */
 
+static inline struct page *
+snd_pcm_default_page_ops(struct snd_pcm_substream *substream, unsigned long ofs)
+{
+       void *vaddr = substream->runtime->dma_area + ofs;
+       return virt_to_page(vaddr);
+}
+
 /*
  * fault callback for mmapping a RAM page
  */
@@ -3072,7 +3079,6 @@ static int snd_pcm_mmap_data_fault(struct vm_area_struct *area,
        struct snd_pcm_runtime *runtime;
        unsigned long offset;
        struct page * page;
-       void *vaddr;
        size_t dma_bytes;
        
        if (substream == NULL)
@@ -3082,14 +3088,12 @@ static int snd_pcm_mmap_data_fault(struct vm_area_struct *area,
        dma_bytes = PAGE_ALIGN(runtime->dma_bytes);
        if (offset > dma_bytes - PAGE_SIZE)
                return VM_FAULT_SIGBUS;
-       if (substream->ops->page) {
+       if (substream->ops->page)
                page = substream->ops->page(substream, offset);
-               if (!page)
-                       return VM_FAULT_SIGBUS;
-       } else {
-               vaddr = runtime->dma_area + offset;
-               page = virt_to_page(vaddr);
-       }
+       else
+               page = snd_pcm_default_page_ops(substream, offset);
+       if (!page)
+               return VM_FAULT_SIGBUS;
        get_page(page);
        vmf->page = page;
        return 0;