On Tue, Mar 8, 2022 at 12:21 AM David Hildenbrand <david@xxxxxxxxxx> wrote: > > As raised offline already, I suspect > > shrink_active_list() > ->page_referenced() > ->page_referenced_one() > ->ptep_clear_flush_young_notify() > ->ptep_clear_flush_young() > > which results on s390x in: > > static inline pte_t pte_mkold(pte_t pte) > { > pte_val(pte) &= ~_PAGE_YOUNG; > pte_val(pte) |= _PAGE_INVALID; > return pte; > } Yeah, that looks likely. It looks to me like GUP just doesn't care about _PAGE_INVALID on s390, and happily looks up that page despite it not being "present" as far as hardware is concerned. Your actual patch looks pretty nasty, though. We avoid marking it accessed on purpose (to avoid atomicity issues wrt hw-dirty bits etc), but still, that patch makes me go "there has to be a better way". Linus