Commit eb415b8f authored by Nick Piggin's avatar Nick Piggin Committed by Jaroslav Kysela

[ALSA] alsa: usx2y nopage

Convert alsa usx2y driver from nopage to fault.
Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarJaroslav Kysela <perex@perex.cz>
parent 3ad5afcd
...@@ -34,34 +34,31 @@ ...@@ -34,34 +34,31 @@
int usX2Y_hwdep_pcm_new(struct snd_card *card); int usX2Y_hwdep_pcm_new(struct snd_card *card);
static struct page * snd_us428ctls_vm_nopage(struct vm_area_struct *area, unsigned long address, int *type) static int snd_us428ctls_vm_fault(struct vm_area_struct *area,
struct vm_fault *vmf)
{ {
unsigned long offset; unsigned long offset;
struct page * page; struct page * page;
void *vaddr; void *vaddr;
snd_printdd("ENTER, start %lXh, ofs %lXh, pgoff %ld, addr %lXh\n", snd_printdd("ENTER, start %lXh, pgoff %ld\n",
area->vm_start, area->vm_start,
address - area->vm_start, vmf->pgoff);
(address - area->vm_start) >> PAGE_SHIFT,
address);
offset = area->vm_pgoff << PAGE_SHIFT; offset = vmf->pgoff << PAGE_SHIFT;
offset += address - area->vm_start;
snd_assert((offset % PAGE_SIZE) == 0, return NOPAGE_SIGBUS);
vaddr = (char*)((struct usX2Ydev *)area->vm_private_data)->us428ctls_sharedmem + offset; vaddr = (char*)((struct usX2Ydev *)area->vm_private_data)->us428ctls_sharedmem + offset;
page = virt_to_page(vaddr); page = virt_to_page(vaddr);
get_page(page); get_page(page);
snd_printdd( "vaddr=%p made us428ctls_vm_nopage() return %p; offset=%lX\n", vaddr, page, offset); vmf->page = page;
if (type) snd_printdd("vaddr=%p made us428ctls_vm_fault() page %p\n",
*type = VM_FAULT_MINOR; vaddr, page);
return page; return 0;
} }
static struct vm_operations_struct us428ctls_vm_ops = { static struct vm_operations_struct us428ctls_vm_ops = {
.nopage = snd_us428ctls_vm_nopage, .fault = snd_us428ctls_vm_fault,
}; };
static int snd_us428ctls_mmap(struct snd_hwdep * hw, struct file *filp, struct vm_area_struct *area) static int snd_us428ctls_mmap(struct snd_hwdep * hw, struct file *filp, struct vm_area_struct *area)
......
...@@ -683,30 +683,24 @@ static void snd_usX2Y_hwdep_pcm_vm_close(struct vm_area_struct *area) ...@@ -683,30 +683,24 @@ static void snd_usX2Y_hwdep_pcm_vm_close(struct vm_area_struct *area)
} }
static struct page * snd_usX2Y_hwdep_pcm_vm_nopage(struct vm_area_struct *area, unsigned long address, int *type) static int snd_usX2Y_hwdep_pcm_vm_fault(struct vm_area_struct *area,
struct vm_fault *vmf)
{ {
unsigned long offset; unsigned long offset;
struct page *page;
void *vaddr; void *vaddr;
offset = area->vm_pgoff << PAGE_SHIFT; offset = vmf->pgoff << PAGE_SHIFT;
offset += address - area->vm_start;
snd_assert((offset % PAGE_SIZE) == 0, return NOPAGE_OOM);
vaddr = (char*)((struct usX2Ydev *)area->vm_private_data)->hwdep_pcm_shm + offset; vaddr = (char*)((struct usX2Ydev *)area->vm_private_data)->hwdep_pcm_shm + offset;
page = virt_to_page(vaddr); vmf->page = virt_to_page(vaddr);
get_page(page); get_page(vmf->page);
return 0;
if (type)
*type = VM_FAULT_MINOR;
return page;
} }
static struct vm_operations_struct snd_usX2Y_hwdep_pcm_vm_ops = { static struct vm_operations_struct snd_usX2Y_hwdep_pcm_vm_ops = {
.open = snd_usX2Y_hwdep_pcm_vm_open, .open = snd_usX2Y_hwdep_pcm_vm_open,
.close = snd_usX2Y_hwdep_pcm_vm_close, .close = snd_usX2Y_hwdep_pcm_vm_close,
.nopage = snd_usX2Y_hwdep_pcm_vm_nopage, .fault = snd_usX2Y_hwdep_pcm_vm_fault,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment