1. 12 1月, 2018 1 次提交
  2. 10 1月, 2018 1 次提交
  3. 05 1月, 2018 4 次提交
    • V
      cpufreq: stats: Change return type of cpufreq_stats_update() as void · d476ec4f
      Viresh Kumar 提交于
      It always returns 0 and none of its callers check its return value. Make
      it return void.
      Signed-off-by: NViresh Kumar <viresh.kumar@linaro.org>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      d476ec4f
    • G
      powernv-cpufreq: Treat pstates as opaque 8-bit values · 967b87fd
      Gautham R. Shenoy 提交于
      On POWER8 and POWER9, the PMSR and the PMCR registers define pstates
      to be 8-bit wide values. The device-tree exports pstates as 32-bit
      wide values of which the lower byte is the actual pstate.
      
      The current implementation in the kernel treats pstates as integer
      type, since it used to use the sign of the pstate for performing some
      boundary-checks. This is no longer required after the patch
      "powernv-cpufreq: Fix pstate_to_idx() to handle non-continguous
      pstates".
      
      So, in this patch, we modify the powernv-cpufreq driver to uniformly
      treat pstates as opaque 8-bit values obtained from the device-tree or
      the PMCR. This simplifies the extract_pstate() helper function since
      we no longer no longer require to worry about the sign-extentions.
      Signed-off-by: NGautham R. Shenoy <ego@linux.vnet.ibm.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      967b87fd
    • G
      powernv-cpufreq: Fix pstate_to_idx() to handle non-continguous pstates · 332f0a01
      Gautham R. Shenoy 提交于
      The code in powernv-cpufreq, makes the following two assumptions which
      are not guaranteed by the device-tree bindings:
      
          1) Pstate ids are continguous: This is used in pstate_to_idx() to
             obtain the reverse map from a pstate to it's corresponding
             entry into the cpufreq frequency table.
      
          2) Every Pstate should always lie between the max and the min
             pstates that are explicitly reported in the device tree: This
             is used to determine whether a pstate reported by the PMSR is
             out of bounds.
      
      Both these assumptions are unwarranted and can change on future
      platforms.
      
      In this patch, we maintain the reverse map from a pstate to it's index
      in the cpufreq frequency table and use this in pstate_to_idx(). This
      does away with the assumptions (1) mentioned above, and will work with
      non continguous pstate ids. If no entry exists for a particular
      pstate, then such a pstate is treated as being out of bounds. This
      gets rid of assumption (2).
      
      On all the existing platforms, where the pstates are 8-bit long
      values, the new implementation of pstate_to_idx() takes constant time.
      Signed-off-by: NGautham R. Shenoy <ego@linux.vnet.ibm.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      332f0a01
    • G
      powernv-cpufreq: Add helper to extract pstate from PMSR · ee1f4a7d
      Gautham R. Shenoy 提交于
      On POWERNV platform, the fields for pstates in the Power Management
      Status Register (PMSR) and the Power Management Control Register
      (PMCR) are 8-bits wide. On POWER8 the pstates are negatively numbered
      while on POWER9 they are positively numbered.
      
      The device-tree exports pstates as 32-bit entries. The device-tree
      implementation sign-extends the 8-bit pstate values to obtain the
      corresponding 32-bit entry.
      
      Eg: On POWER8, a pstate value 0x82 [-126] is represented in the
      device-tree as 0xfffffff82 while on POWER9, the same value 0x82 [130]
      is represented in the device-tree as 0x00000082.
      
      The powernv-cpufreq driver implementation represents pstates using the
      integer type. In multiple places in the driver, the code interprets
      the pstates extracted from the PMSR as a signed byte and assigns it to
      a integer variable to get the sign-extention.
      
      On POWER9 platforms which have greater than 128 pstates, this results
      in the driver performing incorrect sign-extention, and thereby
      treating a legitimate pstate (say 130) as an invalid pstates (since it
      is interpreted as -126).
      
      This patch fixes the issue by implementing a helper function to
      extract Pstates from PMSR register, and correctly sign-extend it to be
      consistent with the values provided by the device-tree.
      Signed-off-by: NGautham R. Shenoy <ego@linux.vnet.ibm.com>
      Acked-by: NBalbir Singh <bsingharora@gmail.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      ee1f4a7d
  4. 28 12月, 2017 2 次提交
  5. 18 12月, 2017 5 次提交
  6. 17 12月, 2017 3 次提交
  7. 16 12月, 2017 19 次提交
  8. 15 12月, 2017 4 次提交
    • Y
      mlxsw: spectrum: Disable MAC learning for ovs port · fccff086
      Yuval Mintz 提交于
      Learning is currently enabled for ports which are OVS slaves -
      even though OVS doesn't need this indication.
      Since we're not associating a fid with the port, HW would continuously
      notify driver of learned [& aged] MACs which would be logged as errors.
      
      Fixes: 2b94e58d ("mlxsw: spectrum: Allow ports to work under OVS master")
      Signed-off-by: NYuval Mintz <yuvalm@mellanox.com>
      Reviewed-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fccff086
    • A
      dmaengine: fsl-edma: disable clks on all error paths · 2610acf4
      Andreas Platschek 提交于
      Previously enabled clks are only disabled if clk_prepare_enable() fails.
      However, there are other error paths were the previously enabled
      clocks are not disabled.
      
      To fix the problem, fsl_disable_clocks() now takes the number of clocks
      that shall be disabled + unprepared. For existing calls were all clocks
      were already successfully prepared + enabled, DMAMUX_NR is passed to
      disable + unprepare all clocks.
      
      In error paths were only some clocks were successfully prepared +
      enabled the loop counter is passed, in order to disable + unprepare
      all successfully prepared + enabled clocks.
      
      Found by Linux Driver Verification project (linuxtesting.org).
      Signed-off-by: NAndreas Platschek <andreas.platschek@opentech.at>
      Signed-off-by: NVinod Koul <vinod.koul@intel.com>
      2610acf4
    • C
      lib/rbtree,drm/mm: add rbtree_replace_node_cached() · 338f1d9d
      Chris Wilson 提交于
      Add a variant of rbtree_replace_node() that maintains the leftmost cache
      of struct rbtree_root_cached when replacing nodes within the rbtree.
      
      As drm_mm is the only rb_replace_node() being used on an interval tree,
      the mistake looks fairly self-contained.  Furthermore the only user of
      drm_mm_replace_node() is its testsuite...
      
      Testcase: igt/drm_mm/replace
      
      Link: http://lkml.kernel.org/r/20171122100729.3742-1-chris@chris-wilson.co.uk
      Link: https://patchwork.freedesktop.org/patch/msgid/20171109212435.9265-1-chris@chris-wilson.co.uk
      Fixes: f808c13f ("lib/interval_tree: fast overlap detection")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Acked-by: NDavidlohr Bueso <dbueso@suse.de>
      Cc: Jérôme Glisse <jglisse@redhat.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      338f1d9d
    • M
      virtio_mmio: fix devm cleanup · c2e90800
      Mark Rutland 提交于
      Recent rework of the virtio_mmio probe/remove paths balanced a
      devm_ioremap() with an iounmap() rather than its devm variant. This ends
      up corrupting the devm datastructures, and results in the following
      boot-time splat on arm64 under QEMU 2.9.0:
      
      [    3.450397] ------------[ cut here ]------------
      [    3.453822] Trying to vfree() nonexistent vm area (00000000c05b4844)
      [    3.460534] WARNING: CPU: 1 PID: 1 at mm/vmalloc.c:1525 __vunmap+0x1b8/0x220
      [    3.475898] Kernel panic - not syncing: panic_on_warn set ...
      [    3.475898]
      [    3.493933] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.15.0-rc3 #1
      [    3.513109] Hardware name: linux,dummy-virt (DT)
      [    3.525382] Call trace:
      [    3.531683]  dump_backtrace+0x0/0x368
      [    3.543921]  show_stack+0x20/0x30
      [    3.547767]  dump_stack+0x108/0x164
      [    3.559584]  panic+0x25c/0x51c
      [    3.569184]  __warn+0x29c/0x31c
      [    3.576023]  report_bug+0x1d4/0x290
      [    3.586069]  bug_handler.part.2+0x40/0x100
      [    3.597820]  bug_handler+0x4c/0x88
      [    3.608400]  brk_handler+0x11c/0x218
      [    3.613430]  do_debug_exception+0xe8/0x318
      [    3.627370]  el1_dbg+0x18/0x78
      [    3.634037]  __vunmap+0x1b8/0x220
      [    3.648747]  vunmap+0x6c/0xc0
      [    3.653864]  __iounmap+0x44/0x58
      [    3.659771]  devm_ioremap_release+0x34/0x68
      [    3.672983]  release_nodes+0x404/0x880
      [    3.683543]  devres_release_all+0x6c/0xe8
      [    3.695692]  driver_probe_device+0x250/0x828
      [    3.706187]  __driver_attach+0x190/0x210
      [    3.717645]  bus_for_each_dev+0x14c/0x1f0
      [    3.728633]  driver_attach+0x48/0x78
      [    3.740249]  bus_add_driver+0x26c/0x5b8
      [    3.752248]  driver_register+0x16c/0x398
      [    3.757211]  __platform_driver_register+0xd8/0x128
      [    3.770860]  virtio_mmio_init+0x1c/0x24
      [    3.782671]  do_one_initcall+0xe0/0x398
      [    3.791890]  kernel_init_freeable+0x594/0x660
      [    3.798514]  kernel_init+0x18/0x190
      [    3.810220]  ret_from_fork+0x10/0x18
      
      To fix this, we can simply rip out the explicit cleanup that the devm
      infrastructure will do for us when our probe function returns an error
      code, or when our remove function returns.
      
      We only need to ensure that we call put_device() if a call to
      register_virtio_device() fails in the probe path.
      Signed-off-by: NMark Rutland <mark.rutland@arm.com>
      Fixes: 7eb781b1 ("virtio_mmio: add cleanup for virtio_mmio_probe")
      Fixes: 25f32223 ("virtio_mmio: add cleanup for virtio_mmio_remove")
      Cc: Cornelia Huck <cohuck@redhat.com>
      Cc: Michael S. Tsirkin <mst@redhat.com>
      Cc: weiping zhang <zhangweiping@didichuxing.com>
      Cc: virtualization@lists.linux-foundation.org
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      Reviewed-by: NCornelia Huck <cohuck@redhat.com>
      c2e90800
  9. 14 12月, 2017 1 次提交
    • M
      drm/drm_lease: Prevent deadlock in case drm_lease_create() fails · bd36d3ba
      Marius Vlad 提交于
      This case can been seen when creating the lease with the same objects passed.
      
      [  605.515097] 2 locks held by testapp/3337:
      [  605.519027]  #0:  (&dev->mode_config.idr_mutex){......}, at: [<ffff0000085f1664>] drm_mode_create_lease_ioctl+0x384/0x858
      [  605.530045]  #1:  (&dev->mode_config.idr_mutex){......}, at: [<ffff0000085f11bc>] drm_lease_destroy+0x2c/0x110
      
      Which was causing the process to hang:
      
      [  605.398827] [<ffff0000080856cc>] __switch_to+0x94/0xa8
      [  605.404030] [<ffff000008c05d00>] __schedule+0x1b0/0x698
      [  605.409322] [<ffff000008c06224>] schedule+0x3c/0xa8
      [  605.414260] [<ffff000008c06628>] schedule_preempt_disabled+0x20/0x38
      [  605.420677] [<ffff000008c07370>] mutex_lock_nested+0x158/0x340
      [  605.426572] [<ffff0000085f11bc>] drm_lease_destroy+0x2c/0x110
      [  605.432389] [<ffff0000085cecf0>] drm_master_put+0xc0/0xc8
      [  605.437845] [<ffff0000085f175c>] drm_mode_create_lease_ioctl+0x47c/0x858
      [  605.444612] [<ffff0000085d4460>] drm_ioctl+0x198/0x448
      [  605.449811] [<ffff000008201134>] do_vfs_ioctl+0xa4/0x748
      [  605.455192] [<ffff000008201864>] SyS_ioctl+0x8c/0xa0
      [  605.460216] [<ffff000008082f4c>] __sys_trace_return+0x0/0x4
      
      drm_mode_create_lease_ioctl() calls drm_lease_create() which acquires a lock
      on dev->mode_config.idr_mutex. In case of failure, drm_lease_create() calls
      drm_master_put() which in turn tries to acquire the same lock when calling
      drm_lease_destroy().
      
      v2: - Reverse the order at exit in case of fail, so that unlocking takes place
      before dropping the reference.
          - Include detail information about deadlock (Daniel Vetter)
      Signed-off-by: NMarius Vlad <marius-cristian.vlad@nxp.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171213181048.32719-1-marius-cristian.vlad@nxp.com
      bd36d3ba