mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-13 04:27:41 +00:00
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 | ||