* mmap.c
* - VFS_MMap support
*/
-#define DEBUG 0
+#define DEBUG 1
#include <acess.h>
#include <vfs.h>
#include <vfs_ext.h>
LOG("%i pages anonymous to %p", npages, mapping_dest);
for( ; npages --; mapping_dest += PAGE_SIZE, ofs += PAGE_SIZE )
{
- if( MM_GetPhysAddr(mapping_dest) ) {
+ if( MM_GetPhysAddr((void*)mapping_dest) ) {
// TODO: Set flags to COW if needed (well, if shared)
MM_SetFlags(mapping_dest, MM_PFLAG_COW, MM_PFLAG_COW);
LOG("clear from %p, %i bytes", (void*)(mapping_base + ofs),
PAGE_SIZE - (mapping_base & (PAGE_SIZE-1))
);
memset( (void*)(mapping_base + ofs), 0, PAGE_SIZE - (mapping_base & (PAGE_SIZE-1)));
+ LOG("dune");
}
else {
LOG("New empty page");
if( !pb || pb->BaseOffset > pagenum )
{
void *old_pb = pb;
- pb = malloc( sizeof(tVFS_MMapPageBlock) );
+ pb = calloc( 1, sizeof(tVFS_MMapPageBlock) );
if(!pb) {
Mutex_Release( &h->Node->Lock );
LEAVE_RET('n', NULL);
}
pb->Next = old_pb;
pb->BaseOffset = pagenum - pagenum % MMAP_PAGES_PER_BLOCK;
- memset(pb->PhysAddrs, 0, sizeof(pb->PhysAddrs));
if(prev)
prev->Next = pb;
else
// - Map (and allocate) pages
while( npages -- )
{
- if( MM_GetPhysAddr(mapping_dest) == 0 )
+ if( MM_GetPhysAddr( (void*)mapping_dest ) == 0 )
{
if( pb->PhysAddrs[pagenum - pb->BaseOffset] == 0 )
{
}
// TODO: Clip read length
read_len = nt->Read(h->Node, pagenum*PAGE_SIZE, PAGE_SIZE, (void*)mapping_dest);
-// if( read_len != PAGE_SIZE ) {
-// memset( (void*)(mapping_dest+read_len), 0, PAGE_SIZE-read_len );
-// }
+ // TODO: This was commented out, why?
+ if( read_len != PAGE_SIZE ) {
+ memset( (void*)(mapping_dest+read_len), 0, PAGE_SIZE-read_len );
+ }
}
- pb->PhysAddrs[pagenum - pb->BaseOffset] = MM_GetPhysAddr( mapping_dest );
+ pb->PhysAddrs[pagenum - pb->BaseOffset] = MM_GetPhysAddr( (void*)mapping_dest );
MM_SetPageNode( pb->PhysAddrs[pagenum - pb->BaseOffset], h->Node );
MM_RefPhys( pb->PhysAddrs[pagenum - pb->BaseOffset] );
LOG("Read and map %X to %p (%P)", pagenum*PAGE_SIZE, mapping_dest,
memset(pb->PhysAddrs, 0, sizeof(pb->PhysAddrs));
oldpb->Next = pb;
}
- pagenum = 0;
}
}