aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/fpga/ts73xx-fpga.c
diff options
context:
space:
mode:
authorDan Williams <[email protected]>2019-06-13 22:56:33 +0000
committerLinus Torvalds <[email protected]>2019-06-14 03:34:56 +0000
commit50f44ee7248ad2f7984ef081974a6ecd09724b3e (patch)
treeab753d9044434c94c8e6d70ead68173c2af339f6 /drivers/fpga/ts73xx-fpga.c
parentPCI/P2PDMA: track pgmap references per resource, not globally (diff)
downloadkernel-50f44ee7248ad2f7984ef081974a6ecd09724b3e.tar.gz
kernel-50f44ee7248ad2f7984ef081974a6ecd09724b3e.zip
mm/devm_memremap_pages: fix final page put race
Logan noticed that devm_memremap_pages_release() kills the percpu_ref drops all the page references that were acquired at init and then immediately proceeds to unplug, arch_remove_memory(), the backing pages for the pagemap. If for some reason device shutdown actually collides with a busy / elevated-ref-count page then arch_remove_memory() should be deferred until after that reference is dropped. As it stands the "wait for last page ref drop" happens *after* devm_memremap_pages_release() returns, which is obviously too late and can lead to crashes. Fix this situation by assigning the responsibility to wait for the percpu_ref to go idle to devm_memremap_pages() with a new ->cleanup() callback. Implement the new cleanup callback for all devm_memremap_pages() users: pmem, devdax, hmm, and p2pdma. Link: http://lkml.kernel.org/r/155727339156.292046.5432007428235387859.stgit@dwillia2-desk3.amr.corp.intel.com Fixes: 41e94a851304 ("add devm_memremap_pages") Signed-off-by: Dan Williams <[email protected]> Reported-by: Logan Gunthorpe <[email protected]> Reviewed-by: Ira Weiny <[email protected]> Reviewed-by: Logan Gunthorpe <[email protected]> Cc: Bjorn Helgaas <[email protected]> Cc: "Jérôme Glisse" <[email protected]> Cc: Christoph Hellwig <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Cc: "Rafael J. Wysocki" <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'drivers/fpga/ts73xx-fpga.c')
0 files changed, 0 insertions, 0 deletions