mirror of
https://github.com/choff/anbox-modules.git
synced 2026-10-17 16:55:48 +08:00
binder: don't relock after LRU_REMOVED_RETRY on Linux >= 6.13
Since 6.13 the list_lru walker reacquires the lock itself after LRU_REMOVED_RETRY. Taking it in the callback makes the next lock_list_lru_of_memcg() spin forever, leaving kswapd at 100% CPU in binder_shrink_scan().
This commit is contained in:
parent
96d5d960fe
commit
0ee331db89
@ -1048,8 +1048,16 @@ enum lru_status binder_alloc_free_page(struct list_head *item,
|
|||||||
|
|
||||||
trace_binder_unmap_kernel_end(alloc, index);
|
trace_binder_unmap_kernel_end(alloc, index);
|
||||||
|
|
||||||
spin_lock(lock);
|
|
||||||
mutex_unlock(&alloc->mutex);
|
mutex_unlock(&alloc->mutex);
|
||||||
|
#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 13, 0) && \
|
||||||
|
!defined(RHEL_10_1_BACKPORTS))
|
||||||
|
/* Before 6.13, LRU_REMOVED_RETRY means the lock was reacquired. */
|
||||||
|
spin_lock(lock);
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* Since 6.13 the walker relocks itself after LRU_REMOVED_RETRY;
|
||||||
|
* taking the lock here would make it spin forever (kswapd at 100%).
|
||||||
|
*/
|
||||||
return LRU_REMOVED_RETRY;
|
return LRU_REMOVED_RETRY;
|
||||||
|
|
||||||
err_mmap_read_lock_failed:
|
err_mmap_read_lock_failed:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user