1. 28 Oct, 2010 1 commit
    • Mika Westerberg's avatar
      ARM: 6464/2: fix spinlock recursion in adjust_pte() · 4e54d93d
      Mika Westerberg authored
      When running following code in a machine which has VIVT caches and
      USE_SPLIT_PTLOCKS is not defined:
      
        fd = open("/etc/passwd", O_RDONLY);
        addr = mmap(NULL, 4096, PROT_READ, MAP_SHARED, fd, 0);
        addr2 = mmap(NULL, 4096, PROT_READ, MAP_SHARED, fd, 0);
      
        v = *((int *)addr);
      
      we will hang in spinlock recursion in the page fault handler:
      
        BUG: spinlock recursion on CPU#0, mmap_test/717
        lock: c5e295d8, .magic: dead4ead, .owner: mmap_test/717,
                        .owner_cpu: 0
        [<c0026604>] (unwind_backtrace+0x0/0xec)
        [<c014ee48>] (do_raw_spin_lock+0x40/0x140)
        [<c0027f68>] (update_mmu_cache+0x208/0x250)
        [<c0079db4>] (__do_fault+0x320/0x3ec)
        [<c007af7c>] (handle_mm_fault+0x2f0/0x6d8)
        [<c0027834>] (do_page_fault+0xdc/0x1cc)
        [<c00202d0>] (do_DataAbort+0x34/0x94)
      
      This comes from the fact that when USE_SPLIT_PTLOCKS is not defined,
      the only lock protecting the page tables is mm->page_table_lock
      which is already locked before update_mmu_cache() is called.
      Signed-off-by: default avatarMika Westerberg <mika.westerberg@iki.fi>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      4e54d93d
  2. 27 Oct, 2010 22 commits
  3. 26 Oct, 2010 17 commits