Skip to content
  • Dan Williams's avatar
    mm: fix get_user_pages() vs device-dax pud mappings · 220ced16
    Dan Williams authored
    A new unit test for the device-dax 1GB enabling currently fails with
    this warning before hanging the test thread:
    
     WARNING: CPU: 0 PID: 21 at lib/percpu-refcount.c:155 percpu_ref_switch_to_atomic_rcu+0x1e3/0x1f0
     percpu ref (dax_pmem_percpu_release [dax_pmem]) <= 0 (0) after switching to atomic
     [..]
     CPU: 0 PID: 21 Comm: rcuos/1 Tainted: G           O    4.10.0-rc7-next-20170207+ #944
     [..]
     Call Trace:
      dump_stack+0x86/0xc3
      __warn+0xcb/0xf0
      warn_slowpath_fmt+0x5f/0x80
      ? rcu_nocb_kthread+0x27a/0x510
      ? dax_pmem_percpu_exit+0x50/0x50 [dax_pmem]
      percpu_ref_switch_to_atomic_rcu+0x1e3/0x1f0
      ? percpu_ref_exit+0x60/0x60
      rcu_nocb_kthread+0x339/0x510
      ? rcu_nocb_kthread+0x27a/0x510
      kthread+0x101/0x140
    
    The get_user_pages() path needs to arrange for references to be taken
    against the dev_pagemap instance backing the pud mapping.  Refactor the
    existing __gup_device_huge_pmd() to also account for the pud case.
    
    Link: http://lkml.kernel.org/r/148653181153.38226.9605457830505509385.stgit@dwillia2-desk3.amr.corp.intel.com
    
    
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Cc: Dave Jiang <dave.jiang@intel.com>
    Cc: Matthew Wilcox <mawilcox@microsoft.com>
    Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Nilesh Choudhury <nilesh.choudhury@oracle.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    220ced16