1. 02 10月, 2011 3 次提交
    • M
      PM / devfreq: Add basic governors · ce26c5bb
      MyungJoo Ham 提交于
      Four cpufreq-like governors are provided as examples.
      
      powersave: use the lowest frequency possible. The user (device) should
      set the polling_ms as 0 because polling is useless for this governor.
      
      performance: use the highest freqeuncy possible. The user (device)
      should set the polling_ms as 0 because polling is useless for this
      governor.
      
      userspace: use the user specified frequency stored at
      devfreq.user_set_freq. With sysfs support in the following patch, a user
      may set the value with the sysfs interface.
      
      simple_ondemand: simplified version of cpufreq's ondemand governor.
      
      When a user updates OPP entries (enable/disable/add), OPP framework
      automatically notifies devfreq to update operating frequency
      accordingly. Thus, devfreq users (device drivers) do not need to update
      devfreq manually with OPP entry updates or set polling_ms for powersave
      , performance, userspace, or any other "static" governors.
      
      Note that these are given only as basic examples for governors and any
      devices with devfreq may implement their own governors with the drivers
      and use them.
      Signed-off-by: NMyungJoo Ham <myungjoo.ham@samsung.com>
      Signed-off-by: NKyungmin Park <kyungmin.park@samsung.com>
      Reviewed-by: NMike Turquette <mturquette@ti.com>
      Acked-by: NKevin Hilman <khilman@ti.com>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      ce26c5bb
    • M
      PM / devfreq: Add common sysfs interfaces · 9005b650
      MyungJoo Ham 提交于
      Device specific sysfs interface /sys/devices/.../power/devfreq_*
      - governor	R: name of governor
      - cur_freq	R: current frequency
      - polling_interval	R: polling interval in ms given with devfreq profile
      			W: update polling interval.
      - central_polling	R: 1 if polling is managed by devfreq framework
      Signed-off-by: NMyungJoo Ham <myungjoo.ham@samsung.com>
      Signed-off-by: NKyungmin Park <kyungmin.park@samsung.com>
      Reviewed-by: NMike Turquette <mturquette@ti.com>
      Acked-by: NKevin Hilman <khilman@ti.com>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      --
       Documentation/ABI/testing/sysfs-class-devfreq |   44 ++++++++++++++++
       drivers/devfreq/devfreq.c                     |   69 ++++++++++++++++++++++++++
       2 files changed, 113 insertions(+)
       create mode 100644 Documentation/ABI/testing/sysfs-class-devfreq
      9005b650
    • M
      PM: Introduce devfreq: generic DVFS framework with device-specific OPPs · a3c98b8b
      MyungJoo Ham 提交于
      With OPPs, a device may have multiple operable frequency and voltage
      sets. However, there can be multiple possible operable sets and a system
      will need to choose one from them. In order to reduce the power
      consumption (by reducing frequency and voltage) without affecting the
      performance too much, a Dynamic Voltage and Frequency Scaling (DVFS)
      scheme may be used.
      
      This patch introduces the DVFS capability to non-CPU devices with OPPs.
      DVFS is a techique whereby the frequency and supplied voltage of a
      device is adjusted on-the-fly. DVFS usually sets the frequency as low
      as possible with given conditions (such as QoS assurance) and adjusts
      voltage according to the chosen frequency in order to reduce power
      consumption and heat dissipation.
      
      The generic DVFS for devices, devfreq, may appear quite similar with
      /drivers/cpufreq.  However, cpufreq does not allow to have multiple
      devices registered and is not suitable to have multiple heterogenous
      devices with different (but simple) governors.
      
      Normally, DVFS mechanism controls frequency based on the demand for
      the device, and then, chooses voltage based on the chosen frequency.
      devfreq also controls the frequency based on the governor's frequency
      recommendation and let OPP pick up the pair of frequency and voltage
      based on the recommended frequency. Then, the chosen OPP is passed to
      device driver's "target" callback.
      
      When PM QoS is going to be used with the devfreq device, the device
      driver should enable OPPs that are appropriate with the current PM QoS
      requests. In order to do so, the device driver may call opp_enable and
      opp_disable at the notifier callback of PM QoS so that PM QoS's
      update_target() call enables the appropriate OPPs. Note that at least
      one of OPPs should be enabled at any time; be careful when there is a
      transition.
      Signed-off-by: NMyungJoo Ham <myungjoo.ham@samsung.com>
      Signed-off-by: NKyungmin Park <kyungmin.park@samsung.com>
      Reviewed-by: NMike Turquette <mturquette@ti.com>
      Acked-by: NKevin Hilman <khilman@ti.com>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      a3c98b8b
  2. 01 10月, 2011 1 次提交
  3. 27 9月, 2011 1 次提交
    • R
      PM / Clocks: Do not acquire a mutex under a spinlock · e8b364b8
      Rafael J. Wysocki 提交于
      Commit b7ab83ed (PM: Use spinlock instead of mutex in clock
      management functions) introduced a regression causing clocks_mutex
      to be acquired under a spinlock.  This happens because
      pm_clk_suspend() and pm_clk_resume() call pm_clk_acquire() under
      pcd->lock, but pm_clk_acquire() executes clk_get() which causes
      clocks_mutex to be acquired.  Similarly, __pm_clk_remove(),
      executed under pcd->lock, calls clk_put(), which also causes
      clocks_mutex to be acquired.
      
      To fix those problems make pm_clk_add() call pm_clk_acquire(), so
      that pm_clk_suspend() and pm_clk_resume() don't have to do that.
      Change pm_clk_remove() and pm_clk_destroy() to separate
      modifications of the pcd->clock_list list from the actual removal of
      PM clock entry objects done by __pm_clk_remove().
      Reported-and-tested-by: NGuennadi Liakhovetski <g.liakhovetski@gmx.de>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Acked-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      e8b364b8
  4. 24 9月, 2011 6 次提交
  5. 23 9月, 2011 7 次提交
    • A
      drm/radeon/kms: fix DDIA enable on some rs690 systems · fdfc6159
      Alex Deucher 提交于
      DVOOutputControl checks the value of of bios scratch reg 3
      on some tables and assumes the encoder is already enabled
      if the DFP2_ACTIVE bit is set.  Clear that bit so the table
      sets the DDIA enable bit properly.
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@kernel.org
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      fdfc6159
    • D
      Revert "drm/radeon/kms: fix typo in r100_blit_copy" · d9ad77eb
      Dave Airlie 提交于
      This reverts commit 18b4fada.
      
      This code was correct, apologies to anyone who noticed things broke.
      
      revert contents are different due to another commit in between.
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      d9ad77eb
    • P
      TPM: Zero buffer after copying to userspace · 3321c07a
      Peter Huewe 提交于
      Since the buffer might contain security related data it might be a good idea to
      zero the buffer after we have copied it to userspace.
      
      This got assigned CVE-2011-1162.
      Signed-off-by: NRajiv Andrade <srajiv@linux.vnet.ibm.com>
      Cc: Stable Kernel <stable@kernel.org>
      Signed-off-by: NJames Morris <jmorris@namei.org>
      3321c07a
    • P
      TPM: Call tpm_transmit with correct size · 6b07d30a
      Peter Huewe 提交于
      This patch changes the call of tpm_transmit by supplying the size of the
      userspace buffer instead of TPM_BUFSIZE.
      
      This got assigned CVE-2011-1161.
      
      [The first hunk didn't make sense given one could expect
       way less data than TPM_BUFSIZE, so added tpm_transmit boundary
       check over bufsiz instead
       The last parameter of tpm_transmit() reflects the amount
       of data expected from the device, and not the buffer size
       being supplied to it. It isn't ideal to parse it directly,
       so we just set it to the maximum the input buffer can handle
       and let the userspace API to do such job.]
      Signed-off-by: NRajiv Andrade <srajiv@linux.vnet.ibm.com>
      Cc: Stable Kernel <stable@kernel.org>
      Signed-off-by: NJames Morris <jmorris@namei.org>
      6b07d30a
    • A
      TPM: tpm_nsc: Fix a double free of pdev in cleanup_nsc · de69113e
      Axel Lin 提交于
      platform_device_unregister() will release all resources
      and remove it from the subsystem, then drop reference count by
      calling platform_device_put().
      
      We should not call kfree(pdev) after platform_device_unregister(pdev).
      Signed-off-by: NAxel Lin <axel.lin@gmail.com>
      Signed-off-by: NRajiv Andrade <srajiv@linux.vnet.ibm.com>
      Signed-off-by: NJames Morris <jmorris@namei.org>
      de69113e
    • G
      TPM: TCG_ATMEL should depend on HAS_IOPORT · 5ce5ed35
      Geert Uytterhoeven 提交于
      On m68k, I get:
      
      drivers/char/tpm/tpm_atmel.h: In function ‘atmel_get_base_addr’:
      drivers/char/tpm/tpm_atmel.h:129: error: implicit declaration of function ‘ioport_map’
      drivers/char/tpm/tpm_atmel.h:129: warning: return makes pointer from integer without a cast
      
      The code in tpm_atmel.h supports PPC64 (using the device tree and ioremap())
      and "anything else" (using ioport_map()). However, ioportmap() is only
      available on platforms that set HAS_IOPORT.
      
      Although PC64 seems to have HAS_IOPORT, a "depends on HAS_IOPORT" should work,
      but I think it's better to expose the special PPC64 handling explicit using
      "depends on PPC64 || HAS_IOPORT".
      Signed-off-by: NGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: NRajiv Andrade <srajiv@linux.vnet.ibm.com>
      Signed-off-by: NJames Morris <jmorris@namei.org>
      5ce5ed35
    • G
      zorro: Defer device_register() until all devices have been identified · a7f4d00a
      Geert Uytterhoeven 提交于
      As the Amiga Zorro II address space is limited to 8.5 MiB and Zorro
      devices can contain only one BAR, several Amiga Zorro II expansion
      boards (mainly graphics cards) contain multiple Zorro devices: a small
      one for the control registers and one (or more) for the graphics memory.
      
      The conversion of cirrusfb to the new driver framework introduced a
      regression: the driver contains a zorro_driver for the first Zorro
      device, and uses the (old) zorro_find_device() call to find the second
      Zorro device.
      
      However, as the Zorro core calls device_register() as soon as a Zorro
      device is identified, it may not have identified the second Zorro device
      belonging to the same physical Zorro expansion card.  Hence cirrusfb
      could no longer find the second part of the Picasso II graphics card,
      causing a NULL pointer dereference.
      
      Defer the registration of Zorro devices with the driver framework until
      all Zorro devices have been identified to fix this.
      
      Note that the alternative solution (modifying cirrusfb to register a
      zorro_driver for all Zorro devices belonging to a graphics card, instead
      of only for the first one, and adding a synchronization mechanism to
      defer initialization until all have been found), is not an option, as on
      some cards one device may be optional (e.g.  the second bank of 2 MiB of
      graphics memory on the Picasso IV in Zorro II mode).
      Reported-by: NIngo Jürgensmann <ij@2011.bluespice.org>
      Signed-off-by: NGeert Uytterhoeven <geert@linux-m68k.org>
      Cc: stable@kernel.org
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      a7f4d00a
  6. 22 9月, 2011 5 次提交
  7. 21 9月, 2011 10 次提交
  8. 20 9月, 2011 7 次提交
    • A
      watchdog: Initconst section fixes for watchdog · 4e8858d5
      Andi Kleen 提交于
      Signed-off-by: NAndi Kleen <ak@linux.intel.com>
      Signed-off-by: NWim Van Sebroeck <wim@iguana.be>
      4e8858d5
    • J
      watchdog: lantiq: fix watchdogs timeout handling · 9cfce47b
      John Crispin 提交于
      The enable function was using the global timeout variable for local operations.
      This resulted in the value of the global variable being corrupted, thus
      breaking the code.
      Signed-off-by: NJohn Crispin <blogic@openwrt.org>
      Signed-off-by: NThomas Langer <thomas.langer@lantiq.com>
      Signed-off-by: NWim Van Sebroeck <wim@iguana.be>
      Cc: linux-watchdog@vger.kernel.org
      Cc: linux-mips@linux-mips.org
      9cfce47b
    • N
      watchdog: hpwdt: prevent multiple "NMI occurred" messages · dbc018ec
      Naga Chumbalkar 提交于
      On platforms with no iCRU support don't print two, (possibly conflicting),
      "NMI occurred" messages when the firmware is unable to source the NMI.
      
      Please note that one of the enhancements to the v1.3.0 hpwdt driver is to panic and allow
      KDUMP to succeed even on NMIs that are unknown to the platform firmware.
      Signed-off-by: NNaga Chumbalkar <nagananda.chumbalkar@hp.com>
      Reviewed-by: NThomas Mingarelli <thomas.mingarelli@hp.com>
      Signed-off-by: NWim Van Sebroeck <wim@iguana.be>
      dbc018ec
    • H
      watchdog: WatchDog Timer Driver Core - use passed watchdog_device · cb7efc02
      H Hartley Sweeten 提交于
      Use the passed watchdog_device instead of the static global variable when
      testing and setting the status in watchdog_ping, watchdog_start, and
      watchdog_stop.  Note that the callers of these functions are actually
      passing the static global variable.
      Signed-off-by: NH Hartley Sweeten <hsweeten@visionengravers.com>
      Signed-off-by: NWim Van Sebroeck <wim@iguana.be>
      cb7efc02
    • A
      USB: xHCI: prevent infinite loop when processing MSE event · c2d7b49f
      Andiry Xu 提交于
      When a xHC host is unable to handle isochronous transfer in the
      interval, it reports a Missed Service Error event and skips some tds.
      
      Currently xhci driver handles MSE event in the following ways:
      
      1. When encounter a MSE event, set ep->skip flag, update event ring
         dequeue pointer and return.
      
      2. When encounter the next event on this ep, the driver will run the
         do-while loop, fetch td from ep's td_list to find the td
         corresponding to this event.  All tds missed are marked as short
         transfer(-EXDEV).
      
      The do-while loop will end in two ways:
      
      1. If the td pointed by the event trb is found;
      
      2. If the ep ring's td_list is empty.
      
      However, if a buggy HW reports some unpredicted event (for example, an
      overrun event following a MSE event while the ep ring is actually not
      empty), the driver will never find the td, and it will loop until the
      td_list is empty.
      
      Unfortunately, the spinlock is dropped when give back a urb in the
      do-while loop.  During the spinlock released period, the class driver
      may still submit urbs and add tds to the td_list.  This may cause
      disaster, since the td_list will never be empty and the loop never ends,
      and the system hangs.
      
      To fix this, count the number of TDs on the ep ring before skipping TDs,
      and quit the loop when skipped that number of tds.  This guarantees the
      do-while loop will end after certain number of cycles, and driver will
      not be trapped in an infinite loop.
      Signed-off-by: NAndiry Xu <andiry.xu@amd.com>
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      c2d7b49f
    • G
      USB: xhci: Set change bit when warm reset change is set. · 44f4c3ed
      Greg KH 提交于
      Sometimes, when a USB 3.0 device is disconnected, the Intel Panther
      Point xHCI host controller will report a link state change with the
      state set to "SS.Inactive".  This causes the xHCI host controller to
      issue a warm port reset, which doesn't finish before the USB core times
      out while waiting for it to complete.
      
      When the warm port reset does complete, and the xHC gives back a port
      status change event, the xHCI driver kicks khubd.  However, it fails to
      set the bit indicating there is a change event for that port because the
      logic in xhci-hub.c doesn't check for the warm port reset bit.
      
      After that, the warm port status change bit is never cleared by the USB
      core, and the xHC stops reporting port status change bits.  (The xHCI
      spec says it shouldn't report more port events until all change bits are
      cleared.) This means any port changes when a new device is connected
      will never be reported, and the port will seem "dead" until the xHCI
      driver is unloaded and reloaded, or the computer is rebooted.  Fix this
      by making the xHCI driver set the port change bit when a warm port reset
      change bit is set.
      
      A better solution would be to make the USB core handle warm port reset
      in differently, merging the current code with the standard port reset
      code that does an incremental backoff on the timeout, and tries to
      complete the port reset two more times before giving up.  That more
      complicated fix will be merged next window, and this fix will be
      backported to stable.
      
      This should be backported to kernels as old as 3.0, since that was the
      first kernel with commit a11496eb ("xHCI: warm reset support").
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@kernel.org
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      44f4c3ed
    • R
      staging: fix comedi build when ISA_DMA_API is enabled but COMEDI_PCI is not enabled · c19cc78e
      Randy Dunlap 提交于
      Fix build when CONFIG_ISA_DMA_API is enabled but
      CONFIG_COMEDI_PCI[_DRIVERS] is not enabled.
      
      Fixes these build errors:
      
        drivers/staging/comedi/drivers/ni_labpc.c: In function 'labpc_ai_cmd':
        drivers/staging/comedi/drivers/ni_labpc.c:1351: error: implicit declaration of function 'labpc_suggest_transfer_size'
        drivers/staging/comedi/drivers/ni_labpc.c: At top level:
        drivers/staging/comedi/drivers/ni_labpc.c:1802: error: conflicting types for 'labpc_suggest_transfer_size'
        drivers/staging/comedi/drivers/ni_labpc.c:1351: note: previous implicit declaration of 'labpc_suggest_transfer_size' was here
      Signed-off-by: NRandy Dunlap <rdunlap@xenotime.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      c19cc78e