Closed cycl0ne closed 9 years ago
You have several different things in this report, at least one of which is definitely not an issue.
page_t
:
page->frame
using an index.
alloc_frame
is called on a new page, and dma_frame
works the same way. Since this is a 20-bit field in the overall bitfield, the appropriate shifts will be applied during the assignment, similar to how we can set the various other bits to 1
/0
appropriately.nframes
...
Hey,
sorry.. you are right! damn.. i saw the bitfield and ignored it later :dizzy_face:
for the dirty flag.. this is not so important maybe for you, but the other two which are located there: Cachedisable should be your DMA Pages flagged Writethrough should be your framebuffer flagged
In Task.h:
accessed and dirty are in the wrong location. at this point you have writeback/cachedisable. So the structure should look like this:
In file mem.c under function alloc_frame we find the following error:
the last entry should be : page->frame = index * 0x1000 since we need the adress and not an index;
This error could be hard to find, because normaly you call alloc_frame(get_page(...,1,..)); so get_page already allocated it for you, but in some code (shm.c) you are relying directly on the allocation.
One thing i dont understand:
here you divide memsize / 4.. and then you call your malloc with (nframes8)/32 ... Why the 8 ?
Another "bug" ?
shouldnt the last line be: page->frame = address & FFFFF000;
Cheers C.