amd64: Ignore 1GB mappings in pmap_advise()

This assertion can be triggered by usermode since vm_map_madvise()
doesn't force advice to be applied to an entire largepage mapping.  I
can't see any reason not to permit it, however, since MADV_DONTNEED and
_FREE are advisory and we can simply do nothing when a 1GB mapping is
encountered.

Reviewed by:	alc, kib
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D36675
This commit is contained in:
Mark Johnston 2022-09-24 09:20:48 -04:00
parent 6c2e9f4c32
commit 4551cbbe99

View File

@ -9013,13 +9013,8 @@ pmap_advise(pmap_t pmap, vm_offset_t sva, vm_offset_t eva, int advice)
pdpe = pmap_pml4e_to_pdpe(pml4e, sva);
if ((*pdpe & PG_V) == 0)
continue;
if ((*pdpe & PG_PS) != 0) {
KASSERT(va_next <= eva,
("partial update of non-transparent 1G mapping "
"pdpe %#lx sva %#lx eva %#lx va_next %#lx",
*pdpe, sva, eva, va_next));
if ((*pdpe & PG_PS) != 0)
continue;
}
va_next = (sva + NBPDR) & ~PDRMASK;
if (va_next < sva)