1. 01 10月, 2013 9 次提交
    • L
      ACPI / IPMI: Cleanup some inclusion codes · 935a9e3f
      Lv Zheng 提交于
      This (trivial) patch:
       1. Deletes several useless header inclusions.
       2. Kernel codes should always include <linux/acpi.h> instead of
          <acpi/acpi_bus.h> or <acpi/acpi_drivers.h> where many conditional
          declarations are handled.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Reviewed-by: NHuang Ying <ying.huang@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      935a9e3f
    • L
      ACPI / IPMI: Cleanup some initialization codes · a194aa43
      Lv Zheng 提交于
      This (trivial) patch.
       1. Changes dynamic mutex initialization to static initialization.
       2. Removes one acpi_ipmi_init() variable initialization as it is not
          needed.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Reviewed-by: NHuang Ying <ying.huang@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      a194aa43
    • L
      ACPI / IPMI: Cleanup several acpi_ipmi_device members · 2fb037b8
      Lv Zheng 提交于
      This (trivial) patch:
       1. Deletes a member of the acpi_ipmi_device, smi_data, which is not
          actually used.
       2. Updates a member of the acpi_ipmi_device, pnp_dev, which is only used
          by dev_warn() invocations, so changes it to a struct device.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Reviewed-by: NHuang Ying <ying.huang@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      2fb037b8
    • L
      ACPI / IPMI: Add reference counting for ACPI IPMI transfers · 7b984477
      Lv Zheng 提交于
      This patch adds reference counting for ACPI IPMI transfers to tune the
      locking granularity of tx_msg_lock.
      
      This patch also makes the whole acpi_ipmi module's coding style consistent
      by using reference counting for all its objects (i.e., acpi_ipmi_device and
      acpi_ipmi_msg).
      
      The acpi_ipmi_msg handling is re-designed using referece counting.
       1. tx_msg is always unlinked before complete(), so that it is safe to put
          complete() out side of tx_msg_lock.
       2. tx_msg reference counters are incremented before calling
          ipmi_request_settime() and tx_msg_lock protection is added to
          ipmi_cancel_tx_msg() so that a complete() can be safely called in
          parellel with tx_msg unlinking in failure cases.
       3. tx_msg holds a reference to acpi_ipmi_device so that it can be flushed
          and freed in the contexts other than acpi_ipmi_space_handler().
      
      The lockdep_chains shows all acpi_ipmi locks are leaf locks after the
      tuning:
       1. ipmi_lock is always leaf:
          irq_context: 0
          [ffffffff81a943f8] smi_watchers_mutex
          [ffffffffa06eca60] driver_data.ipmi_lock
          irq_context: 0
          [ffffffff82767b40] &buffer->mutex
          [ffffffffa00a6678] s_active#103
          [ffffffffa06eca60] driver_data.ipmi_lock
       2. without this patch applied, lock used by complete() is held after
          holding tx_msg_lock:
          irq_context: 0
          [ffffffff82767b40] &buffer->mutex
          [ffffffffa00a6678] s_active#103
          [ffffffffa06ecce8] &(&ipmi_device->tx_msg_lock)->rlock
          irq_context: 1
          [ffffffffa06ecce8] &(&ipmi_device->tx_msg_lock)->rlock
          irq_context: 1
          [ffffffffa06ecce8] &(&ipmi_device->tx_msg_lock)->rlock
          [ffffffffa06eccf0] &x->wait#25
          irq_context: 1
          [ffffffffa06ecce8] &(&ipmi_device->tx_msg_lock)->rlock
          [ffffffffa06eccf0] &x->wait#25
          [ffffffff81e36620] &p->pi_lock
          irq_context: 1
          [ffffffffa06ecce8] &(&ipmi_device->tx_msg_lock)->rlock
          [ffffffffa06eccf0] &x->wait#25
          [ffffffff81e36620] &p->pi_lock
          [ffffffff81e5d0a8] &rq->lock
       3. with this patch applied, tx_msg_lock is always leaf:
          irq_context: 0
          [ffffffff82767b40] &buffer->mutex
          [ffffffffa00a66d8] s_active#107
          [ffffffffa07ecdc8] &(&ipmi_device->tx_msg_lock)->rlock
          irq_context: 1
          [ffffffffa07ecdc8] &(&ipmi_device->tx_msg_lock)->rlock
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Reviewed-by: NHuang Ying <ying.huang@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      7b984477
    • L
      ACPI / IPMI: Use global IPMI operation region handler · e96a94ed
      Lv Zheng 提交于
      It is found on a real machine, in its ACPI namespace, the IPMI
      OperationRegions (in the ACPI000D - ACPI power meter) are not defined under
      the IPMI system interface device (the IPI0001 with KCS type returned from
      _IFT control method):
        Device (PMI0)
        {
            Name (_HID, "ACPI000D")  // _HID: Hardware ID
            OperationRegion (SYSI, IPMI, 0x0600, 0x0100)
            Field (SYSI, BufferAcc, Lock, Preserve)
            {
                AccessAs (BufferAcc, 0x01),
                Offset (0x58),
                SCMD,   8,
                GCMD,   8
            }
      
            OperationRegion (POWR, IPMI, 0x3000, 0x0100)
            Field (POWR, BufferAcc, Lock, Preserve)
            {
                AccessAs (BufferAcc, 0x01),
                Offset (0xB3),
                GPMM,   8
            }
        }
      
        Device (PCI0)
        {
            Device (ISA)
            {
                Device (NIPM)
                {
                    Name (_HID, EisaId ("IPI0001"))  // _HID: Hardware ID
                    Method (_IFT, 0, NotSerialized)  // _IFT: IPMI Interface Type
                    {
                        Return (0x01)
                    }
                }
            }
        }
      
      Current ACPI_IPMI code registers IPMI operation region handler on a
      per-device basis, so for the above namespace the IPMI operation region
      handler is registered only under the scope of \_SB.PCI0.ISA.NIPM.  Thus
      when an IPMI operation region field of \PMI0 is accessed, there are errors
      reported on such platform:
        ACPI Error: No handlers for Region [IPMI]
        ACPI Error: Region IPMI(7) has no handler
      The solution is to install an IPMI operation region handler from root node
      so that every object that defines IPMI OperationRegion can get an address
      space handler registered.
      
      When an IPMI operation region field is accessed, the Network Function
      (0x06 for SYSI and 0x30 for POWR) and the Command (SCMD, GCMD, GPMM) are
      passed to the operation region handler, there is no system interface
      specified by the BIOS.  The patch tries to select one system interface by
      monitoring the system interface notification.  IPMI messages passed from
      the ACPI codes are sent to this selected global IPMI system interface.
      
      The ACPI_IPMI will always select the first registered IPMI interface
      with an ACPI handle (i.e., defined in the ACPI namespace).  It's hard to
      determine the selection when there are multiple IPMI system interfaces
      defined in the ACPI namespace. According to the IPMI specification:
      
        A BMC device may make available multiple system interfaces, but only one
        management controller is allowed to be 'active' BMC that provides BMC
        functionality for the system (in case of a 'partitioned' system, there
        can be only one active BMC per partition).  Only the system interface(s)
        for the active BMC allowed to respond to the 'Get Device Id' command.
      
      According to the ipmi_si desigin:
      
        The ipmi_si registeration notifications can only happen after a
        successful "Get Device ID" command.
      
      Thus it should be OK for non-partitioned systems to do such selection.
      However, we do not have much knowledge on 'partitioned' systems.
      
      References: https://bugzilla.kernel.org/show_bug.cgi?id=46741Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Reviewed-by: NHuang Ying <ying.huang@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      e96a94ed
    • L
      ACPI / IPMI: Fix race caused by the unprotected ACPI IPMI user · a1a69b29
      Lv Zheng 提交于
      This patch uses reference counting to fix the race caused by the
      unprotected ACPI IPMI user.
      
      There are two rules for using the ipmi_si APIs:
       1. In ipmi_si, ipmi_destroy_user() can ensure that no ipmi_recv_msg will
          be passed to ipmi_msg_handler(), but ipmi_request_settime() can not
          use an invalid ipmi_user_t.  This means the ipmi_si users must ensure
          that there won't be any local references on ipmi_user_t before invoking
          ipmi_destroy_user().
       2. In ipmi_si, the smi_gone()/new_smi() callbacks are protected by
          smi_watchers_mutex, so their execution is serialized.  But as a
          new smi can re-use a freed intf_num, it requires that the callback
          implementation must not use intf_num as an identification mean or it
          must ensure all references to the previous smi are all dropped before
          exiting smi_gone() callback.
      
      As the acpi_ipmi_device->user_interface check in acpi_ipmi_space_handler()
      can happen before setting user_interface to NULL and codes after the check
      in acpi_ipmi_space_handler() can happen after user_interface becomes NULL,
      the on-going acpi_ipmi_space_handler() still can pass an invalid
      acpi_ipmi_device->user_interface to ipmi_request_settime().  Such race
      conditions are not allowed by the IPMI layer's API design as a crash will
      happen in ipmi_request_settime() if something like that happens.
      
      This patch follows the ipmi_devintf.c design:
       1. Invoke ipmi_destroy_user() after the reference count of
          acpi_ipmi_device drops to 0.  References of acpi_ipmi_device dropping
          to 0 also means tx_msg related to this acpi_ipmi_device are all freed.
          This matches the IPMI layer's API calling rule on ipmi_destroy_user()
          and ipmi_request_settime().
       2. ipmi_flush_tx_msg() is performed so that no on-going tx_msg can still be
          running in acpi_ipmi_space_handler().  And it is invoked after invoking
          __ipmi_dev_kill() where acpi_ipmi_device is deleted from the list with a
          "dead" flag set, and the "dead" flag check is also introduced to the
          point where a tx_msg is going to be added to the tx_msg_list so that no
          new tx_msg can be created after returning from the __ipmi_dev_kill().
       3. The waiting codes in ipmi_flush_tx_msg() is deleted because it is not
          required since this patch ensures no acpi_ipmi reference is still held
          for ipmi_user_t before calling ipmi_destroy_user() and
          ipmi_destroy_user() can ensure no more ipmi_msg_handler() can happen
          after returning from ipmi_destroy_user().
       4. The flushing of tx_msg is also moved out of ipmi_lock in this patch.
      
      The forthcoming IPMI operation region handler installation changes also
      requires acpi_ipmi_device be handled in this style.
      
      The header comment of the file is also updated due to this design change.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Reviewed-by: NHuang Ying <ying.huang@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      a1a69b29
    • L
      ACPI / IPMI: Fix race caused by the timed out ACPI IPMI transfers · 8584ec6a
      Lv Zheng 提交于
      This patch fixes races caused by timed out ACPI IPMI transfers.
      
      This patch uses timeout mechanism provided by ipmi_si to avoid the race
      that the msg_done flag is set but without any protection, its content can
      be invalid.  Thanks for the suggestion of Corey Minyard.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Reviewed-by: NHuang Ying <ying.huang@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      8584ec6a
    • L
      ACPI / IPMI: Fix race caused by the unprotected ACPI IPMI transfers · 5ac557ef
      Lv Zheng 提交于
      This patch fixes races caused by unprotected ACPI IPMI transfers.
      
      We can see that the following crashes may occur:
       1. There is no tx_msg_lock held for iterating tx_msg_list in
          ipmi_flush_tx_msg() while it may be unlinked on failure in
          parallel in acpi_ipmi_space_handler() under tx_msg_lock.
       2. There is no lock held for freeing tx_msg in acpi_ipmi_space_handler()
          while it may be accessed in parallel in ipmi_flush_tx_msg() and
          ipmi_msg_handler().
      
      This patch enhances tx_msg_lock to protect all tx_msg accesses to solve
      this issue.  Then tx_msg_lock is always held around complete() and tx_msg
      accesses.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Reviewed-by: NHuang Ying <ying.huang@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      5ac557ef
    • L
      ACPI / IPMI: Fix potential response buffer overflow · 6b68f03f
      Lv Zheng 提交于
      This patch enhances sanity checks on message size to avoid potential buffer
      overflow.
      
      The kernel IPMI message size is IPMI_MAX_MSG_LENGTH(272 bytes) while the
      ACPI specification defined IPMI message size is 64 bytes.  The difference
      is not handled by the original codes.  This may cause crash in the response
      handling codes.
      
      This patch closes this gap and also combines rx_data/tx_data to use single
      data/len pair since they need not be seperate.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Reviewed-by: NHuang Ying <ying.huang@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      6b68f03f
  2. 29 9月, 2013 1 次提交
    • Y
      PCI: Workaround missing pci_set_master in pci drivers · f41f064c
      Yinghai Lu 提交于
      Ben Herrenschmidt found that commit 928bea96 ("PCI: Delay enabling
      bridges until they're needed") breaks PCI in some powerpc environments.
      
      The reason is that the PCIe port driver will call pci_enable_device() on
      the bridge, so the device is enabled, but skips pci_set_master because
      pcie_port_auto and no acpi on powerpc.
      
      Because of that, pci_enable_bridge() later on (called as a result of the
      child device driver doing pci_enable_device) will see the bridge as
      already enabled and will not call pci_set_master() on it.
      
      Fixed by add checking in pci_enable_bridge, and call pci_set_master
      if driver skip that.
      
      That will make the code more robot and wade off problem for missing
      pci_set_master in drivers.
      Reported-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NYinghai Lu <yinghai@kernel.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      f41f064c
  3. 28 9月, 2013 9 次提交
    • J
      i2c: ismt: initialize DMA buffer · bf416910
      James Ralston 提交于
      This patch adds code to initialize the DMA buffer to compensate for
      possible hardware data corruption.
      Signed-off-by: NJames Ralston <james.d.ralston@intel.com>
      [wsa: changed to use 'sizeof']
      Signed-off-by: NWolfram Sang <wsa@the-dreams.de>
      bf416910
    • R
      drm/msm: use drm_gem_dumb_destroy helper · 30600a90
      Rob Clark 提交于
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      30600a90
    • R
      drm/msm: deal with mach/iommu.h removal · 33b55963
      Rob Clark 提交于
      We still need an API exported by msm iommu driver (but not visible in
      any public header anymore).  For now, just declare the prototype
      ourselves, but when msm iommu driver provides a better option, use that
      instead.
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      33b55963
    • J
      drm/msm: Remove iommu include from mdp4_kms.c · c55d1c41
      Joerg Roedel 提交于
      The include file has been removed and the file does not
      need it anyway, so remove it. Fixes a compile error.
      Signed-off-by: NJoerg Roedel <joro@8bytes.org>
      Signed-off-by: NRob Clark <robdclark@gmail.com>
      c55d1c41
    • T
      drm/msm: Odd PTR_ERR usage · e4826a94
      Thomas Meyer 提交于
      The variable priv->kms is not initialized yet.
      
      Found by "scripts/coccinelle/tests/odd_ptr_err.cocci".
      PTR_ERR should access the value just tested by IS_ERR.
      Signed-off-by: NThomas Meyer <thomas@m3y3r.de>
      e4826a94
    • C
      i2c: designware: 10-bit addressing mode enabling if I2C_DYNAMIC_TAR_UPDATE is set · bd63ace4
      Chew, Chiau Ee 提交于
      According to Designware I2C spec, if I2C_DYNAMIC_TAR_UPDATE is set to 1,
      the 10-bit addressing mode is controlled by IC_10BITADDR_MASTER bit of
      IC_TAR register instead of IC_CON register. The IC_10BITADDR_MASTER
      in IC_CON register becomes read-only copy. Since I2C_DYNAMIC_TAR_UPDATE
      value can't be detected from hardware register, so we will always set the
      IC_10BITADDR_MASTER bit in both IC_CON and IC_TAR register whenever 10-bit
      addresing mode is requested by user application.
      Signed-off-by: NChew, Chiau Ee <chiau.ee.chew@intel.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Signed-off-by: NWolfram Sang <wsa@the-dreams.de>
      bd63ace4
    • T
      i2c: mv64xxx: Do not use writel_relaxed() · 85b3a935
      Thierry Reding 提交于
      The driver is used on PowerPC which don't provide writel_relaxed(). This
      breaks the c2k and prpmc2800 default configurations. To fix the build,
      turn the calls to writel_relaxed() into writel(). The impacts for ARM
      should be minimal.
      Signed-off-by: NThierry Reding <treding@nvidia.com>
      Signed-off-by: NWolfram Sang <wsa@the-dreams.de>
      85b3a935
    • T
      i2c: mv64xxx: Fix some build warnings · c1a99467
      Thierry Reding 提交于
      Some functions and variables are only used if the configuration selects
      HAVE_CLK. Protect them with a corresponding #ifdef CONFIG_HAVE_CLK block
      to avoid compiler warnings.
      Signed-off-by: NThierry Reding <treding@nvidia.com>
      [wsa: added marker to #endif]
      Signed-off-by: NWolfram Sang <wsa@the-dreams.de>
      c1a99467
    • K
      i2c: s3c2410: fix clk_disable/clk_unprepare WARNings · 15336913
      Kim Phillips 提交于
      commit d16933b3 "i2c: s3c2410: Move
      location of clk_prepare_enable() call in probe function" refactored
      clk_enable and clk_disable calls yet neglected to remove the
      clk_disable_unprepare call in the module's remove().
      
      It helps remove warnings on an arndale during unbind:
      
      echo 12c90000.i2c > /sys/bus/platform/devices/12c90000.i2c/driver/unbind
      
      ------------[ cut here ]------------
      WARNING: CPU: 0 PID: 2548 at drivers/clk/clk.c:842 clk_disable+0x18/0x24()
      Modules linked in:
      CPU: 0 PID: 2548 Comm: bash Not tainted 3.11.0-next-20130916-00003-gf4bddbc #6
      [<c0014d48>] (unwind_backtrace+0x0/0xf8) from [<c00117d0>] (show_stack+0x10/0x14)
      [<c00117d0>] (show_stack+0x10/0x14) from [<c0361be8>] (dump_stack+0x6c/0xac)
      [<c0361be8>] (dump_stack+0x6c/0xac) from [<c001d864>] (warn_slowpath_common+0x64/0x88)
      [<c001d864>] (warn_slowpath_common+0x64/0x88) from [<c001d8a4>] (warn_slowpath_null+0x1c/0x24)
      [<c001d8a4>] (warn_slowpath_null+0x1c/0x24) from [<c02c4a64>] (clk_disable+0x18/0x24)
      [<c02c4a64>] (clk_disable+0x18/0x24) from [<c028d0b0>] (s3c24xx_i2c_remove+0x28/0x70)
      [<c028d0b0>] (s3c24xx_i2c_remove+0x28/0x70) from [<c0217a10>] (platform_drv_remove+0x18/0x1c)
      [<c0217a10>] (platform_drv_remove+0x18/0x1c) from [<c0216358>] (__device_release_driver+0x58/0xb4)
      [<c0216358>] (__device_release_driver+0x58/0xb4) from [<c02163d0>] (device_release_driver+0x1c/0x28)
      [<c02163d0>] (device_release_driver+0x1c/0x28) from [<c02153c0>] (unbind_store+0x58/0x90)
      [<c02153c0>] (unbind_store+0x58/0x90) from [<c0214c90>] (drv_attr_store+0x20/0x2c)
      [<c0214c90>] (drv_attr_store+0x20/0x2c) from [<c01032c0>] (sysfs_write_file+0x168/0x198)
      [<c01032c0>] (sysfs_write_file+0x168/0x198) from [<c00ae1c0>] (vfs_write+0xb0/0x194)
      [<c00ae1c0>] (vfs_write+0xb0/0x194) from [<c00ae594>] (SyS_write+0x3c/0x70)
      [<c00ae594>] (SyS_write+0x3c/0x70) from [<c000e3e0>] (ret_fast_syscall+0x0/0x30)
      ---[ end trace 4c9f9403066f57a6 ]---
      ------------[ cut here ]------------
      WARNING: CPU: 0 PID: 2548 at drivers/clk/clk.c:751 clk_unprepare+0x14/0x1c()
      Modules linked in:
      CPU: 0 PID: 2548 Comm: bash Tainted: G        W    3.11.0-next-20130916-00003-gf4bddbc #6
      [<c0014d48>] (unwind_backtrace+0x0/0xf8) from [<c00117d0>] (show_stack+0x10/0x14)
      [<c00117d0>] (show_stack+0x10/0x14) from [<c0361be8>] (dump_stack+0x6c/0xac)
      [<c0361be8>] (dump_stack+0x6c/0xac) from [<c001d864>] (warn_slowpath_common+0x64/0x88)
      [<c001d864>] (warn_slowpath_common+0x64/0x88) from [<c001d8a4>] (warn_slowpath_null+0x1c/0x24)
      [<c001d8a4>] (warn_slowpath_null+0x1c/0x24) from [<c02c5834>] (clk_unprepare+0x14/0x1c)
      [<c02c5834>] (clk_unprepare+0x14/0x1c) from [<c028d0b8>] (s3c24xx_i2c_remove+0x30/0x70)
      [<c028d0b8>] (s3c24xx_i2c_remove+0x30/0x70) from [<c0217a10>] (platform_drv_remove+0x18/0x1c)
      [<c0217a10>] (platform_drv_remove+0x18/0x1c) from [<c0216358>] (__device_release_driver+0x58/0xb4)
      [<c0216358>] (__device_release_driver+0x58/0xb4) from [<c02163d0>] (device_release_driver+0x1c/0x28)
      [<c02163d0>] (device_release_driver+0x1c/0x28) from [<c02153c0>] (unbind_store+0x58/0x90)
      [<c02153c0>] (unbind_store+0x58/0x90) from [<c0214c90>] (drv_attr_store+0x20/0x2c)
      [<c0214c90>] (drv_attr_store+0x20/0x2c) from [<c01032c0>] (sysfs_write_file+0x168/0x198)
      [<c01032c0>] (sysfs_write_file+0x168/0x198) from [<c00ae1c0>] (vfs_write+0xb0/0x194)
      [<c00ae1c0>] (vfs_write+0xb0/0x194) from [<c00ae594>] (SyS_write+0x3c/0x70)
      [<c00ae594>] (SyS_write+0x3c/0x70) from [<c000e3e0>] (ret_fast_syscall+0x0/0x30)
      ---[ end trace 4c9f9403066f57a7 ]---
      Signed-off-by: NKim Phillips <kim.phillips@linaro.org>
      Signed-off-by: NWolfram Sang <wsa@the-dreams.de>
      15336913
  4. 27 9月, 2013 11 次提交
  5. 26 9月, 2013 10 次提交