• Takashi Iwai's avatar
    ALSA: pcm: Add the support for sync-stop operation · 1e850bee
    Takashi Iwai authored
    The standard programming model of a PCM sound driver is to process
    snd_pcm_period_elapsed() from an interrupt handler.  When a running
    stream is stopped, PCM core calls the trigger-STOP PCM ops, sets the
    stream state to SETUP, and moves on to the next step.  This is
    performed in an atomic manner -- this could be called from the interrupt
    context, after all.
    
    The problem is that, if the stream goes further and reaches to the
    CLOSE state immediately, the stream might be still being processed in
    snd_pcm_period_elapsed() in the interrupt context, and hits a NULL
    dereference.  Such a crash happens because of the atomic operation,
    and we can't wait until the stream-stop finishes.
    
    For addressing such a problem, this commit adds a new PCM ops,
    sync_stop.  This gets called at the appropriate places that need a
    sync with the stream-stop, i.e. at hw_params, prepare and hw_free.
    
    Some drivers already have a similar mechanism implemented locally, and
    we'll refactor the code later.
    
    Link: https://lore.kernel.org/r/20191117085308.23915-7-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    1e850bee
pcm_native.c 103 KB