1. 26 8月, 2015 1 次提交
    • T
      ALSA: usb-audio: Avoid nested autoresume calls · 47ab1545
      Takashi Iwai 提交于
      After the recent fix of runtime PM for USB-audio driver, we got a
      lockdep warning like:
      
        =============================================
        [ INFO: possible recursive locking detected ]
        4.2.0-rc8+ #61 Not tainted
        ---------------------------------------------
        pulseaudio/980 is trying to acquire lock:
         (&chip->shutdown_rwsem){.+.+.+}, at: [<ffffffffa0355dac>] snd_usb_autoresume+0x1d/0x52 [snd_usb_audio]
        but task is already holding lock:
         (&chip->shutdown_rwsem){.+.+.+}, at: [<ffffffffa0355dac>] snd_usb_autoresume+0x1d/0x52 [snd_usb_audio]
      
      This comes from snd_usb_autoresume() invoking down_read() and it's
      used in a nested way.  Although it's basically safe, per se (as these
      are read locks), it's better to reduce such spurious warnings.
      
      The read lock is needed to guarantee the execution of "shutdown"
      (cleanup at disconnection) task after all concurrent tasks are
      finished.  This can be implemented in another better way.
      
      Also, the current check of chip->in_pm isn't good enough for
      protecting the racy execution of multiple auto-resumes.
      
      This patch rewrites the logic of snd_usb_autoresume() & co; namely,
      - The recursive call of autopm is avoided by the new refcount,
        chip->active.  The chip->in_pm flag is removed accordingly.
      - Instead of rwsem, another refcount, chip->usage_count, is introduced
        for tracking the period to delay the shutdown procedure.  At
        the last clear of this refcount, wake_up() to the shutdown waiter is
        called.
      - The shutdown flag is replaced with shutdown atomic count; this is
        for reducing the lock.
      - Two new helpers are introduced to simplify the management of these
        refcounts; snd_usb_lock_shutdown() increases the usage_count, checks
        the shutdown state, and does autoresume.  snd_usb_unlock_shutdown()
        does the opposite.  Most of mixer and other codes just need this,
        and simply returns an error if it receives an error from lock.
      
      Fixes: 9003ebb1 ('ALSA: usb-audio: Fix runtime PM unbalance')
      Reported-and-tested-by: NAlexnader Kuleshov <kuleshovmail@gmail.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      47ab1545
  2. 20 8月, 2015 1 次提交
  3. 14 8月, 2015 1 次提交
  4. 11 6月, 2015 1 次提交
  5. 03 6月, 2015 1 次提交
  6. 29 5月, 2015 1 次提交
  7. 18 1月, 2015 1 次提交
  8. 21 11月, 2014 2 次提交
    • T
      ALSA: usb-audio: Allow quirks to handle own resume and proc dump · 3360b84b
      Takashi Iwai 提交于
      So far, we blindly assumed that the all usb-audio mixer elements
      follow the standard and apply the standard resume method for the
      registered elements in the id_elems[] list.  However, some quirks
      really need the own resume and it's incomplete for now.
      
      This patch enhances the resume handling in two folds:
      - split some fields in struct usb_mixer_elem_info into a smaller
        header struct (usb_mixer_elem_list) for keeping the minimal
        information in the linked-list; the usb_mixer_elem_info embeds this
        header struct instead
      - add resume and dump callbacks to usb_mixer_elem_list struct to allow
        quirks providing the own methods
      
      For the standard mixer elements, these new callbacks are set to the
      standard ones as default, thus there is no functional change by this
      patch yet.
      
      The dump and resume callbacks are typedef'ed for ease of later patches
      using arrays of such function pointers.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      3360b84b
    • T
      ALSA: usb-audio: Refactor ignore_ctl_error checks · 5aeee342
      Takashi Iwai 提交于
      Introduce an internal helper macro for avoiding many open codes.
      
      The only slight behavior change is in a couple of get ballcks where
      the value is reset at error no matter whether ignore_ctl_error is set
      or not.  Actually this is even safer than before.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      5aeee342
  9. 17 11月, 2014 1 次提交
  10. 13 11月, 2014 1 次提交
  11. 04 11月, 2014 1 次提交
  12. 19 10月, 2014 1 次提交
  13. 04 8月, 2014 1 次提交
  14. 25 5月, 2014 2 次提交
  15. 28 4月, 2014 1 次提交
  16. 05 3月, 2014 1 次提交
  17. 26 2月, 2014 1 次提交
    • T
      ALSA: usb-audio: Use standard printk helpers · 0ba41d91
      Takashi Iwai 提交于
      Convert with dev_err() and co from snd_printk(), etc.
      As there are too deep indirections (e.g. ep->chip->dev->dev),
      a few new local macros, usb_audio_err() & co, are introduced.
      
      Also, the device numbers in some messages are dropped, as they are
      shown in the prefix automatically.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      0ba41d91
  18. 14 2月, 2014 1 次提交
  19. 03 2月, 2014 1 次提交
  20. 26 9月, 2013 1 次提交
  21. 12 8月, 2013 1 次提交
  22. 17 6月, 2013 1 次提交
  23. 05 6月, 2013 1 次提交
  24. 20 3月, 2013 3 次提交
  25. 11 2月, 2013 1 次提交
  26. 27 1月, 2013 1 次提交
  27. 29 11月, 2012 4 次提交
  28. 30 10月, 2012 2 次提交
    • T
      ALSA: usb-audio: Use rwsem for disconnect protection · 34f3c89f
      Takashi Iwai 提交于
      Replace mutex with rwsem for codec->shutdown protection so that
      concurrent accesses are allowed.
      
      Also add the protection to snd_usb_autosuspend() and
      snd_usb_autoresume(), too.
      Reported-by: NMatthieu CASTET <matthieu.castet@parrot.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      34f3c89f
    • T
      ALSA: usb-audio: Fix races at disconnection · 978520b7
      Takashi Iwai 提交于
      Close some races at disconnection of a USB audio device by adding the
      chip->shutdown_mutex and chip->shutdown check at appropriate places.
      
      The spots to put bandaids are:
      - PCM prepare, hw_params and hw_free
      - where the usb device is accessed for communication or get speed, in
       mixer.c and others; the device speed is now cached in subs->speed
       instead of accessing to chip->dev
      
      The accesses in PCM open and close don't need the mutex protection
      because these are already handled in the core PCM disconnection code.
      
      The autosuspend/autoresume codes are still uncovered by this patch
      because of possible mutex deadlocks.  They'll be covered by the
      upcoming change to rwsem.
      
      Also the mixer codes are untouched, too.  These will be fixed in
      another patch, too.
      Reported-by: NMatthieu CASTET <matthieu.castet@parrot.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      978520b7
  29. 20 9月, 2012 1 次提交
  30. 15 5月, 2012 1 次提交
  31. 24 4月, 2012 2 次提交