X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Farch%2Fx86%2Fmm_virt.c;h=51a3f6211aa3f7d2bd924890a65852ec18b35fe4;hb=6d6b367c4f5e413a9e4135d9f5c40077c3724525;hp=bd7b1dff66adb4474783db55a1d589fcf7d80857;hpb=51ab5f489bc356940c95cc936fd0508e8f07ea97;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/arch/x86/mm_virt.c b/KernelLand/Kernel/arch/x86/mm_virt.c index bd7b1dff..51a3f621 100644 --- a/KernelLand/Kernel/arch/x86/mm_virt.c +++ b/KernelLand/Kernel/arch/x86/mm_virt.c @@ -171,6 +171,7 @@ void MM_PageFault(tVAddr Addr, Uint ErrorCode, tRegs *Regs) && gaPageTable[Addr>>12] & PF_COW ) { tPAddr paddr; + __asm__ __volatile__ ("sti"); if(MM_GetRefCount( gaPageTable[Addr>>12] & ~0xFFF ) == 1) { gaPageTable[Addr>>12] &= ~PF_COW; @@ -197,6 +198,7 @@ void MM_PageFault(tVAddr Addr, Uint ErrorCode, tRegs *Regs) // If it was a user, tell the thread handler if(ErrorCode & 4) { + __asm__ __volatile__ ("sti"); Log_Warning("MMVirt", "User %s %s memory%s", (ErrorCode&2?"write to":"read from"), (ErrorCode&1?"bad/locked":"non-present"), @@ -439,7 +441,8 @@ int MM_Map(tVAddr VAddr, tPAddr PAddr) //ENTER("xVAddr xPAddr", VAddr, PAddr); // Sanity check if( PAddr & 0xFFF || VAddr & 0xFFF ) { - Log_Warning("MM_Virt", "MM_Map - Physical or Virtual Addresses are not aligned"); + Log_Warning("MM_Virt", "MM_Map - Physical or Virtual Addresses are not aligned (0x%P and %p)", + PAddr, VAddr); //LEAVE('i', 0); return 0; } @@ -1072,6 +1075,9 @@ tVAddr MM_AllocDMA(int Pages, int MaxBits, tPAddr *PhysAddr) ENTER("iPages iMaxBits pPhysAddr", Pages, MaxBits, PhysAddr); + if(MaxBits == -1) + MaxBits = PHYS_BITS; + // Sanity Check if(MaxBits < 12 || !PhysAddr) { LEAVE('i', 0);