1. 13 Apr, 2012 37 commits
  2. 02 Apr, 2012 3 commits
    • Greg Kroah-Hartman's avatar
      Linux 3.0.27 · 8aa122f3
      Greg Kroah-Hartman authored
      8aa122f3
    • Matthew Garrett's avatar
      ASPM: Fix pcie devices with non-pcie children · 85969df4
      Matthew Garrett authored
      commit c9651e70 upstream.
      
      Since 3.2.12 and 3.3, some systems are failing to boot with a BUG_ON.
      Some other systems using the pata_jmicron driver fail to boot because no
      disks are detected.  Passing pcie_aspm=force on the kernel command line
      works around it.
      
      The cause: commit 4949be16 ("PCI: ignore pre-1.1 ASPM quirking when
      ASPM is disabled") changed the behaviour of pcie_aspm_sanity_check() to
      always return 0 if aspm is disabled, in order to avoid cases where we
      changed ASPM state on pre-PCIe 1.1 devices.
      
      This skipped the secondary function of pcie_aspm_sanity_check which was
      to avoid us enabling ASPM on devices that had non-PCIe children, causing
      trouble later on.  Move the aspm_disabled check so we continue to honour
      that scenario.
      
      Addresses https://bugzilla.kernel.org/show_bug.cgi?id=42979 and
                http://bugs.debian.org/665420
      
      Reported-by: Romain Francoise <romain@orebokech.com> # kernel panic
      Reported-by: Chris Holland <bandidoirlandes@gmail.com> # disk detection trouble
      Signed-off-by: default avatarMatthew Garrett <mjg@redhat.com>
      Tested-by: Hatem Masmoudi <hatem.masmoudi@gmail.com> # Dell Latitude E5520
      Tested-by: janek <jan0x6c@gmail.com> # pata_jmicron with JMB362/JMB363
      [jn: with more symptoms in log message]
      Signed-off-by: default avatarJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      85969df4
    • Yoshii Takashi's avatar
      serial: sh-sci: fix a race of DMA submit_tx on transfer · c2de397f
      Yoshii Takashi authored
      commit 49d4bcad upstream.
      
      When DMA is enabled, sh-sci transfer begins with
       uart_start()
        sci_start_tx()
          if (cookie_tx < 0) schedule_work()
      Then, starts DMA when wq scheduled, -- (A)
       process_one_work()
        work_fn_rx()
         cookie_tx = desc->submit_tx()
      And finishes when DMA transfer ends, -- (B)
       sci_dma_tx_complete()
        async_tx_ack()
        cookie_tx = -EINVAL
        (possible another schedule_work())
      
      This A to B sequence is not reentrant, since controlling variables
      (for example, cookie_tx above) are not queues nor lists. So, they
      must be invoked as A B A B..., otherwise results in kernel crash.
      
      To ensure the sequence, sci_start_tx() seems to test if cookie_tx < 0
      (represents "not used") to call schedule_work().
      But cookie_tx will not be set (to a cookie, also means "used") until
      in the middle of work queue scheduled function work_fn_tx().
      
      This gap between the test and set allows the breakage of the sequence
      under the very frequently call of uart_start().
      Another gap between async_tx_ack() and another schedule_work() results
      in the same issue, too.
      
      This patch introduces a new condition "cookie_tx == 0" just to mark
      it is "busy" and assign it within spin-locked region to fill the gaps.
      Signed-off-by: default avatarTakashi Yoshii <takashi.yoshii.zj@renesas.com>
      Reviewed-by: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c2de397f