• Dan Williams's avatar
    drivers/base/devres: introduce devm_release_action() · 2374b682
    Dan Williams authored
    Patch series "mm/devm_memremap_pages: Fix page release race", v2.
    
    Logan audited the devm_memremap_pages() shutdown path and noticed that
    it was possible to proceed to arch_remove_memory() before all potential
    page references have been reaped.
    
    Introduce a new ->cleanup() callback to do the work of waiting for any
    straggling page references and then perform the percpu_ref_exit() in
    devm_memremap_pages_release() context.
    
    For p2pdma this involves some deeper reworks to reference count
    resources on a per-instance basis rather than a per pci-device basis.  A
    modified genalloc api is introduced to convey a driver-private pointer
    through gen_pool_{alloc,free}() interfaces.  Also, a
    devm_memunmap_pages() api is introduced since p2pdma does not
    auto-release resources on a setup failure.
    
    The dax and pmem changes pass the nvdimm unit tests, and the p2pdma
    changes should now pass testing with the pci_p2pdma_release() fix.
    Jrme, how does this look for HMM?
    
    This patch (of 6):
    
    The devm_add_action() facility allows a resource allocation routine to
    add custom devm semantics.  One such user is devm_memremap_pages().
    
    There is now a need to manually trigger
    devm_memremap_pages_release().  Introduce devm_release_action() so the
    release action can be triggered via a new devm_memunmap_pages() api in a
    follow-on change.
    
    Link: http://lkml.kernel.org/r/155727336530.292046.2926860263201336366.stgit@dwillia2-desk3.amr.corp.intel.comSigned-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Reviewed-by: default avatarIra Weiny <ira.weiny@intel.com>
    Reviewed-by: default avatarLogan Gunthorpe <logang@deltatee.com>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: "Rafael J. Wysocki" <rafael@kernel.org>
    Cc: "Jérôme Glisse" <jglisse@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2374b682
devres.c 27.7 KB