1. 17 Sep, 2014 1 commit
  2. 10 Sep, 2014 4 commits
    • Mike Turquette's avatar
      0469a43b
    • Stephen Boyd's avatar
      clk: Don't hold prepare_lock across debugfs creation · 6314b679
      Stephen Boyd authored
      Rob Clark reports a lockdep splat that involves the prepare_lock
      chained with the mmap semaphore.
      
      ======================================================
      [ INFO: possible circular locking dependency detected ]
      3.17.0-rc1-00050-g07a489b #802 Tainted: G        W
      -------------------------------------------------------
      Xorg.bin/5413 is trying to acquire lock:
       (prepare_lock){+.+.+.}, at: [<c0781280>] clk_prepare_lock+0x88/0xfc
      
      but task is already holding lock:
       (qcom_iommu_lock){+.+...}, at: [<c079f664>] qcom_iommu_unmap+0x1c/0x1f0
      
      which lock already depends on the new lock.
      
      the existing dependency chain (in reverse order) is:
      
      -> #4 (qcom_iommu_lock){+.+...}:
             [<c079f860>] qcom_iommu_map+0x28/0x450
             [<c079eb50>] iommu_map+0xc8/0x12c
             [<c056c1fc>] msm_iommu_map+0xb4/0x130
             [<c05697bc>] msm_gem_get_iova_locked+0x9c/0xe8
             [<c0569854>] msm_gem_get_iova+0x4c/0x64
             [<c0562208>] mdp4_kms_init+0x4c4/0x6c0
             [<c056881c>] msm_load+0x2ac/0x34c
             [<c0545724>] drm_dev_register+0xac/0x108
             [<c0547510>] drm_platform_init+0x50/0xf0
             [<c0578a60>] try_to_bring_up_master.part.3+0xc8/0x108
             [<c0578b48>] component_master_add_with_match+0xa8/0x104
             [<c0568294>] msm_pdev_probe+0x64/0x70
             [<c057e704>] platform_drv_probe+0x2c/0x60
             [<c057cff8>] driver_probe_device+0x108/0x234
             [<c057b65c>] bus_for_each_drv+0x64/0x98
             [<c057cec0>] device_attach+0x78/0x8c
             [<c057c590>] bus_probe_device+0x88/0xac
             [<c057c9b8>] deferred_probe_work_func+0x68/0x9c
             [<c0259db4>] process_one_work+0x1a0/0x40c
             [<c025a710>] worker_thread+0x44/0x4d8
             [<c025ec54>] kthread+0xd8/0xec
             [<c020e9a8>] ret_from_fork+0x14/0x2c
      
      -> #3 (&dev->struct_mutex){+.+.+.}:
             [<c0541188>] drm_gem_mmap+0x38/0xd0
             [<c05695b8>] msm_gem_mmap+0xc/0x5c
             [<c02f0b6c>] mmap_region+0x35c/0x6c8
             [<c02f11ec>] do_mmap_pgoff+0x314/0x398
             [<c02de1e0>] vm_mmap_pgoff+0x84/0xb4
             [<c02ef83c>] SyS_mmap_pgoff+0x94/0xbc
             [<c020e8e0>] ret_fast_syscall+0x0/0x48
      
      -> #2 (&mm->mmap_sem){++++++}:
             [<c0321138>] filldir64+0x68/0x180
             [<c0333fe0>] dcache_readdir+0x188/0x22c
             [<c0320ed0>] iterate_dir+0x9c/0x11c
             [<c03213b0>] SyS_getdents64+0x78/0xe8
             [<c020e8e0>] ret_fast_syscall+0x0/0x48
      
      -> #1 (&sb->s_type->i_mutex_key#3){+.+.+.}:
             [<c03fc544>] __create_file+0x58/0x1dc
             [<c03fc70c>] debugfs_create_dir+0x1c/0x24
             [<c0781c7c>] clk_debug_create_subtree+0x20/0x170
             [<c0be2af8>] clk_debug_init+0xec/0x14c
             [<c0208c70>] do_one_initcall+0x8c/0x1c8
             [<c0b9cce4>] kernel_init_freeable+0x13c/0x1dc
             [<c0877bc4>] kernel_init+0x8/0xe8
             [<c020e9a8>] ret_from_fork+0x14/0x2c
      
      -> #0 (prepare_lock){+.+.+.}:
             [<c087c408>] mutex_lock_nested+0x70/0x3e8
             [<c0781280>] clk_prepare_lock+0x88/0xfc
             [<c0782c50>] clk_prepare+0xc/0x24
             [<c079f474>] __enable_clocks.isra.4+0x18/0xa4
             [<c079f614>] __flush_iotlb_va+0xe0/0x114
             [<c079f6f4>] qcom_iommu_unmap+0xac/0x1f0
             [<c079ea3c>] iommu_unmap+0x9c/0xe8
             [<c056c2fc>] msm_iommu_unmap+0x64/0x84
             [<c0569da4>] msm_gem_free_object+0x11c/0x338
             [<c05413ec>] drm_gem_object_handle_unreference_unlocked+0xfc/0x130
             [<c0541604>] drm_gem_object_release_handle+0x50/0x68
             [<c0447a98>] idr_for_each+0xa8/0xdc
             [<c0541c10>] drm_gem_release+0x1c/0x28
             [<c0540b3c>] drm_release+0x370/0x428
             [<c031105c>] __fput+0x98/0x1e8
             [<c025d73c>] task_work_run+0xb0/0xfc
             [<c02477ec>] do_exit+0x2ec/0x948
             [<c0247ec0>] do_group_exit+0x4c/0xb8
             [<c025180c>] get_signal+0x28c/0x6ac
             [<c0211204>] do_signal+0xc4/0x3e4
             [<c02116cc>] do_work_pending+0xb4/0xc4
             [<c020e938>] work_pending+0xc/0x20
      
      other info that might help us debug this:
      
      Chain exists of:
        prepare_lock --> &dev->struct_mutex --> qcom_iommu_lock
      
       Possible unsafe locking scenario:
      
             CPU0                    CPU1
             ----                    ----
        lock(qcom_iommu_lock);
                                     lock(&dev->struct_mutex);
                                     lock(qcom_iommu_lock);
        lock(prepare_lock);
      
       *** DEADLOCK ***
      
      3 locks held by Xorg.bin/5413:
       #0:  (drm_global_mutex){+.+.+.}, at: [<c0540800>] drm_release+0x34/0x428
       #1:  (&dev->struct_mutex){+.+.+.}, at: [<c05413bc>] drm_gem_object_handle_unreference_unlocked+0xcc/0x130
       #2:  (qcom_iommu_lock){+.+...}, at: [<c079f664>] qcom_iommu_unmap+0x1c/0x1f0
      
      stack backtrace:
      CPU: 1 PID: 5413 Comm: Xorg.bin Tainted: G        W      3.17.0-rc1-00050-g07a489b #802
      [<c0216290>] (unwind_backtrace) from [<c0211d8c>] (show_stack+0x10/0x14)
      [<c0211d8c>] (show_stack) from [<c087a078>] (dump_stack+0x98/0xb8)
      [<c087a078>] (dump_stack) from [<c027f024>] (print_circular_bug+0x218/0x340)
      [<c027f024>] (print_circular_bug) from [<c0283e08>] (__lock_acquire+0x1d24/0x20b8)
      [<c0283e08>] (__lock_acquire) from [<c0284774>] (lock_acquire+0x9c/0xbc)
      [<c0284774>] (lock_acquire) from [<c087c408>] (mutex_lock_nested+0x70/0x3e8)
      [<c087c408>] (mutex_lock_nested) from [<c0781280>] (clk_prepare_lock+0x88/0xfc)
      [<c0781280>] (clk_prepare_lock) from [<c0782c50>] (clk_prepare+0xc/0x24)
      [<c0782c50>] (clk_prepare) from [<c079f474>] (__enable_clocks.isra.4+0x18/0xa4)
      [<c079f474>] (__enable_clocks.isra.4) from [<c079f614>] (__flush_iotlb_va+0xe0/0x114)
      [<c079f614>] (__flush_iotlb_va) from [<c079f6f4>] (qcom_iommu_unmap+0xac/0x1f0)
      [<c079f6f4>] (qcom_iommu_unmap) from [<c079ea3c>] (iommu_unmap+0x9c/0xe8)
      [<c079ea3c>] (iommu_unmap) from [<c056c2fc>] (msm_iommu_unmap+0x64/0x84)
      [<c056c2fc>] (msm_iommu_unmap) from [<c0569da4>] (msm_gem_free_object+0x11c/0x338)
      [<c0569da4>] (msm_gem_free_object) from [<c05413ec>] (drm_gem_object_handle_unreference_unlocked+0xfc/0x130)
      [<c05413ec>] (drm_gem_object_handle_unreference_unlocked) from [<c0541604>] (drm_gem_object_release_handle+0x50/0x68)
      [<c0541604>] (drm_gem_object_release_handle) from [<c0447a98>] (idr_for_each+0xa8/0xdc)
      [<c0447a98>] (idr_for_each) from [<c0541c10>] (drm_gem_release+0x1c/0x28)
      [<c0541c10>] (drm_gem_release) from [<c0540b3c>] (drm_release+0x370/0x428)
      [<c0540b3c>] (drm_release) from [<c031105c>] (__fput+0x98/0x1e8)
      [<c031105c>] (__fput) from [<c025d73c>] (task_work_run+0xb0/0xfc)
      [<c025d73c>] (task_work_run) from [<c02477ec>] (do_exit+0x2ec/0x948)
      [<c02477ec>] (do_exit) from [<c0247ec0>] (do_group_exit+0x4c/0xb8)
      [<c0247ec0>] (do_group_exit) from [<c025180c>] (get_signal+0x28c/0x6ac)
      [<c025180c>] (get_signal) from [<c0211204>] (do_signal+0xc4/0x3e4)
      [<c0211204>] (do_signal) from [<c02116cc>] (do_work_pending+0xb4/0xc4)
      [<c02116cc>] (do_work_pending) from [<c020e938>] (work_pending+0xc/0x20)
      
      We can break this chain if we don't hold the prepare_lock while
      creating debugfs directories. We only hold the prepare_lock right
      now because we're traversing the clock tree recursively and we
      don't want the hierarchy to change during the traversal.
      Replacing this traversal with a simple linked list walk allows us
      to only grab a list lock instead of the prepare_lock, thus
      breaking the lock chain.
      Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: default avatarMike Turquette <mturquette@linaro.org>
      6314b679
    • Heiko Stübner's avatar
      clk: rockchip: also protect hclk_peri as critical · 2fed71e5
      Heiko Stübner authored
      The dwc2 usb controller also uses agressive clock gating, which in this
      case leads to hclk_peri getting disabled and hanging the system.
      Therefore move it to the critical clocks until we also control that
      part of the system.
      Signed-off-by: default avatarHeiko Stuebner <heiko@sntech.de>
      Signed-off-by: default avatarMike Turquette <mturquette@linaro.org>
      2fed71e5
    • Heiko Stübner's avatar
      clk: fractional-divider: cast parent_rate to u64 before multiplying · feaefa0e
      Heiko Stübner authored
      On 32bit architectures, like ARM calculating the fractional rate will
      do the multiplication before converting the value to u64 when it gets
      assigned to ret, which can produce overflows.
      
      The error in question happened with a parent_rate of 386MHz, m = 3000,
      n = 60000, which resulted in a wrong rate value of 15812Hz.
      
      Therefore cast parent_rate to u64 to make sure the multiplication
      happens in a 64bit space and produces the correct 192MHz in the example.
      Signed-off-by: default avatarHeiko Stuebner <heiko@sntech.de>
      Signed-off-by: default avatarMike Turquette <mturquette@linaro.org>
      feaefa0e
  3. 09 Sep, 2014 10 commits
  4. 03 Sep, 2014 3 commits
  5. 02 Sep, 2014 16 commits
  6. 01 Sep, 2014 5 commits
    • Linus Torvalds's avatar
      Linux 3.17-rc3 · 69e273c0
      Linus Torvalds authored
      69e273c0
    • Linus Torvalds's avatar
      Merge tag 'xtensa-20140830' of git://github.com/czankel/xtensa-linux · 05bdb8c9
      Linus Torvalds authored
      Pull Xtensa updates from Chris Zankel:
       "Xtensa improvements for 3.17:
         - support highmem on cores with aliasing data cache.  Enable highmem
           on kc705 by default
         - simplify addition of new core variants (no need to modify Kconfig /
           Makefiles)
         - improve robustness of unaligned access handler and its interaction
           with window overflow/underflow exception handlers
         - deprecate atomic and spill registers syscalls
         - clean up Kconfig: remove orphan MATH_EMULATION, sort 'select'
           statements
         - wire up renameat2 syscall.
      
        Various fixes:
         - fix address checks in dma_{alloc,free}_coherent (runtime BUG)
         - fix access to THREAD_RA/THREAD_SP/THREAD_DS (debug build breakage)
         - fix TLBTEMP_BASE_2 region handling in fast_second_level_miss
           (runtime unrecoverable exception)
         - fix a6 and a7 handling in fast_syscall_xtensa (runtime userspace
           register clobbering)
         - fix kernel/user jump out of fast_unaligned (potential runtime
           unrecoverabl exception)
         - replace termios IOCTL code definitions with constants (userspace
           build breakage)"
      
      * tag 'xtensa-20140830' of git://github.com/czankel/xtensa-linux: (25 commits)
        xtensa: deprecate fast_xtensa and fast_spill_registers syscalls
        xtensa: don't allow overflow/underflow on unaligned stack
        xtensa: fix a6 and a7 handling in fast_syscall_xtensa
        xtensa: allow single-stepping through unaligned load/store
        xtensa: move invalid unaligned instruction handler closer to its users
        xtensa: make fast_unaligned store restartable
        xtensa: add double exception fixup handler for fast_unaligned
        xtensa: fix kernel/user jump out of fast_unaligned
        xtensa: configure kc705 for highmem
        xtensa: support highmem in aliasing cache flushing code
        xtensa: support aliasing cache in kmap
        xtensa: support aliasing cache in k[un]map_atomic
        xtensa: implement clear_user_highpage and copy_user_highpage
        xtensa: fix TLBTEMP_BASE_2 region handling in fast_second_level_miss
        xtensa: allow fixmap and kmap span more than one page table
        xtensa: make fixmap region addressing grow with index
        xtensa: fix access to THREAD_RA/THREAD_SP/THREAD_DS
        xtensa: add renameat2 syscall
        xtensa: fix address checks in dma_{alloc,free}_coherent
        xtensa: replace IOCTL code definitions with constants
        ...
      05bdb8c9
    • Guenter Roeck's avatar
      unicore32: Fix build error · ca98565a
      Guenter Roeck authored
      unicore32 builds fail with
      
        arch/unicore32/kernel/signal.c: In function ‘setup_frame’:
        arch/unicore32/kernel/signal.c:257: error: ‘usig’ undeclared (first use in this function)
        arch/unicore32/kernel/signal.c:279: error: ‘usig’ undeclared (first use in this function)
        arch/unicore32/kernel/signal.c: In function ‘handle_signal’:
        arch/unicore32/kernel/signal.c:306: warning: unused variable ‘tsk’
        arch/unicore32/kernel/signal.c: In function ‘do_signal’:
        arch/unicore32/kernel/signal.c:376: error: implicit declaration of function ‘get_signsl’
        make[1]: *** [arch/unicore32/kernel/signal.o] Error 1
        make: *** [arch/unicore32/kernel/signal.o] Error 2
      
      Bisect points to commit 649671c9 ("unicore32: Use get_signal()
      signal_setup_done()").
      
      This code never even compiled.  Reverting the patch does not work, since
      previously used functions no longer exist, so try to fix it up.  Compile
      tested only.
      
      Fixes: 649671c9 ("unicore32: Use get_signal() signal_setup_done()")
      Cc: Richard Weinberger <richard@nod.at>
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      ca98565a
    • Linus Torvalds's avatar
      Merge branch 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm · 94559a4a
      Linus Torvalds authored
      Pull ARM fixes from Russell King:
       "Various assorted fixes:
      
         - a couple of patches from Mark Rutland to resolve an errata with
           Cortex-A15 CPUs.
         - fix cpuidle for the CPU part ID changes in the last merge window
         - add support for a relocation which ARM binutils is generating in
           some circumstances"
      
      * 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm:
        ARM: 8130/1: cpuidle/cpuidle-big_little: fix reading cpu id part number
        ARM: 8129/1: errata: work around Cortex-A15 erratum 830321 using dummy strex
        ARM: 8128/1: abort: don't clear the exclusive monitors
        ARM: 8127/1: module: add support for R_ARM_TARGET1 relocations
      94559a4a
    • Linus Torvalds's avatar
      Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc · 19ed3eb9
      Linus Torvalds authored
      Pull ARM SoC fixes from Olof Johansson:
       "Here's the weekly batch of fixes from arm-soc.
      
        The delta is a largeish negative delta, due to revert of SMP support
        for Broadcom's STB SoC -- it was accidentally merged before some
        issues had been addressed, so they will make a new attempt for 3.18.
        I didn't see a need for a full revert of the whole platform due to
        this, we're keeping the rest enabled.
      
        The rest is mostly:
      
         - a handful of DT fixes for i.MX (Hummingboard/Cubox-i in particular)
         - some MTD/NAND fixes for OMAP
         - minor DT fixes for shmobile
         - warning fix for UP builds on vexpress/spc
      
        There's also a couple of patches that wires up hwmod on TI's DRA7 SoC
        so it can boot.  Drivers and the rest had landed for 3.17, and it's
        small and isolated so it made sense to pick up now even if it's not a
        bugfix"
      
      * tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (23 commits)
        vexpress/spc: fix a build warning on array bounds
        ARM: DRA7: hwmod: Add dra74x and dra72x specific ocp interface lists
        ARM: DRA7: Add support for soc_is_dra74x() and soc_is_dra72x() variants
        MAINTAINERS: catch special Rockchip code locations
        ARM: dts: microsom-ar8035: MDIO pad must be set open drain
        ARM: dts: omap54xx-clocks: Fix the l3 and l4 clock rates
        ARM: brcmstb: revert SMP support
        ARM: OMAP2+: hwmod: Rearm wake-up interrupts for DT when MUSB is idled
        ARM: dts: Enable UART wake-up events for beagleboard
        ARM: dts: Remove twl6030 clk32g "regulator"
        ARM: OMAP2+: omap_device: remove warning that clk alias already exists
        ARM: OMAP: fix %d confusingly prefixed with 0x in format string
        ARM: dts: DRA7: fix interrupt-cells for GPIO
        mtd: nand: omap: Fix 1-bit Hamming code scheme, omap_calculate_ecc()
        ARM: dts: omap3430-sdp: Revert to using software ECC for NAND
        ARM: OMAP2+: GPMC: Support Software ECC scheme via DT
        mtd: nand: omap: Revert to using software ECC by default
        ARM: dts: hummingboard/cubox-i: change SPDIF output to be more descriptive
        ARM: dts: hummingboard/cubox-i: add USB OC pinctrl configuration
        ARM: shmobile: r8a7791: add missing 0x0100 for SDCKCR
        ...
      19ed3eb9
  7. 31 Aug, 2014 1 commit