mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-27 11:55:53 +00:00
4adcf7fb67
ipath_user_sdma_queue_pkts() gets called with mmap_sem held for writing. Except for get_user_pages() deep down in ipath_user_sdma_pin_pages() we don't seem to need mmap_sem at all. Even more interestingly the function ipath_user_sdma_queue_pkts() (and also ipath_user_sdma_coalesce() called somewhat later) call copy_from_user() which can hit a page fault and we deadlock on trying to get mmap_sem when handling that fault. So just make ipath_user_sdma_pin_pages() use get_user_pages_fast() and leave mmap_sem locking for mm. This deadlock has actually been observed in the wild when the node is under memory pressure. Cc: <stable@vger.kernel.org> Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com> [ Merged in fix for call to get_user_pages_fast from Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>. - Roland ] Signed-off-by: Roland Dreier <roland@purestorage.com> |
||
---|---|---|
.. | ||
ipath_common.h | ||
ipath_cq.c | ||
ipath_debug.h | ||
ipath_diag.c | ||
ipath_dma.c | ||
ipath_driver.c | ||
ipath_eeprom.c | ||
ipath_file_ops.c | ||
ipath_fs.c | ||
ipath_iba6110.c | ||
ipath_init_chip.c | ||
ipath_intr.c | ||
ipath_kernel.h | ||
ipath_keys.c | ||
ipath_mad.c | ||
ipath_mmap.c | ||
ipath_mr.c | ||
ipath_qp.c | ||
ipath_rc.c | ||
ipath_registers.h | ||
ipath_ruc.c | ||
ipath_sdma.c | ||
ipath_srq.c | ||
ipath_stats.c | ||
ipath_sysfs.c | ||
ipath_uc.c | ||
ipath_ud.c | ||
ipath_user_pages.c | ||
ipath_user_sdma.c | ||
ipath_user_sdma.h | ||
ipath_verbs_mcast.c | ||
ipath_verbs.c | ||
ipath_verbs.h | ||
ipath_wc_ppc64.c | ||
ipath_wc_x86_64.c | ||
Kconfig | ||
Makefile |