Changeset f3ac636 in mainline
- Timestamp:
- 2006-04-26T11:57:43Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6fa476f7
- Parents:
- df0103f7
- Location:
- generic
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
generic/include/mm/frame.h
rdf0103f7 rf3ac636 91 91 extern pfn_t frame_alloc_generic(__u8 order, int flags, int * status, int *pzone); 92 92 extern void frame_free(pfn_t pfn); 93 extern void frame_reference_add(pfn_t pfn); 93 94 94 95 extern int zone_create(pfn_t start, count_t count, pfn_t confframe, int flags); -
generic/src/mm/as.c
rdf0103f7 rf3ac636 392 392 ASSERT(PTE_PRESENT(pte)); 393 393 frame = PTE_GET_FRAME(pte); 394 if (!(flags & AS_AREA_DEVICE)) { 395 /* TODO: increment frame reference count */ 396 } 394 if (!(flags & AS_AREA_DEVICE)) 395 frame_reference_add(ADDR2PFN(frame)); 397 396 page_table_unlock(AS, false); 398 397 } else { -
generic/src/mm/frame.c
rdf0103f7 rf3ac636 59 59 link_t buddy_link; /**< link to the next free block inside one order */ 60 60 void *parent; /**< If allocated by slab, this points there */ 61 } frame_t;61 } frame_t; 62 62 63 63 typedef struct { 64 64 SPINLOCK_DECLARE(lock); /**< this lock protects everything below */ 65 pfn_t base; /**< frame_no of the first frame in the frames array */65 pfn_t base; /**< frame_no of the first frame in the frames array */ 66 66 count_t count; /**< Size of zone */ 67 67 … … 72 72 buddy_system_t * buddy_system; /**< buddy system for the zone */ 73 73 int flags; 74 } zone_t;74 } zone_t; 75 75 76 76 /* … … 83 83 int count; 84 84 zone_t *info[ZONES_MAX]; 85 } zones;85 } zones; 86 86 87 87 … … 945 945 /** Free a frame. 946 946 * 947 * Find respective frame structure for supplied addr.947 * Find respective frame structure for supplied PFN. 948 948 * Decrement frame reference count. 949 949 * If it drops to zero, move the frame structure to free list. 950 950 * 951 * @param frame Frame n oto be freed.951 * @param frame Frame number to be freed. 952 952 */ 953 953 void frame_free(pfn_t pfn) … … 970 970 } 971 971 972 972 /** Add reference to frame. 973 * 974 * Find respective frame structure for supplied PFN and 975 * increment frame reference count. 976 * 977 * @param frame Frame no to be freed. 978 */ 979 void frame_reference_add(pfn_t pfn) 980 { 981 ipl_t ipl; 982 zone_t *zone; 983 frame_t *frame; 984 985 ipl = interrupts_disable(); 986 987 /* 988 * First, find host frame zone for addr. 989 */ 990 zone = find_zone_and_lock(pfn,NULL); 991 ASSERT(zone); 992 993 frame = &zone->frames[pfn-zone->base]; 994 frame->refcount++; 995 996 spinlock_unlock(&zone->lock); 997 interrupts_restore(ipl); 998 } 973 999 974 1000 /** Mark given range unavailable in frame zones */
Note:
See TracChangeset
for help on using the changeset viewer.