diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 169b347c2295..b0243270c267 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -7644,15 +7644,13 @@ pmap_advise(pmap_t pmap, vm_offset_t sva, vm_offset_t eva, int advice) if ((*pte & (PG_MANAGED | PG_V)) != (PG_MANAGED | PG_V)) goto maybe_invlrng; else if ((*pte & (PG_M | PG_RW)) == (PG_M | PG_RW)) { - if (advice == MADV_DONTNEED) { - /* - * Future calls to pmap_is_modified() - * can be avoided by making the page - * dirty now. - */ - m = PHYS_TO_VM_PAGE(*pte & PG_FRAME); - vm_page_dirty(m); - } + /* + * Future calls to pmap_is_modified() + * can be avoided by making the page + * dirty now. + */ + m = PHYS_TO_VM_PAGE(*pte & PG_FRAME); + vm_page_dirty(m); atomic_clear_long(pte, PG_M | PG_A); } else if ((*pte & PG_A) != 0) atomic_clear_long(pte, PG_A); diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 5f00ef92beab..e29fc464f315 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -1112,6 +1112,8 @@ vm_object_madvise(vm_object_t object, vm_pindex_t pindex, vm_pindex_t end, relookup: VM_OBJECT_WLOCK(object); + if (advice == MADV_FREE && object->backing_object != NULL) + advice = MADV_DONTNEED; if (!vm_object_advice_applies(object, advice)) { VM_OBJECT_WUNLOCK(object); return;