c58f009e01
Addresses "[BUG] completely bonkers use of set_need_resched + VM_FAULT_NOPAGE". In the first occurence it was used to try to be nice while releasing the mmap_sem and retrying the fault to work around a locking inversion. The second occurence was never used. There has been some discussion whether we should change the locking order to mmap_sem -> bo_reserve. This patch doesn't address that issue, and leaves that locking order undefined. The solution that we release the mmap_sem if tryreserve fails and wait for the buffer to become unreserved is something we want in any case, and follows how the core vm system waits for pages to be come unlocked while releasing the mmap_sem. The code also outlines what needs to be changed if we want to establish the locking order as mmap_sem -> bo::reserve. One slight issue that remains with this code is that the fault handler might be prone to starvation if another thread countinously reserves the buffer. IMO that usage pattern is highly unlikely. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> |
||
---|---|---|
.. | ||
i2c | ||
ttm | ||
drm_agpsupport.h | ||
drm_buffer.h | ||
drm_cache.h | ||
drm_core.h | ||
drm_crtc_helper.h | ||
drm_crtc.h | ||
drm_dp_helper.h | ||
drm_edid.h | ||
drm_encoder_slave.h | ||
drm_fb_cma_helper.h | ||
drm_fb_helper.h | ||
drm_fixed.h | ||
drm_flip_work.h | ||
drm_gem_cma_helper.h | ||
drm_global.h | ||
drm_hashtab.h | ||
drm_mem_util.h | ||
drm_memory.h | ||
drm_mm.h | ||
drm_os_linux.h | ||
drm_pciids.h | ||
drm_rect.h | ||
drm_sysfs.h | ||
drm_usb.h | ||
drm_vma_manager.h | ||
drmP.h | ||
exynos_drm.h | ||
gma_drm.h | ||
i915_drm.h | ||
i915_pciids.h | ||
i915_powerwell.h | ||
intel-gtt.h |