1. 17 6月, 2014 5 次提交
    • L
      ARM: integrator: fix section mismatch problem · e1318391
      Linus Walleij 提交于
      This addresses a section mismatch problem in the IM-PD1
      driver in the Integrator/AP.
      
      The IM-PD1 contains a VIC interrupt controller and therefore
      the driver calls vic_init_cascaded() which is marked __init as
      irqchips are simply not hot-pluggable and specifically the VIC
      is assumed to initiate only on boot.
      
      However the module driver model of the Integrator LM bus
      assumes that logic tile drivers can be probed at runtime. This
      is not really the case for IM-PD1: these tiles are detected at
      boot and they cannot be plugged into a running system. Before
      this patch it is of course possible to modprobe them later.
      
      By first forcing the IM-PD1 to bool we make sure this driver
      gets compiled into the kernel, and we know it will be probed
      only at boot time when the tiles are detected, so we can tag
      its probe function __init_refok as we know it won't be called
      after boot now, and the section mismatch problem goes away.
      
      As a side effect, sysfs binding from userspace becomes
      impossible, so we tag the driver to suppress the bind/unbind
      sysfs attributes.
      
      Cc: Russell King <linux@arm.linux.org.uk>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      e1318391
    • J
      ARM: mvebu: DT: fix OpenBlocks AX3-4 RAM size · e47043ae
      Jason Cooper 提交于
      The OpenBlocks AX3-4 has a non-DT bootloader.  It also comes with 1GB of
      soldered on RAM, and a DIMM slot for expansion.
      
      Unfortunately, atags_to_fdt() doesn't work in big-endian mode, so we see
      the following failure when attempting to boot a big-endian kernel:
      
        686 slab pages
        17 pages shared
        0 pages swap cached
        [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
        Kernel panic - not syncing: Out of memory and no killable processes...
      
        CPU: 1 PID: 351 Comm: kworker/u4:0 Not tainted 3.15.0-rc8-next-20140603 #1
        [<c0215a54>] (unwind_backtrace) from [<c021160c>] (show_stack+0x10/0x14)
        [<c021160c>] (show_stack) from [<c0802500>] (dump_stack+0x78/0x94)
        [<c0802500>] (dump_stack) from [<c0800068>] (panic+0x90/0x21c)
        [<c0800068>] (panic) from [<c02b5704>] (out_of_memory+0x320/0x340)
        [<c02b5704>] (out_of_memory) from [<c02b93a0>] (__alloc_pages_nodemask+0x874/0x930)
        [<c02b93a0>] (__alloc_pages_nodemask) from [<c02d446c>] (handle_mm_fault+0x744/0x96c)
        [<c02d446c>] (handle_mm_fault) from [<c02cf250>] (__get_user_pages+0xd0/0x4c0)
        [<c02cf250>] (__get_user_pages) from [<c02f3598>] (get_arg_page+0x54/0xbc)
        [<c02f3598>] (get_arg_page) from [<c02f3878>] (copy_strings+0x278/0x29c)
        [<c02f3878>] (copy_strings) from [<c02f38bc>] (copy_strings_kernel+0x20/0x28)
        [<c02f38bc>] (copy_strings_kernel) from [<c02f4f1c>] (do_execve+0x3a8/0x4c8)
        [<c02f4f1c>] (do_execve) from [<c025ac10>] (____call_usermodehelper+0x15c/0x194)
        [<c025ac10>] (____call_usermodehelper) from [<c020e9b8>] (ret_from_fork+0x14/0x3c)
        CPU0: stopping
        CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.15.0-rc8-next-20140603 #1
        [<c0215a54>] (unwind_backtrace) from [<c021160c>] (show_stack+0x10/0x14)
        [<c021160c>] (show_stack) from [<c0802500>] (dump_stack+0x78/0x94)
        [<c0802500>] (dump_stack) from [<c021429c>] (handle_IPI+0x138/0x174)
        [<c021429c>] (handle_IPI) from [<c02087f0>] (armada_370_xp_handle_irq+0xb0/0xcc)
        [<c02087f0>] (armada_370_xp_handle_irq) from [<c0212100>] (__irq_svc+0x40/0x50)
        Exception stack(0xc0b6bf68 to 0xc0b6bfb0)
        bf60:                   e9fad598 00000000 00f509a3 00000000 c0b6a000 c0b724c4
        bf80: c0b72458 c0b6a000 00000000 00000000 c0b66da0 c0b6a000 00000000 c0b6bfb0
        bfa0: c027bb94 c027bb24 60000313 ffffffff
        [<c0212100>] (__irq_svc) from [<c027bb24>] (cpu_startup_entry+0x54/0x214)
        [<c027bb24>] (cpu_startup_entry) from [<c0ac5b30>] (start_kernel+0x318/0x37c)
        [<c0ac5b30>] (start_kernel) from [<00208078>] (0x208078)
        ---[ end Kernel panic - not syncing: Out of memory and no killable processes...
      
      A similar failure will also occur if ARM_ATAG_DTB_COMPAT isn't selected.
      
      Fix this by setting a sane default (1 GB) in the dts file.
      Signed-off-by: NJason Cooper <jason@lakedaemon.net>
      Tested-by: NKevin Hilman <khilman@linaro.org>
      Cc: <stable@vger.kernel.org> #v3.13+
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      e47043ae
    • A
      ARM: samsung: make SAMSUNG_DMADEV optional · 27873b05
      Arnd Bergmann 提交于
      The only remaining driver using the samsung dmadev code is the broken
      samsung-ac97 sound driver. However, as found by Russell's autobuilder,
      the elaborate dependency chains around it cause problems with
      circular dependencies.
      
      This is an attempt to simplify those dependencies by making the
      SAMSUNG_DMADEV option user-selectable. I also try to keep the
      default settings for all related options unchanged, so we don't
      introduce any regressions against earlier testing on linux-next.
      
      In particular, all s3c64xx and s5p* platforms keep selecting the
      pl330 and pl08x drivers they require, but the select statement
      is now moved towards the main platform option, and it remains
      optional by unselecting CONFIG_DMADEVICES.
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Cc: Kukjin Kim <kgene.kim@samsung.com>
      27873b05
    • A
      ARM: keystone requires ARM_PATCH_PHYS_VIRT · 13ee8955
      Arnd Bergmann 提交于
      The dynamic relocation that the keystone platform performs
      only works if we can pick the phys offset at boot time. It's
      possible that there is another solution for this, but this
      is the easiest workaround. Kernels with ARM_PATCH_PHYS_VIRT
      are not portable across platforms, and I see no reason why
      anyone would run a kernel without ARM_PATCH_PHYS_VIRT on
      keystone.
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Acked-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
      13ee8955
    • A
      ARM: omap2: fix am43xx dependency on l2x0 cache · 2ad501cc
      Arnd Bergmann 提交于
      Commit d941f86f ("ARM: l2c: AM43x: add L2 cache support") enabled
      the L2 cache support for the am43xx SoC, but caused a build regression
      when the driver for that cache controller is disabled:
      
      arch/arm/mach-omap2/built-in.o: In function `am43xx_init_early':
      :(.init.text+0xb20): undefined reference to `omap_l2_cache_init'
      
      This did not happen for OMAP4, which has the same call, but enables
      the l2x0 driver unconditionally. We could do the same thing for
      am43xx, but it seems better to allow turning it off and make the
      code work in either case.
      
      This adds an inline wrapper for omap_l2_cache_init for the disabled
      case, and removes the 'select' from OMAP4 so it becomes a user
      visible option.
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Acked-by: NTony Lindgren <tony@atomide.com>
      Cc: linux-omap@vger.kernel.org
      2ad501cc
  2. 11 6月, 2014 2 次提交
  3. 09 6月, 2014 1 次提交
  4. 08 6月, 2014 3 次提交
  5. 07 6月, 2014 13 次提交
  6. 06 6月, 2014 2 次提交
    • M
      powerpc/mm: Check paca psize is up to date for huge mappings · 09567e7f
      Michael Ellerman 提交于
      We have a bug in our hugepage handling which exhibits as an infinite
      loop of hash faults. If the fault is being taken in the kernel it will
      typically trigger the softlockup detector, or the RCU stall detector.
      
      The bug is as follows:
      
       1. mmap(0xa0000000, ..., MAP_FIXED | MAP_HUGE_TLB | MAP_ANONYMOUS ..)
       2. Slice code converts the slice psize to 16M.
       3. The code on lines 539-540 of slice.c in slice_get_unmapped_area()
          synchronises the mm->context with the paca->context. So the paca slice
          mask is updated to include the 16M slice.
       3. Either:
          * mmap() fails because there are no huge pages available.
          * mmap() succeeds and the mapping is then munmapped.
          In both cases the slice psize remains at 16M in both the paca & mm.
       4. mmap(0xa0000000, ..., MAP_FIXED | MAP_ANONYMOUS ..)
       5. The slice psize is converted back to 64K. Because of the check on line 539
          of slice.c we DO NOT update the paca->context. The paca slice mask is now
          out of sync with the mm slice mask.
       6. User/kernel accesses 0xa0000000.
       7. The SLB miss handler slb_allocate_realmode() **uses the paca slice mask**
          to create an SLB entry and inserts it in the SLB.
      18. With the 16M SLB entry in place the hardware does a hash lookup, no entry
          is found so a data access exception is generated.
      19. The data access handler calls do_page_fault() -> handle_mm_fault().
      10. __handle_mm_fault() creates a THP mapping with do_huge_pmd_anonymous_page().
      11. The hardware retries the access, there is still nothing in the hash table
          so once again a data access exception is generated.
      12. hash_page() calls into __hash_page_thp() and inserts a mapping in the
          hash. Although the THP mapping maps 16M the hashing is done using 64K
          as the segment page size.
      13. hash_page() returns immediately after calling __hash_page_thp(), skipping
          over the code at line 1125. Resulting in the mismatch between the
          paca->context and mm->context not being detected.
      14. The hardware retries the access, the hash it generates using the 16M
          SLB entry does NOT match the hash we inserted.
      15. We take another data access and go into __hash_page_thp().
      16. We see a valid entry in the hpte_slot_array and so we call updatepp()
          which succeeds.
      17. Goto 14.
      
      We could fix this in two ways. The first would be to remove or modify
      the check on line 539 of slice.c.
      
      The second option is to cause the check of paca psize in hash_page() on
      line 1125 to also be done for THP pages.
      
      We prefer the latter, because the check & update of the paca psize is
      not done until we know it's necessary. It's also done only on the
      current cpu, so we don't need to IPI all other cpus.
      
      Without further rearranging the code, the simplest fix is to pull out
      the code that checks paca psize and call it in two places. Firstly for
      THP/hugetlb, and secondly for other mappings as before.
      
      Thanks to Dave Jones for trinity, which originally found this bug.
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Reviewed-by: NAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      CC: stable@vger.kernel.org [v3.11+]
      09567e7f
    • S
      ARM: keystone: Drop use of meminfo since its not available anymore · bbea06f3
      Santosh Shilimkar 提交于
      Laura's series removed the meminfo structure and its no longer available.
      Update keystone code to remove the usage of it.
      Reported-by: NRussell King - ARM Linux <linux@arm.linux.org.uk>
      Signed-off-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      bbea06f3
  7. 05 6月, 2014 14 次提交