1. 26 Nov, 2012 32 commits
  2. 17 Nov, 2012 8 commits
    • Greg Kroah-Hartman's avatar
      Linux 3.0.52 · 89d2d133
      Greg Kroah-Hartman authored
      89d2d133
    • Takashi Iwai's avatar
      ALSA: usb-audio: Fix mutex deadlock at disconnection · 09337148
      Takashi Iwai authored
      commit 10e44239 upstream.
      
      The recent change for USB-audio disconnection race fixes introduced a
      mutex deadlock again.  There is a circular dependency between
      chip->shutdown_rwsem and pcm->open_mutex, depicted like below, when a
      device is opened during the disconnection operation:
      
      A. snd_usb_audio_disconnect() ->
           card.c::register_mutex ->
             chip->shutdown_rwsem (write) ->
               snd_card_disconnect() ->
                 pcm.c::register_mutex ->
                   pcm->open_mutex
      
      B. snd_pcm_open() ->
           pcm->open_mutex ->
             snd_usb_pcm_open() ->
               chip->shutdown_rwsem (read)
      
      Since the chip->shutdown_rwsem protection in the case A is required
      only for turning on the chip->shutdown flag and it doesn't have to be
      taken for the whole operation, we can reduce its window in
      snd_usb_audio_disconnect().
      Reported-by: default avatarJiri Slaby <jslaby@suse.cz>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      09337148
    • Takashi Iwai's avatar
      ALSA: Fix card refcount unbalance · aaf238ba
      Takashi Iwai authored
      commit 8bb4d9ce upstream.
      
      There are uncovered cases whether the card refcount introduced by the
      commit a0830dbd isn't properly increased or decreased:
      - OSS PCM and mixer success paths
      - When lookup function gets NULL
      
      This patch fixes these places.
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=50251Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      aaf238ba
    • Roland Dreier's avatar
      intel-iommu: Fix AB-BA lockdep report · 919609d3
      Roland Dreier authored
      commit 3e7abe25 upstream.
      
      When unbinding a device so that I could pass it through to a KVM VM, I
      got the lockdep report below.  It looks like a legitimate lock
      ordering problem:
      
       - domain_context_mapping_one() takes iommu->lock and calls
         iommu_support_dev_iotlb(), which takes device_domain_lock (inside
         iommu->lock).
      
       - domain_remove_one_dev_info() starts by taking device_domain_lock
         then takes iommu->lock inside it (near the end of the function).
      
      So this is the classic AB-BA deadlock.  It looks like a safe fix is to
      simply release device_domain_lock a bit earlier, since as far as I can
      tell, it doesn't protect any of the stuff accessed at the end of
      domain_remove_one_dev_info() anyway.
      
      BTW, the use of device_domain_lock looks a bit unsafe to me... it's
      at least not obvious to me why we aren't vulnerable to the race below:
      
        iommu_support_dev_iotlb()
                                                domain_remove_dev_info()
      
        lock device_domain_lock
          find info
        unlock device_domain_lock
      
                                                lock device_domain_lock
                                                  find same info
                                                unlock device_domain_lock
      
                                                free_devinfo_mem(info)
      
        do stuff with info after it's free
      
      However I don't understand the locking here well enough to know if
      this is a real problem, let alone what the best fix is.
      
      Anyway here's the full lockdep output that prompted all of this:
      
           =======================================================
           [ INFO: possible circular locking dependency detected ]
           2.6.39.1+ #1
           -------------------------------------------------------
           bash/13954 is trying to acquire lock:
            (&(&iommu->lock)->rlock){......}, at: [<ffffffff812f6421>] domain_remove_one_dev_info+0x121/0x230
      
           but task is already holding lock:
            (device_domain_lock){-.-...}, at: [<ffffffff812f6508>] domain_remove_one_dev_info+0x208/0x230
      
           which lock already depends on the new lock.
      
           the existing dependency chain (in reverse order) is:
      
           -> #1 (device_domain_lock){-.-...}:
                  [<ffffffff8109ca9d>] lock_acquire+0x9d/0x130
                  [<ffffffff81571475>] _raw_spin_lock_irqsave+0x55/0xa0
                  [<ffffffff812f8350>] domain_context_mapping_one+0x600/0x750
                  [<ffffffff812f84df>] domain_context_mapping+0x3f/0x120
                  [<ffffffff812f9175>] iommu_prepare_identity_map+0x1c5/0x1e0
                  [<ffffffff81ccf1ca>] intel_iommu_init+0x88e/0xb5e
                  [<ffffffff81cab204>] pci_iommu_init+0x16/0x41
                  [<ffffffff81002165>] do_one_initcall+0x45/0x190
                  [<ffffffff81ca3d3f>] kernel_init+0xe3/0x168
                  [<ffffffff8157ac24>] kernel_thread_helper+0x4/0x10
      
           -> #0 (&(&iommu->lock)->rlock){......}:
                  [<ffffffff8109bf3e>] __lock_acquire+0x195e/0x1e10
                  [<ffffffff8109ca9d>] lock_acquire+0x9d/0x130
                  [<ffffffff81571475>] _raw_spin_lock_irqsave+0x55/0xa0
                  [<ffffffff812f6421>] domain_remove_one_dev_info+0x121/0x230
                  [<ffffffff812f8b42>] device_notifier+0x72/0x90
                  [<ffffffff8157555c>] notifier_call_chain+0x8c/0xc0
                  [<ffffffff81089768>] __blocking_notifier_call_chain+0x78/0xb0
                  [<ffffffff810897b6>] blocking_notifier_call_chain+0x16/0x20
                  [<ffffffff81373a5c>] __device_release_driver+0xbc/0xe0
                  [<ffffffff81373ccf>] device_release_driver+0x2f/0x50
                  [<ffffffff81372ee3>] driver_unbind+0xa3/0xc0
                  [<ffffffff813724ac>] drv_attr_store+0x2c/0x30
                  [<ffffffff811e4506>] sysfs_write_file+0xe6/0x170
                  [<ffffffff8117569e>] vfs_write+0xce/0x190
                  [<ffffffff811759e4>] sys_write+0x54/0xa0
                  [<ffffffff81579a82>] system_call_fastpath+0x16/0x1b
      
           other info that might help us debug this:
      
           6 locks held by bash/13954:
            #0:  (&buffer->mutex){+.+.+.}, at: [<ffffffff811e4464>] sysfs_write_file+0x44/0x170
            #1:  (s_active#3){++++.+}, at: [<ffffffff811e44ed>] sysfs_write_file+0xcd/0x170
            #2:  (&__lockdep_no_validate__){+.+.+.}, at: [<ffffffff81372edb>] driver_unbind+0x9b/0xc0
            #3:  (&__lockdep_no_validate__){+.+.+.}, at: [<ffffffff81373cc7>] device_release_driver+0x27/0x50
            #4:  (&(&priv->bus_notifier)->rwsem){.+.+.+}, at: [<ffffffff8108974f>] __blocking_notifier_call_chain+0x5f/0xb0
            #5:  (device_domain_lock){-.-...}, at: [<ffffffff812f6508>] domain_remove_one_dev_info+0x208/0x230
      
           stack backtrace:
           Pid: 13954, comm: bash Not tainted 2.6.39.1+ #1
           Call Trace:
            [<ffffffff810993a7>] print_circular_bug+0xf7/0x100
            [<ffffffff8109bf3e>] __lock_acquire+0x195e/0x1e10
            [<ffffffff810972bd>] ? trace_hardirqs_off+0xd/0x10
            [<ffffffff8109d57d>] ? trace_hardirqs_on_caller+0x13d/0x180
            [<ffffffff8109ca9d>] lock_acquire+0x9d/0x130
            [<ffffffff812f6421>] ? domain_remove_one_dev_info+0x121/0x230
            [<ffffffff81571475>] _raw_spin_lock_irqsave+0x55/0xa0
            [<ffffffff812f6421>] ? domain_remove_one_dev_info+0x121/0x230
            [<ffffffff810972bd>] ? trace_hardirqs_off+0xd/0x10
            [<ffffffff812f6421>] domain_remove_one_dev_info+0x121/0x230
            [<ffffffff812f8b42>] device_notifier+0x72/0x90
            [<ffffffff8157555c>] notifier_call_chain+0x8c/0xc0
            [<ffffffff81089768>] __blocking_notifier_call_chain+0x78/0xb0
            [<ffffffff810897b6>] blocking_notifier_call_chain+0x16/0x20
            [<ffffffff81373a5c>] __device_release_driver+0xbc/0xe0
            [<ffffffff81373ccf>] device_release_driver+0x2f/0x50
            [<ffffffff81372ee3>] driver_unbind+0xa3/0xc0
            [<ffffffff813724ac>] drv_attr_store+0x2c/0x30
            [<ffffffff811e4506>] sysfs_write_file+0xe6/0x170
            [<ffffffff8117569e>] vfs_write+0xce/0x190
            [<ffffffff811759e4>] sys_write+0x54/0xa0
            [<ffffffff81579a82>] system_call_fastpath+0x16/0x1b
      Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
      Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      919609d3
    • Dave Chinner's avatar
      xfs: fix reading of wrapped log data · 11b34bb1
      Dave Chinner authored
      commit 6ce377af upstream.
      
      Commit 44396476 ("xfs: reset buffer pointers before freeing them") in
      3.0-rc1 introduced a regression when recovering log buffers that
      wrapped around the end of log. The second part of the log buffer at
      the start of the physical log was being read into the header buffer
      rather than the data buffer, and hence recovery was seeing garbage
      in the data buffer when it got to the region of the log buffer that
      was incorrectly read.
      Reported-by: default avatarTorsten Kaiser <just.for.lkml@googlemail.com>
      Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Reviewed-by: default avatarMark Tinguely <tinguely@sgi.com>
      Signed-off-by: default avatarBen Myers <bpm@sgi.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      11b34bb1
    • Johan Hovold's avatar
      USB: mos7840: remove unused variable · 87725c35
      Johan Hovold authored
      Fix warning about unused variable introduced by commit e681b66f
      ("USB: mos7840: remove invalid disconnect handling") upstream.
      
      A subsequent fix which removed the disconnect function got rid of the
      warning but that one was only backported to v3.6.
      Reported-by: default avatarJiri Slaby <jslaby@suse.cz>
      Signed-off-by: default avatarJohan Hovold <jhovold@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      87725c35
    • Daniel Vetter's avatar
      drm/i915: clear the entire sdvo infoframe buffer · b7832d49
      Daniel Vetter authored
      commit b6e0e543 upstream.
      
      Like in the case of native hdmi, which is fixed already in
      
      commit adf00b26
      Author: Paulo Zanoni <paulo.r.zanoni@intel.com>
      Date:   Tue Sep 25 13:23:34 2012 -0300
      
          drm/i915: make sure we write all the DIP data bytes
      
      we need to clear the entire sdvo buffer to avoid upsetting the
      display.
      
      Since infoframe buffer writing is now a bit more elaborate, extract it
      into it's own function. This will be useful if we ever get around to
      properly update the ELD for sdvo. Also #define proper names for the
      two buffer indexes with fixed usage.
      
      v2: Cite the right commit above, spotted by Paulo Zanoni.
      
      v3: I'm too stupid to paste the right commit.
      
      v4: Ben Hutchings noticed that I've failed to handle an underflow in
      my loop logic, breaking it for i >= length + 8. Since I've just lost C
      programmer license, use his solution. Also, make the frustrated 0-base
      buffer size a notch more clear.
      Reported-and-tested-by: default avatarJürg Billeter <j@bitron.ch>
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=25732
      Cc: Paulo Zanoni <przanoni@gmail.com>
      Cc: Ben Hutchings <ben@decadent.org.uk>
      Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@gmail.com>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b7832d49
    • Daniel Vetter's avatar
      drm/i915: fixup infoframe support for sdvo · 9615dee4
      Daniel Vetter authored
      commit 81014b9d upstream.
      
      At least the worst offenders:
      - SDVO specifies that the encoder should compute the ecc. Testing also
        shows that we must not send the ecc field, so copy the dip_infoframe
        struct to a temporay place and avoid the ecc field. This way the avi
        infoframe is exactly 17 bytes long, which agrees with what the spec
        mandates as a minimal storage capacity (with the ecc field it would
        be 18 bytes).
      - Only 17 when sending the avi infoframe. The SDVO spec explicitly
        says that sending more data than what the device announces results
        in undefined behaviour.
      - Add __attribute__((packed)) to the avi and spd infoframes, for
        otherwise they're wrongly aligned. Noticed because the avi infoframe
        ended up being 18 bytes large instead of 17. We haven't noticed this
        yet because we don't use the uint16_t fields yet (which are the only
        ones that would be wrongly aligned).
      
      This regression has been introduce by
      
      3c17fe4b is the first bad commit
      commit 3c17fe4b
      Author: David Härdeman <david@hardeman.nu>
      Date:   Fri Sep 24 21:44:32 2010 +0200
      
          i915: enable AVI infoframe for intel_hdmi.c [v4]
      
      Patch tested on my g33 with a sdvo hdmi adaptor.
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=25732
      Tested-by: Peter Ross <pross@xvid.org> (G35 SDVO-HDMI)
      Reviewed-by: default avatarEugeni Dodonov <eugeni.dodonov@intel.com>
      Signed-Off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Ben Hutchings <ben@decadent.org.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9615dee4