[alsa-devel] [PATCH 3/3] ALSA: pcm: conditionally avoid mmap of control data

Takashi Iwai tiwai at suse.de
Tue May 16 09:02:03 CEST 2017


On Tue, 16 May 2017 08:54:17 +0200,
Takashi Sakamoto wrote:
> 
> On May 16 2017 15:34, Takashi Iwai wrote:
> >>> IIRC, the problem isn't about the forward / rewind but about the
> >>> normal data transfer.  In mmap mode, we transfer data on the mmap
> >>> buffer, and update appl_ptr via mmap control.  Both are done without
> >>> notification to the driver (which is intentional for avoiding the
> >>> context switching).
> >>>
> >>> So we want to disable this optimization and always notify to the
> >>> driver.  Disabling mmap status/control is the straight hack as it
> >>> falls back to ioctl and then the driver can know the change.
> >>
> >> There's SNDRV_PCM_IOCTL_HW_SYNC command. In kernel land
> >> implementation, this command is handled with a call of 'struct
> >> snd_pcm_ops.pointer'.
> >>
> >> In alsa-lib, this command is often executed in most cases to handle
> >> PCM frames.
> >
> > The HWSYNC or SYNC_PTR ioctls are used only as the fallback when mmap
> > failed.  It's the exact goal of this patch :)
> 
> Although SYNC_PTR is in the fallback mechanism of alsa-lib, HWSYNC is
> not in.
> 
> (alsa-lib)
> ioctl(SNDRV_PCM_IOCTL_HWSYNC)
> <-snd_pcm_hw_hw_sync()
> = struct snd_pcm_fast_ops.hwsync
>   <-__snd_pcm_hw_hwsync()
>     <-snd_pcm_hwsync()
>     <-snd_pcm_avail()
>       <-snd_pcm_read_areas()
>         <-snd_pcm_mmap_readi()
>         <-snd_pcm_mmap_readn()
>     <-snd_pcm_avail_delay()
>     <-snd_pcm_write_areas()
>       <-snd_pcm_mmap_writei()
>       <-snd_pcm_mmap_writen()
> 
> For a case that applications execute ioctl(2) with
> SNDRV_PCM_IOCTL_READN/READI/WRITEN/WRITEI, in kernel land
> snd_pcm_lib_read1()/snd_pcm_lib_write1() should have calls of 'struct
> snd_pcm_ops.pointer', I think.

It's about the less-optimized code path with snd_pcm_mmap_read/write.
For the code path calling snd_pcm_mmap_begin() /
snd_pcm_mmap_commit(), there is no hwsync ioctl call.


Takashi


More information about the Alsa-devel mailing list