• Tzung-Bi Shih's avatar
    ASoC: max98090: revert "ASoC: max98090: fix lockdep warning" · 08df0d9a
    Tzung-Bi Shih authored
    Commit 2dc98af6 ("ASoC: max98090: fix lockdep warning") introduced
    a helpful-less small lock: shdn_lock.  Reverts the commit.
    
    Reasons:
    
    1. Lockdep should not be happy by either the original or current code.
    From lockdep's point of view, there is a lock inversion anyway.
    
    Let d = dapm_mutex, c = controls_rwsem, s = shdn_lock,
    
    From the reported calling stack: lock acquisition order of
    snd_soc_register_card() is: d -> c.
    > snd_ctl_add_replace+0x3c/0x84
    > dapm_create_or_share_kcontrol+0x24c/0x2e0
    > snd_soc_dapm_new_widgets+0x308/0x594
    > snd_soc_bind_card+0x80c/0xad4
    > devm_snd_soc_register_card+0x34/0x6c
    
    If calling snd_soc_dapm_put_enum_double() in kcontrol's put (e.g.
    SOC_DAPM_ENUM_EXT), lock acquisition order is: c -> d.  Note that,
    snd_soc_dapm_put_enum_double() acquires d.
    
    The possible lock inversion is always there if registering sound card
    and putting mixer control happen at the same time.  In fact, it never
    happens because the control device don't show up to the userspace until
    the sound card build success.
    
    Commit 2dc98af6 ("ASoC: max98090: fix lockdep warning") changes the
    order to: c -> s -> d.  The lock inversion is still there.
    
    2. Commit 62d5ae4c ("ASoC: max98090: save and restore SHDN when
    changing sensitive registers SHDN bit") designed to use dapm_mutex to
    protect SHDN bit.  Use a separate lock breaks the protection.
    
    DAPM changes SHDN bit automatically when it finds the path.  Thus, any
    code wants to change the SHDN bit, need to acquire the dapm_mutex first.
    
    > SND_SOC_DAPM_SUPPLY("SHDN", M98090_REG_DEVICE_SHUTDOWN,
    >        M98090_SHDNN_SHIFT, 0, NULL, 0),
    
    Fixes: 2dc98af6 ("ASoC: max98090: fix lockdep warning")
    Signed-off-by: default avatarTzung-Bi Shih <tzungbi@google.com>
    Link: https://lore.kernel.org/r/20200117073814.82441-2-tzungbi@google.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    08df0d9a
max98090.h 44.9 KB