diff --git a/reactos/ntoskrnl/cc/copy.c b/reactos/ntoskrnl/cc/copy.c index e9739367db6..2f11e957eb5 100644 --- a/reactos/ntoskrnl/cc/copy.c +++ b/reactos/ntoskrnl/cc/copy.c @@ -1,4 +1,4 @@ -/* $Id: copy.c,v 1.21 2004/05/22 18:28:18 hbirr Exp $ +/* $Id: copy.c,v 1.22 2004/06/06 07:52:22 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -136,7 +136,7 @@ ReadCacheSegmentChain(PBCB Bcb, ULONG ReadOffset, ULONG Length, PHYSICAL_ADDRESS page; address = (char*)current2->BaseAddress + (i * PAGE_SIZE); page = MmGetPhysicalAddressForProcess(NULL, address); - ((PULONG)(Mdl + 1))[offset] = page.u.LowPart; + ((PULONG)(Mdl + 1))[offset] = page.QuadPart >> PAGE_SHIFT; offset++; } current2 = current2->NextInChain; @@ -553,7 +553,7 @@ CcZeroData (IN PFILE_OBJECT FileObject, Mdl->MdlFlags |= (MDL_PAGES_LOCKED | MDL_IO_PAGE_READ); for (i = 0; i < ((Mdl->Size - sizeof(MDL)) / sizeof(ULONG)); i++) { - ((PULONG)(Mdl + 1))[i] = CcZeroPage.u.LowPart; + ((PULONG)(Mdl + 1))[i] = CcZeroPage.QuadPart >> PAGE_SHIFT; } KeInitializeEvent(&Event, NotificationEvent, FALSE); Status = IoPageWrite(FileObject, Mdl, &WriteOffset, &Event, &Iosb); diff --git a/reactos/ntoskrnl/mm/mdl.c b/reactos/ntoskrnl/mm/mdl.c index ff2bc4ef119..c6d8a369426 100644 --- a/reactos/ntoskrnl/mm/mdl.c +++ b/reactos/ntoskrnl/mm/mdl.c @@ -1,4 +1,4 @@ -/* $Id: mdl.c,v 1.63 2004/05/16 22:27:57 navaraf Exp $ +/* $Id: mdl.c,v 1.64 2004/06/06 07:52:22 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -111,6 +111,7 @@ MmUnlockPages(PMDL Mdl) { ULONG i; PULONG MdlPages; + PHYSICAL_ADDRESS Page; /* * MmProbeAndLockPages MUST have been called to lock this mdl! @@ -150,17 +151,9 @@ MmUnlockPages(PMDL Mdl) MdlPages = (PULONG)(Mdl + 1); for (i=0; i<(PAGE_ROUND_UP(Mdl->ByteCount+Mdl->ByteOffset)/PAGE_SIZE); i++) { -#if defined(__GNUC__) - MmUnlockPage((LARGE_INTEGER)(LONGLONG)MdlPages[i]); - MmDereferencePage((LARGE_INTEGER)(LONGLONG)MdlPages[i]); -#else - - PHYSICAL_ADDRESS dummyJunkNeeded; - dummyJunkNeeded.QuadPart = MdlPages[i]; - MmUnlockPage(dummyJunkNeeded); - MmDereferencePage(dummyJunkNeeded); -#endif - + Page.QuadPart = MdlPages[i] << PAGE_SHIFT; + MmUnlockPage(Page); + MmDereferencePage(Page); } Mdl->MdlFlags &= ~MDL_PAGES_LOCKED; @@ -193,6 +186,7 @@ MmMapLockedPages(PMDL Mdl, KPROCESSOR_MODE AccessMode) ULONG PageCount; ULONG StartingOffset; PEPROCESS CurrentProcess; + PHYSICAL_ADDRESS Page; DPRINT("MmMapLockedPages(Mdl %x, AccessMode %x)\n", Mdl, AccessMode); @@ -283,20 +277,11 @@ MmMapLockedPages(PMDL Mdl, KPROCESSOR_MODE AccessMode) for (i = 0; i < PageCount; i++) { NTSTATUS Status; -#if !defined(__GNUC__) - - PHYSICAL_ADDRESS dummyJunkNeeded; - dummyJunkNeeded.QuadPart = MdlPages[i]; -#endif - + Page.QuadPart = MdlPages[i] << PAGE_SHIFT; Status = MmCreateVirtualMapping(CurrentProcess, (PVOID)((ULONG)Base+(i*PAGE_SIZE)), PAGE_READWRITE, -#if defined(__GNUC__) - (LARGE_INTEGER)(LONGLONG)MdlPages[i], -#else - dummyJunkNeeded, -#endif + Page, FALSE); if (!NT_SUCCESS(Status)) { @@ -427,7 +412,7 @@ MmBuildMdlFromPages(PMDL Mdl, PULONG Pages) for (i=0;i<(PAGE_ROUND_UP(Mdl->ByteOffset+Mdl->ByteCount)/PAGE_SIZE);i++) { - MdlPages[i] = Pages[i]; + MdlPages[i] = Pages[i] >> PAGE_SHIFT; } //FIXME: this flag should be set by the caller perhaps? @@ -460,6 +445,7 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl, ULONG NrPages; NTSTATUS Status; KPROCESSOR_MODE Mode; + PHYSICAL_ADDRESS Page; PEPROCESS CurrentProcess = PsGetCurrentProcess(); DPRINT("MmProbeAndLockPages(Mdl %x)\n", Mdl); @@ -475,13 +461,13 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl, if (Mdl->StartVa >= (PVOID)KERNEL_BASE && - (MmGetPhysicalAddressForProcess(NULL, Mdl->StartVa).u.LowPart >> PAGE_SHIFT) > MmPageArraySize) + (MmGetPhysicalAddressForProcess(NULL, Mdl->StartVa).QuadPart >> PAGE_SHIFT) > MmPageArraySize) { /* phys addr is not phys memory so this must be io memory */ for (i = 0; i < NrPages; i++) { - MdlPages[i] = MmGetPhysicalAddressForProcess(NULL, (char*)Mdl->StartVa + (i*PAGE_SIZE)).u.LowPart; + MdlPages[i] = MmGetPhysicalAddressForProcess(NULL, (char*)Mdl->StartVa + (i*PAGE_SIZE)).QuadPart >> PAGE_SHIFT; } Mdl->MdlFlags |= MDL_PAGES_LOCKED|MDL_IO_SPACE; @@ -526,17 +512,9 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl, { for (j = 0; j < i; j++) { -#if defined(__GNUC__) - MmUnlockPage((LARGE_INTEGER)(LONGLONG)MdlPages[j]); - MmDereferencePage((LARGE_INTEGER)(LONGLONG)MdlPages[j]); -#else - - PHYSICAL_ADDRESS dummyJunkNeeded; - dummyJunkNeeded.QuadPart = MdlPages[j]; - MmUnlockPage(dummyJunkNeeded); - MmDereferencePage(dummyJunkNeeded); -#endif - + Page.QuadPart = MdlPages[j] << PAGE_SHIFT; + MmUnlockPage(Page); + MmDereferencePage(Page); } ExRaiseStatus(Status); } @@ -554,35 +532,16 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl, { for (j = 0; j < i; j++) { -#if defined(__GNUC__) - MmUnlockPage((LARGE_INTEGER)(LONGLONG)MdlPages[j]); - MmDereferencePage( - (LARGE_INTEGER)(LONGLONG)MdlPages[j]); -#else - - PHYSICAL_ADDRESS dummyJunkNeeded; - dummyJunkNeeded.QuadPart = MdlPages[j]; - MmUnlockPage(dummyJunkNeeded); - MmDereferencePage(dummyJunkNeeded); -#endif - + Page.QuadPart = (ULONGLONG)MdlPages[j] << PAGE_SHIFT; + MmUnlockPage(Page); + MmDereferencePage(Page); } ExRaiseStatus(Status); } } - MdlPages[i] = MmGetPhysicalAddressForProcess(NULL, Address).u.LowPart; -#if defined(__GNUC__) - - MmReferencePage((LARGE_INTEGER)(LONGLONG)MdlPages[i]); -#else - - { - PHYSICAL_ADDRESS dummyJunkNeeded; - dummyJunkNeeded.QuadPart = MdlPages[i]; - MmReferencePage(dummyJunkNeeded); - } -#endif - + Page = MmGetPhysicalAddressForProcess(NULL, Address); + MdlPages[i] = Page.QuadPart >> PAGE_SHIFT; + MmReferencePage(Page); } MmUnlockAddressSpace(&CurrentProcess->AddressSpace); @@ -644,7 +603,7 @@ MmBuildMdlForNonPagedPool (PMDL Mdl) for (i=0; i < PageCount; i++) { ((PULONG)(Mdl + 1))[i] = - (MmGetPhysicalAddress((char*)Mdl->StartVa + (i * PAGE_SIZE))).u.LowPart; + (MmGetPhysicalAddress((char*)Mdl->StartVa + (i * PAGE_SIZE))).QuadPart >> PAGE_SHIFT; } Mdl->MdlFlags |= MDL_SOURCE_IS_NONPAGED_POOL; diff --git a/reactos/ntoskrnl/mm/pagefile.c b/reactos/ntoskrnl/mm/pagefile.c index b984a62e70f..535a617accc 100644 --- a/reactos/ntoskrnl/mm/pagefile.c +++ b/reactos/ntoskrnl/mm/pagefile.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: pagefile.c,v 1.45 2004/05/20 08:37:20 hbirr Exp $ +/* $Id: pagefile.c,v 1.46 2004/06/06 07:52:22 hbirr Exp $ * * PROJECT: ReactOS kernel * FILE: ntoskrnl/mm/pagefile.c @@ -485,7 +485,7 @@ MmDumpToPagingFile(ULONG BugCode, { PMM_CORE_DUMP_HEADER Headers; NTSTATUS Status; - UCHAR MdlBase[sizeof(MDL) + sizeof(PVOID)]; + UCHAR MdlBase[sizeof(MDL) + sizeof(ULONG)]; PMDL Mdl = (PMDL)MdlBase; PETHREAD Thread = PsGetCurrentThread(); ULONG StackSize; @@ -553,7 +553,7 @@ MmDumpToPagingFile(ULONG BugCode, RetrievalPointers = PagingFileList[MmCoreDumpPageFile]->RetrievalPointers; /* Dump the header. */ - MdlMap[0] = MmGetPhysicalAddress(MmCoreDumpPageFrame).u.LowPart; + MdlMap[0] = MmGetPhysicalAddress(MmCoreDumpPageFrame).QuadPart >> PAGE_SHIFT; #if defined(__GNUC__) DiskOffset = MmGetOffsetPageFile(RetrievalPointers, (LARGE_INTEGER)0LL); @@ -586,7 +586,7 @@ MmDumpToPagingFile(ULONG BugCode, { LARGE_INTEGER PhysicalAddress; PhysicalAddress.QuadPart = i * PAGE_SIZE; - MdlMap[0] = i * PAGE_SIZE; + MdlMap[0] = i; MmCreateVirtualMappingForKernel(MmCoreDumpPageFrame, PAGE_READWRITE, PhysicalAddress);