什么是 VM_BUG_ON_PAGE(PageLRU(page) || PageUnevictable(page))?

What is VM_BUG_ON_PAGE(PageLRU(page) || PageUnevictable(page))?

[   19.492487] page dumped because: VM_BUG_ON_PAGE(PageLRU(page) || PageUnevictable(page))
[   19.500551] page->mem_cgroup:be008c00
[   19.504226] ------------[ cut here ]------------ //kernel panic here
[   19.508851] kernel BUG at mm/vmscan.c:1350!
[   19.513032] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM

请告诉我错误信息是什么意思?

这意味着,您请求的页面已被另一个process.so锁定,该页面上有不可清除标志。

例如

如果你保留了512MB的CMA区域,从CMA区域任何进程都可以使用页面(仅限MOVABLE PAGES),如果进程从cma区域获取页面作为可移动页面,但是锁定(VM_LOCKED)获取页面后使用 mlock() 的页面,但是当请求 CMA 区域时,连续区域比它无法迁移该 locked/pinned 页面。

这是稳定的内核错误(4.12+): patch-link