Skip to content
  • Takashi Iwai's avatar
    ALSA: usb-audio: Allow non-vmalloc buffer for PCM buffers · f274baa4
    Takashi Iwai authored
    
    
    Currently, USB-audio driver allocates the PCM buffer via vmalloc(), as
    this serves merely as an intermediate buffer that is copied to each
    URB transfer buffer.  This works well in general on x86, but on some
    archs this may result in cache coherency issues when mmap is used.
    OTOH, it works also on such arch unless mmap is used.
    
    This patch is a step for mitigating the inconvenience; a new module
    option "use_vmalloc" is provided so that user can choose to allocate
    the DMA coherent buffer instead of the existing vmalloc buffer.
    The drawback is that it'd be the standard dma_alloc_coherent() calls
    and the system would require contiguous pages on non-x86 archs.
    
    Note that it's a global option and not dynamically switchable since
    the buffer is pre-allocated at the probe time.  In theory, it's
    possible to be switchable, but it'd be trickier and racier.
    
    As default use_vmalloc option is set to true, so that the old behavior
    is kept.  For allowing the coherent mmap on ARM or MIPS, pass
    use_vmalloc=0 option explicitly.
    
    Reported-and-tested-by: default avatarDaniel Danzberger <daniel@dd-wrt.com>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    f274baa4