On Mon, Jan 17, 2011 at 08:35:27PM -0600, Misael Lopez Cruz wrote:
Multiple calls to dapm_power_widgets() can create a race condition causing power list to be corrupted. Those scenarios can occur in multistream usecases, stream start/stop along with simultaneous update power calls (mixer, mux, dapm_sync, stream_event).
A new 'dapm_mutex' is added to soc_card, which is held while power list is created.
This needs a bit more analysis - why are we getting multiple simultaneous calls to dapm_power_widgets() and is that itself safe? The ASoC locking model has always been to have a big lock around the entire card rather than to lock subcomponents, and for example this isn't going to make sure we're consistent with register map accesses from other parts of the code.