Also the existing logic is that existing markers (HW poison, uffd-simulated HW poison, uffd wp marker) are retained and no error raised on MADV_DONTNEED, and no error on MADV_FREE either, so it'd be consistent with existing behaviour.
HW poison / uffd-simulated HW poison are expected to be zapped: it's just like a mapped page with HWPOISON. So that is correct.
Well, poison is _not_ zapped on MADV_DONTNEED but _is_ on MADV_FREE :) anyway, I
Huh?
madvise_dontneed_single_vma()->zap_page_range_single(details=NULL)->unmap_single_vma(details=NULL) ... zap_pte_range()
} else if (is_hwpoison_entry(entry) || is_poisoned_swp_entry(entry)) { if (!should_zap_cows(details)) continue; ...
Should just zap them.
What am I missing?
Yeah ok it's me who's missing something here, I hadn't noticed details == NULL so should_zap_cows() is true, my mistake!
It's confusing code ... I once had a patch to call it "should_zap_anon_folios" etc, but it would only slightly make it clearer what is actually happening.
In any case we explicitly add code here to prevent guard pages from going. I will correct everything where I wrongly say otherwise, doh!
Right, that's also one of the reasons I don't think "poison" terminology is the best fit, because there are som subtle differences. At least the marker does not mention "poison" but PTE_MARKER_GUARD, which I think is a very good naming :)