X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=rostests%2Fkmtests%2Fntos_mm%2FMmMdl.c;h=7afd4a62ce2508a737e34411c66083dc5d2e174c;hp=85dd3fc501dbca50b25b167a7e3ebfbf249d0a35;hb=317b564ba046551b61e5307fb6eb56eda38baaa5;hpb=eb33bb164dc48730b5bbe6da5488f87479ee9156 diff --git a/rostests/kmtests/ntos_mm/MmMdl.c b/rostests/kmtests/ntos_mm/MmMdl.c index 85dd3fc501d..7afd4a62ce2 100644 --- a/rostests/kmtests/ntos_mm/MmMdl.c +++ b/rostests/kmtests/ntos_mm/MmMdl.c @@ -19,6 +19,8 @@ TestMmAllocatePagesForMdl(VOID) PMDL Mdls[32]; PVOID SystemVas[32]; ULONG i; + PPFN_NUMBER MdlPages; + ULONG MdlPageCount; LowAddress.QuadPart = 0; HighAddress.QuadPart = -1; @@ -34,7 +36,16 @@ TestMmAllocatePagesForMdl(VOID) ok(MmGetMdlByteCount(Mdl) == 2 * 1024 * 1024, "Byte count: %lu\n", MmGetMdlByteCount(Mdl)); ok(MmGetMdlVirtualAddress(Mdl) == NULL, "Virtual address: %p\n", MmGetMdlVirtualAddress(Mdl)); ok(!(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", Mdl->MdlFlags); + MdlPages = MmGetMdlPfnArray(Mdl); + MdlPageCount = ADDRESS_AND_SIZE_TO_SPAN_PAGES(MmGetMdlVirtualAddress(Mdl), MmGetMdlByteCount(Mdl)); + ok(MdlPageCount == 2 * 1024 * 1024 / PAGE_SIZE, "MdlPageCount = %lu\n", MdlPageCount); + for (i = 0; i < MdlPageCount; i++) + { + ok(MdlPages[i] != 0 && MdlPages[i] != (PFN_NUMBER)-1, + "MdlPages[%lu] = 0x%I64x\n", i, (ULONGLONG)MdlPages[i]); + } MmFreePagesFromMdl(Mdl); + ExFreePoolWithTag(Mdl, 0); /* Now map/unmap it */ Mdl = MmAllocatePagesForMdl(LowAddress, @@ -66,6 +77,7 @@ TestMmAllocatePagesForMdl(VOID) ok(MmGetMdlVirtualAddress(Mdl) == NULL, "Virtual address: %p\n", MmGetMdlVirtualAddress(Mdl)); ok(!(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", Mdl->MdlFlags); MmFreePagesFromMdl(Mdl); + ExFreePoolWithTag(Mdl, 0); /* Now map it, and free without unmapping */ Mdl = MmAllocatePagesForMdl(LowAddress, @@ -90,6 +102,7 @@ TestMmAllocatePagesForMdl(VOID) ok(Mdl->MappedSystemVa == SystemVa, "MappedSystemVa: %p, System VA: %p\n", Mdl->MappedSystemVa, SystemVa); ok((Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", Mdl->MdlFlags); MmFreePagesFromMdl(Mdl); + ExFreePoolWithTag(Mdl, 0); /* try to allocate 2 GB -- should succeed but not map */ Mdl = MmAllocatePagesForMdl(LowAddress, @@ -102,6 +115,14 @@ TestMmAllocatePagesForMdl(VOID) ok(MmGetMdlByteCount(Mdl) != 2UL * 1024 * 1024 * 1024, "Byte count: %lu\n", MmGetMdlByteCount(Mdl)); ok(MmGetMdlVirtualAddress(Mdl) == NULL, "Virtual address: %p\n", MmGetMdlVirtualAddress(Mdl)); ok(!(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", Mdl->MdlFlags); + MdlPages = MmGetMdlPfnArray(Mdl); + MdlPageCount = ADDRESS_AND_SIZE_TO_SPAN_PAGES(MmGetMdlVirtualAddress(Mdl), MmGetMdlByteCount(Mdl)); + ok(MdlPageCount < 2UL * 1024 * 1024 * 1024 / PAGE_SIZE, "MdlPageCount = %lu\n", MdlPageCount); + for (i = 0; i < MdlPageCount; i++) + { + ok(MdlPages[i] != 0 && MdlPages[i] != (PFN_NUMBER)-1, + "MdlPages[%lu] = 0x%I64x\n", i, (ULONGLONG)MdlPages[i]); + } SystemVa = MmMapLockedPagesSpecifyCache(Mdl, KernelMode, MmCached, @@ -115,6 +136,7 @@ TestMmAllocatePagesForMdl(VOID) ok(MmGetMdlVirtualAddress(Mdl) == NULL, "Virtual address: %p\n", MmGetMdlVirtualAddress(Mdl)); ok(!(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", Mdl->MdlFlags); MmFreePagesFromMdl(Mdl); + ExFreePoolWithTag(Mdl, 0); } /* now allocate and map 32 MB Mdls until we fail */ @@ -157,6 +179,7 @@ TestMmAllocatePagesForMdl(VOID) if (SystemVas[i] != NULL) MmUnmapLockedPages(SystemVas[i], Mdls[i]); MmFreePagesFromMdl(Mdls[i]); + ExFreePoolWithTag(Mdls[i], 0); if (SystemVas[i] == NULL) break; }