Subversion Repositories HelenOS-historic

Compare Revisions

Regard whitespace Rev 1235 → Rev 1236

/kernel/trunk/generic/include/mm/frame.h
90,6 → 90,7
extern void frame_init(void);
extern pfn_t frame_alloc_generic(__u8 order, int flags, int * status, int *pzone);
extern void frame_free(pfn_t pfn);
extern void frame_reference_add(pfn_t pfn);
 
extern int zone_create(pfn_t start, count_t count, pfn_t confframe, int flags);
void * frame_get_parent(pfn_t frame, int hint);
/kernel/trunk/generic/src/mm/as.c
391,9 → 391,8
if (pte && PTE_VALID(pte)) {
ASSERT(PTE_PRESENT(pte));
frame = PTE_GET_FRAME(pte);
if (!(flags & AS_AREA_DEVICE)) {
/* TODO: increment frame reference count */
}
if (!(flags & AS_AREA_DEVICE))
frame_reference_add(ADDR2PFN(frame));
page_table_unlock(AS, false);
} else {
page_table_unlock(AS, false);
/kernel/trunk/generic/src/mm/frame.c
944,11 → 944,11
 
/** Free a frame.
*
* Find respective frame structure for supplied addr.
* Find respective frame structure for supplied PFN.
* Decrement frame reference count.
* If it drops to zero, move the frame structure to free list.
*
* @param frame Frame no to be freed.
* @param frame Frame number to be freed.
*/
void frame_free(pfn_t pfn)
{
969,8 → 969,34
interrupts_restore(ipl);
}
 
/** Add reference to frame.
*
* Find respective frame structure for supplied PFN and
* increment frame reference count.
*
* @param frame Frame no to be freed.
*/
void frame_reference_add(pfn_t pfn)
{
ipl_t ipl;
zone_t *zone;
frame_t *frame;
 
ipl = interrupts_disable();
 
/*
* First, find host frame zone for addr.
*/
zone = find_zone_and_lock(pfn,NULL);
ASSERT(zone);
frame = &zone->frames[pfn-zone->base];
frame->refcount++;
spinlock_unlock(&zone->lock);
interrupts_restore(ipl);
}
 
/** Mark given range unavailable in frame zones */
void frame_mark_unavailable(pfn_t start, count_t count)
{