login
Login
/
Register
Search
Forums
News
Blogs
Features
Site
Home
»
Mailing list archives
»
linux-kernel
»
2007
»
December
»
13
Re: [patch 13/18] alsa: nopage
view
thread
!MAILaRCHIVE_VOTE_RePLACE
Previous message: [
thread
] [
date
] [
author
]
Next message: [thread] [
date
] [
author
]
[view in full thread]
From:
Takashi Iwai <tiwai@...>
To: <npiggin@...>
Cc: <akpm@...>, <perex@...>, <alsa-devel@...>, <linux-kernel@...>
Subject:
Re: [patch 13/18] alsa: nopage
Date: Thursday, December 13, 2007 - 11:35 am
At Wed, 05 Dec 2007 18:16:00 +1100,
npiggin@suse.de
wrote:
quoted text
> > Convert ALSA from nopage to fault. > Switch from OOM to SIGBUS if the resource is not available. > > Signed-off-by: Nick Piggin <npiggin@suse.de> > Cc:
perex@perex.cz
> Cc:
tiwai@suse.de
> Cc:
alsa-devel@alsa-project.org
> Cc:
linux-kernel@vger.kernel.org
I applied this to ALSA HG tree. thanks, Takashi
quoted text
> --- > sound/core/pcm_native.c | 59 ++++++++++++++++++++---------------------------- > 1 file changed, 25 insertions(+), 34 deletions(-) > > Index: linux-2.6/sound/core/pcm_native.c > =================================================================== > --- linux-2.6.orig/sound/core/pcm_native.c > +++ linux-2.6/sound/core/pcm_native.c > @@ -3018,26 +3018,23 @@ static unsigned int snd_pcm_capture_poll > /* > * mmap status record > */ > -static struct page * snd_pcm_mmap_status_nopage(struct vm_area_struct *area, > - unsigned long address, int *type) > +static int snd_pcm_mmap_status_fault(struct vm_area_struct *area, > + struct vm_fault *vmf) > { > struct snd_pcm_substream *substream = area->vm_private_data; > struct snd_pcm_runtime *runtime; > - struct page * page; > > if (substream == NULL) > - return NOPAGE_SIGBUS; > + return VM_FAULT_SIGBUS; > runtime = substream->runtime; > - page = virt_to_page(runtime->status); > - get_page(page); > - if (type) > - *type = VM_FAULT_MINOR; > - return page; > + vmf->page = virt_to_page(runtime->status); > + get_page(vmf->page); > + return 0; > } > > static struct vm_operations_struct snd_pcm_vm_ops_status = > { > - .nopage = snd_pcm_mmap_status_nopage, > + .fault = snd_pcm_mmap_status_fault, > }; > > static int snd_pcm_mmap_status(struct snd_pcm_substream *substream, struct file *file, > @@ -3061,26 +3058,23 @@ static int snd_pcm_mmap_status(struct sn > /* > * mmap control record > */ > -static struct page * snd_pcm_mmap_control_nopage(struct vm_area_struct *area, > - unsigned long address, int *type) > +static int snd_pcm_mmap_control_fault(struct vm_area_struct *area, > + struct vm_fault *vmf) > { > struct snd_pcm_substream *substream = area->vm_private_data; > struct snd_pcm_runtime *runtime; > - struct page * page; > > if (substream == NULL) > - return NOPAGE_SIGBUS; > + return VM_FAULT_SIGBUS; > runtime = substream->runtime; > - page = virt_to_page(runtime->control); > - get_page(page); > - if (type) > - *type = VM_FAULT_MINOR; > - return page; > + vmf->page = virt_to_page(runtime->control); > + get_page(vmf->page); > + return 0; > } > > static struct vm_operations_struct snd_pcm_vm_ops_control = > { > - .nopage = snd_pcm_mmap_control_nopage, > + .fault = snd_pcm_mmap_control_fault, > }; > > static int snd_pcm_mmap_control(struct snd_pcm_substream *substream, struct file *file, > @@ -3117,10 +3111,10 @@ static int snd_pcm_mmap_control(struct s > #endif /* coherent mmap */ > > /* > - * nopage callback for mmapping a RAM page > + * fault callback for mmapping a RAM page > */ > -static struct page *snd_pcm_mmap_data_nopage(struct vm_area_struct *area, > - unsigned long address, int *type) > +static int snd_pcm_mmap_data_fault(struct vm_area_struct *area, > + struct vm_fault *vmf) > { > struct snd_pcm_substream *substream = area->vm_private_data; > struct snd_pcm_runtime *runtime; > @@ -3130,33 +3124,30 @@ static struct page *snd_pcm_mmap_data_no > size_t dma_bytes; > > if (substream == NULL) > - return NOPAGE_SIGBUS; > + return VM_FAULT_SIGBUS; > runtime = substream->runtime; > - offset = area->vm_pgoff << PAGE_SHIFT; > - offset += address - area->vm_start; > - snd_assert((offset % PAGE_SIZE) == 0, return NOPAGE_SIGBUS); > + offset = vmf->pgoff << PAGE_SHIFT; > dma_bytes = PAGE_ALIGN(runtime->dma_bytes); > if (offset > dma_bytes - PAGE_SIZE) > - return NOPAGE_SIGBUS; > + return VM_FAULT_SIGBUS; > if (substream->ops->page) { > page = substream->ops->page(substream, offset); > - if (! page) > - return NOPAGE_OOM; /* XXX: is this really due to OOM? */ > + if (!page) > + return VM_FAULT_SIGBUS; > } else { > vaddr = runtime->dma_area + offset; > page = virt_to_page(vaddr); > } > get_page(page); > - if (type) > - *type = VM_FAULT_MINOR; > - return page; > + vmf->page = page; > + return 0; > } > > static struct vm_operations_struct snd_pcm_vm_ops_data = > { > .open = snd_pcm_mmap_data_open, > .close = snd_pcm_mmap_data_close, > - .nopage = snd_pcm_mmap_data_nopage, > + .fault = snd_pcm_mmap_data_fault, > }; > > /* > > -- >
--
unsubscribe notice
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to
majordomo@vger.kernel.org
More majordomo info at
http://vger.kernel.org/majordomo-info.html
Please read the FAQ at
http://www.tux.org/lkml/
Previous message: [
thread
] [
date
] [
author
]
Next message: [thread] [
date
] [
author
]
Messages in current thread:
[patch 13/18] alsa: nopage
,
, (Wed Dec 5, 3:16 am)
Re: [patch 13/18] alsa: nopage
, Takashi Iwai
, (Thu Dec 13, 11:35 am)
Navigation
Create content
Mailing list archives
Recent posts
Popular discussions
linux-kernel
:
Greg KH
Re: Announce: Linux-next (Or Andrew's dream :-))
Greg KH
[patch 26/73] NET: Correct two mistaken skb_reset_mac_header() conversions.
Greg Kroah-Hartman
[PATCH 007/196] Chinese: add translation of stable_kernel_rules.txt
Alan Cox
Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3
git
:
linux-netdev
:
Alexey Dobriyan
Re: [GIT]: Networking
Gerrit Renker
[PATCH 03/37] dccp: List management for new feature negotiation
Jarek Poplawski
[PATCH] pkt_sched: Destroy gen estimators under rtnl_lock().
Andrew Morton
Re: [BUG] New Kernel Bugs
openbsd-misc
:
Colocation donated by:
Who's online
There are currently
2 users
and
1086 guests
online.
Online users
zeekec
strcmp
Syndicate