mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
Fixed reference counting of page tables
Don't print addresses that aren't in the text segment of a module svn path=/trunk/; revision=1627
This commit is contained in:
parent
d458692c89
commit
f827a8f124
3 changed files with 31 additions and 15 deletions
|
@ -57,7 +57,8 @@ extern ULONG init_stack_top;
|
|||
|
||||
extern unsigned int _text_start__, _text_end__;
|
||||
|
||||
static void print_address(PVOID address)
|
||||
STATIC BOOLEAN
|
||||
print_address(PVOID address)
|
||||
{
|
||||
PLIST_ENTRY current_entry;
|
||||
PMODULE_OBJECT current;
|
||||
|
@ -75,12 +76,15 @@ static void print_address(PVOID address)
|
|||
{
|
||||
DbgPrint("<%wZ: %x>", ¤t->Name,
|
||||
address - current->Base);
|
||||
return;
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
current_entry = current_entry->Flink;
|
||||
}
|
||||
#if 0
|
||||
DbgPrint("<%x>", address);
|
||||
#endif
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
ULONG
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: page.c,v 1.19 2001/02/10 22:51:11 dwelch Exp $
|
||||
/* $Id: page.c,v 1.20 2001/02/18 17:43:32 dwelch Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -173,8 +173,9 @@ VOID MmFreePageTable(PEPROCESS Process, PVOID Address)
|
|||
{
|
||||
if (PageTable[i] != 0)
|
||||
{
|
||||
DbgPrint("Page table entry not clear\n");
|
||||
KeBugCheck(0);
|
||||
DbgPrint("Page table entry not clear at %x/%x (is %x)\n",
|
||||
((ULONG)Address / 4*1024*1024), i, PageTable[i]);
|
||||
KeBugCheck(0);
|
||||
}
|
||||
}
|
||||
npage = *(ADDR_TO_PDE(Address));
|
||||
|
@ -324,7 +325,7 @@ VOID MmDeleteVirtualMapping(PEPROCESS Process, PVOID Address, BOOL FreePage)
|
|||
Ptrc = Process->AddressSpace.PageTableRefCountTable;
|
||||
|
||||
Ptrc[ADDR_TO_PAGE_TABLE(Address)]--;
|
||||
#if 0
|
||||
#if 1
|
||||
if (Ptrc[ADDR_TO_PAGE_TABLE(Address)] == 0)
|
||||
{
|
||||
MmFreePageTable(Process, Address);
|
||||
|
@ -441,9 +442,20 @@ NTSTATUS MmCreateVirtualMapping(PEPROCESS Process,
|
|||
|
||||
if (!MmIsUsablePage((PVOID)PhysicalAddress))
|
||||
{
|
||||
DPRINT1("Page not usable\n");
|
||||
KeBugCheck(0);
|
||||
}
|
||||
|
||||
if (Process == NULL && Address < (PVOID)KERNEL_BASE)
|
||||
{
|
||||
DPRINT1("No process\n");
|
||||
KeBugCheck(0);
|
||||
}
|
||||
if (Process != NULL && Address >= (PVOID)KERNEL_BASE)
|
||||
{
|
||||
DPRINT1("Setting kernel address with process context\n");
|
||||
KeBugCheck(0);
|
||||
}
|
||||
|
||||
Attributes = ProtectToPTE(flProtect);
|
||||
|
||||
if (Process != NULL && Process != CurrentProcess)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: section.c,v 1.46 2001/02/14 02:53:53 dwelch Exp $
|
||||
/* $Id: section.c,v 1.47 2001/02/18 17:43:32 dwelch Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -218,7 +218,7 @@ MmWaitForPendingOperationSection(PMADDRESS_SPACE AddressSpace,
|
|||
* and have a reference to a page containing valid data for the
|
||||
* section offset. Set the page and return success.
|
||||
*/
|
||||
Status = MmCreateVirtualMapping(NULL,
|
||||
Status = MmCreateVirtualMapping(PsGetCurrentProcess(),
|
||||
Address,
|
||||
Attributes,
|
||||
(ULONG)Page);
|
||||
|
@ -294,7 +294,7 @@ MmNotPresentFaultSectionView(PMADDRESS_SPACE AddressSpace,
|
|||
/*
|
||||
* Just map the desired physical page
|
||||
*/
|
||||
Status = MmCreateVirtualMapping(NULL,
|
||||
Status = MmCreateVirtualMapping(PsGetCurrentProcess(),
|
||||
Address,
|
||||
MemoryArea->Attributes,
|
||||
Offset.QuadPart);
|
||||
|
@ -329,7 +329,7 @@ MmNotPresentFaultSectionView(PMADDRESS_SPACE AddressSpace,
|
|||
MmLockSectionSegment(Segment);
|
||||
Page = MmAllocPage(0);
|
||||
}
|
||||
Status = MmCreateVirtualMapping(NULL,
|
||||
Status = MmCreateVirtualMapping(PsGetCurrentProcess(),
|
||||
Address,
|
||||
MemoryArea->Attributes,
|
||||
(ULONG)Page);
|
||||
|
@ -406,7 +406,7 @@ MmNotPresentFaultSectionView(PMADDRESS_SPACE AddressSpace,
|
|||
Page = (PVOID)Entry;
|
||||
MmReferencePage(Page);
|
||||
|
||||
Status = MmCreateVirtualMapping(NULL,
|
||||
Status = MmCreateVirtualMapping(PsGetCurrentProcess(),
|
||||
Address,
|
||||
Attributes,
|
||||
(ULONG)Page);
|
||||
|
@ -500,7 +500,7 @@ MmNotPresentFaultSectionView(PMADDRESS_SPACE AddressSpace,
|
|||
*/
|
||||
MmSetWaitPage(Page);
|
||||
|
||||
Status = MmCreateVirtualMapping(NULL,
|
||||
Status = MmCreateVirtualMapping(PsGetCurrentProcess(),
|
||||
Address,
|
||||
Attributes,
|
||||
(ULONG)Page);
|
||||
|
@ -541,7 +541,7 @@ MmNotPresentFaultSectionView(PMADDRESS_SPACE AddressSpace,
|
|||
Page = (PVOID)Entry;
|
||||
MmReferencePage(Page);
|
||||
|
||||
Status = MmCreateVirtualMapping(NULL,
|
||||
Status = MmCreateVirtualMapping(PsGetCurrentProcess(),
|
||||
Address,
|
||||
Attributes,
|
||||
(ULONG)Page);
|
||||
|
@ -626,7 +626,7 @@ MmAccessFaultSectionView(PMADDRESS_SPACE AddressSpace,
|
|||
memcpy(NewAddress, (PVOID)PAGE_ROUND_DOWN(Address), PAGESIZE);
|
||||
ExUnmapPage(NewAddress);
|
||||
|
||||
Status = MmCreateVirtualMapping(NULL,
|
||||
Status = MmCreateVirtualMapping(PsGetCurrentProcess(),
|
||||
Address,
|
||||
MemoryArea->Attributes,
|
||||
(ULONG)NewPage);
|
||||
|
|
Loading…
Reference in a new issue