X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Farch%2Farmv7%2Fmm_virt.c;h=b2f74548e94089816537b1673c8ca30528bfef99;hb=819ea8133d95cd688c47b4f688c2503db9a9bccd;hp=146caea83cdabfc49b5972db36dba244facc5cfb;hpb=04a050f42807686dc119838c82372409246d55bb;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/arch/armv7/mm_virt.c b/KernelLand/Kernel/arch/armv7/mm_virt.c index 146caea8..b2f74548 100644 --- a/KernelLand/Kernel/arch/armv7/mm_virt.c +++ b/KernelLand/Kernel/arch/armv7/mm_virt.c @@ -10,7 +10,7 @@ #include #define TRACE_MAPS 0 -#define TRACE_COW 1 +#define TRACE_COW 0 #define AP_KRW_ONLY 1 // Kernel page #define AP_KRO_ONLY 5 // Kernel RO page @@ -328,7 +328,7 @@ int MM_int_GetPageInfo(tVAddr VAddr, tMM_PageInfo *pi) } // --- Exports --- -tPAddr MM_GetPhysAddr(const void *Ptr) +tPAddr MM_GetPhysAddr(volatile const void *Ptr) { tMM_PageInfo pi; if( MM_int_GetPageInfo((tVAddr)Ptr, &pi) ) @@ -803,7 +803,7 @@ void MM_FreeTemp(void *Ptr) MM_Deallocate(VAddr); } -tVAddr MM_MapHWPages(tPAddr PAddr, Uint NPages) +void *MM_MapHWPages(tPAddr PAddr, Uint NPages) { tVAddr ret; int i; @@ -833,17 +833,17 @@ tVAddr MM_MapHWPages(tPAddr PAddr, Uint NPages) MM_Map(ret+i*PAGE_SIZE, PAddr+i*PAGE_SIZE); // and return LEAVE('p', ret); - return ret; + return (void*)ret; } Log_Warning("MMVirt", "MM_MapHWPages: No space for a %i page block", NPages); LEAVE('p', 0); return 0; } -tVAddr MM_AllocDMA(int Pages, int MaxBits, tPAddr *PAddr) +void *MM_AllocDMA(int Pages, int MaxBits, tPAddr *PAddr) { tPAddr phys; - tVAddr ret; + void *ret; phys = MM_AllocPhysRange(Pages, MaxBits); if(!phys) { @@ -852,7 +852,12 @@ tVAddr MM_AllocDMA(int Pages, int MaxBits, tPAddr *PAddr) } ret = MM_MapHWPages(phys, Pages); - *PAddr = phys; + if( !ret ) { + MM_DerefPhys(phys); + return NULL; + } + if( PAddr ) + *PAddr = phys; return ret; }