Changes in kernel/generic/src/mm/frame.c [7e752b2:74c5a1ca] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/frame.c
r7e752b2 r74c5a1ca 75 75 /********************/ 76 76 77 NO_TRACEstatic inline size_t frame_index(zone_t *zone, frame_t *frame)77 static inline size_t frame_index(zone_t *zone, frame_t *frame) 78 78 { 79 79 return (size_t) (frame - zone->frames); 80 80 } 81 81 82 NO_TRACEstatic inline size_t frame_index_abs(zone_t *zone, frame_t *frame)82 static inline size_t frame_index_abs(zone_t *zone, frame_t *frame) 83 83 { 84 84 return (size_t) (frame - zone->frames) + zone->base; 85 85 } 86 86 87 NO_TRACEstatic inline bool frame_index_valid(zone_t *zone, size_t index)87 static inline bool frame_index_valid(zone_t *zone, size_t index) 88 88 { 89 89 return (index < zone->count); 90 90 } 91 91 92 NO_TRACEstatic inline size_t make_frame_index(zone_t *zone, frame_t *frame)92 static inline size_t make_frame_index(zone_t *zone, frame_t *frame) 93 93 { 94 94 return (frame - zone->frames); … … 100 100 * 101 101 */ 102 NO_TRACEstatic void frame_initialize(frame_t *frame)102 static void frame_initialize(frame_t *frame) 103 103 { 104 104 frame->refcount = 1; … … 121 121 * 122 122 */ 123 NO_TRACE static size_t zones_insert_zone(pfn_t base, size_t count, 124 zone_flags_t flags) 123 static size_t zones_insert_zone(pfn_t base, size_t count) 125 124 { 126 125 if (zones.count + 1 == ZONES_MAX) { … … 132 131 for (i = 0; i < zones.count; i++) { 133 132 /* Check for overlap */ 134 if (overlaps(zones.info[i].base, zones.info[i].count, 135 base, count)) { 136 137 /* 138 * If the overlaping zones are of the same type 139 * and the new zone is completely within the previous 140 * one, then quietly ignore the new zone. 141 * 142 */ 143 144 if ((zones.info[i].flags != flags) || 145 (!iswithin(zones.info[i].base, zones.info[i].count, 146 base, count))) { 147 printf("Zone (%p, %p) overlaps " 148 "with previous zone (%p %p)!\n", 149 (void *) PFN2ADDR(base), (void *) PFN2ADDR(count), 150 (void *) PFN2ADDR(zones.info[i].base), 151 (void *) PFN2ADDR(zones.info[i].count)); 152 } 153 133 if (overlaps(base, count, 134 zones.info[i].base, zones.info[i].count)) { 135 printf("Zones overlap!\n"); 154 136 return (size_t) -1; 155 137 } … … 162 144 for (j = zones.count; j > i; j--) { 163 145 zones.info[j] = zones.info[j - 1]; 164 if (zones.info[j].buddy_system != NULL) 165 zones.info[j].buddy_system->data = 166 (void *) &zones.info[j]; 146 zones.info[j].buddy_system->data = 147 (void *) &zones.info[j - 1]; 167 148 } 168 149 … … 181 162 */ 182 163 #ifdef CONFIG_DEBUG 183 NO_TRACEstatic size_t total_frames_free(void)164 static size_t total_frames_free(void) 184 165 { 185 166 size_t total = 0; … … 204 185 * 205 186 */ 206 NO_TRACEsize_t find_zone(pfn_t frame, size_t count, size_t hint)187 size_t find_zone(pfn_t frame, size_t count, size_t hint) 207 188 { 208 189 if (hint >= zones.count) … … 225 206 226 207 /** @return True if zone can allocate specified order */ 227 NO_TRACEstatic bool zone_can_alloc(zone_t *zone, uint8_t order)208 static bool zone_can_alloc(zone_t *zone, uint8_t order) 228 209 { 229 210 return (zone_flags_available(zone->flags) … … 241 222 * 242 223 */ 243 NO_TRACE static size_t find_free_zone(uint8_t order, zone_flags_t flags, 244 size_t hint) 224 static size_t find_free_zone(uint8_t order, zone_flags_t flags, size_t hint) 245 225 { 246 226 if (hint >= zones.count) … … 282 262 * 283 263 */ 284 NO_TRACE static link_t *zone_buddy_find_block(buddy_system_t *buddy,285 link_t *child,uint8_t order)264 static link_t *zone_buddy_find_block(buddy_system_t *buddy, link_t *child, 265 uint8_t order) 286 266 { 287 267 frame_t *frame = list_get_instance(child, frame_t, buddy_link); … … 305 285 * 306 286 */ 307 NO_TRACE static link_t *zone_buddy_find_buddy(buddy_system_t *buddy, 308 link_t *block) 287 static link_t *zone_buddy_find_buddy(buddy_system_t *buddy, link_t *block) 309 288 { 310 289 frame_t *frame = list_get_instance(block, frame_t, buddy_link); … … 342 321 * 343 322 */ 344 NO_TRACEstatic link_t *zone_buddy_bisect(buddy_system_t *buddy, link_t *block)323 static link_t *zone_buddy_bisect(buddy_system_t *buddy, link_t *block) 345 324 { 346 325 frame_t *frame_l = list_get_instance(block, frame_t, buddy_link); … … 360 339 * 361 340 */ 362 NO_TRACE static link_t *zone_buddy_coalesce(buddy_system_t *buddy,363 link_t *block_ 1, link_t *block_2)341 static link_t *zone_buddy_coalesce(buddy_system_t *buddy, link_t *block_1, 342 link_t *block_2) 364 343 { 365 344 frame_t *frame1 = list_get_instance(block_1, frame_t, buddy_link); … … 376 355 * 377 356 */ 378 NO_TRACEstatic void zone_buddy_set_order(buddy_system_t *buddy, link_t *block,357 static void zone_buddy_set_order(buddy_system_t *buddy, link_t *block, 379 358 uint8_t order) 380 359 { … … 390 369 * 391 370 */ 392 NO_TRACE static uint8_t zone_buddy_get_order(buddy_system_t *buddy, 393 link_t *block) 371 static uint8_t zone_buddy_get_order(buddy_system_t *buddy, link_t *block) 394 372 { 395 373 return list_get_instance(block, frame_t, buddy_link)->buddy_order; … … 402 380 * 403 381 */ 404 NO_TRACE static void zone_buddy_mark_busy(buddy_system_t *buddy, link_t *block)382 static void zone_buddy_mark_busy(buddy_system_t *buddy, link_t * block) 405 383 { 406 384 list_get_instance(block, frame_t, buddy_link)->refcount = 1; … … 411 389 * @param buddy Buddy system. 412 390 * @param block Buddy system block. 413 * 414 */ 415 NO_TRACE static void zone_buddy_mark_available(buddy_system_t *buddy, 416 link_t *block) 391 */ 392 static void zone_buddy_mark_available(buddy_system_t *buddy, link_t *block) 417 393 { 418 394 list_get_instance(block, frame_t, buddy_link)->refcount = 0; … … 445 421 * 446 422 */ 447 NO_TRACEstatic pfn_t zone_frame_alloc(zone_t *zone, uint8_t order)423 static pfn_t zone_frame_alloc(zone_t *zone, uint8_t order) 448 424 { 449 425 ASSERT(zone_flags_available(zone->flags)); … … 473 449 * 474 450 */ 475 NO_TRACEstatic void zone_frame_free(zone_t *zone, size_t frame_idx)451 static void zone_frame_free(zone_t *zone, size_t frame_idx) 476 452 { 477 453 ASSERT(zone_flags_available(zone->flags)); … … 494 470 495 471 /** Return frame from zone. */ 496 NO_TRACEstatic frame_t *zone_get_frame(zone_t *zone, size_t frame_idx)472 static frame_t *zone_get_frame(zone_t *zone, size_t frame_idx) 497 473 { 498 474 ASSERT(frame_idx < zone->count); … … 501 477 502 478 /** Mark frame in zone unavailable to allocation. */ 503 NO_TRACEstatic void zone_mark_unavailable(zone_t *zone, size_t frame_idx)479 static void zone_mark_unavailable(zone_t *zone, size_t frame_idx) 504 480 { 505 481 ASSERT(zone_flags_available(zone->flags)); … … 530 506 * 531 507 */ 532 NO_TRACE static void zone_merge_internal(size_t z1, size_t z2, zone_t *old_z1, 533 buddy_system_t *buddy) 508 static void zone_merge_internal(size_t z1, size_t z2, zone_t *old_z1, buddy_system_t *buddy) 534 509 { 535 510 ASSERT(zone_flags_available(zones.info[z1].flags)); … … 627 602 * 628 603 */ 629 NO_TRACEstatic void return_config_frames(size_t znum, pfn_t pfn, size_t count)604 static void return_config_frames(size_t znum, pfn_t pfn, size_t count) 630 605 { 631 606 ASSERT(zone_flags_available(zones.info[znum].flags)); … … 662 637 * 663 638 */ 664 NO_TRACE static void zone_reduce_region(size_t znum, pfn_t frame_idx, 665 size_t count) 639 static void zone_reduce_region(size_t znum, pfn_t frame_idx, size_t count) 666 640 { 667 641 ASSERT(zone_flags_available(zones.info[znum].flags)); … … 764 738 for (i = z2 + 1; i < zones.count; i++) { 765 739 zones.info[i - 1] = zones.info[i]; 766 if (zones.info[i - 1].buddy_system != NULL) 767 zones.info[i - 1].buddy_system->data = 768 (void *) &zones.info[i - 1]; 740 zones.info[i - 1].buddy_system->data = 741 (void *) &zones.info[i - 1]; 769 742 } 770 743 … … 804 777 * 805 778 */ 806 NO_TRACE static void zone_construct(zone_t *zone, buddy_system_t *buddy,807 pfn_t start,size_t count, zone_flags_t flags)779 static void zone_construct(zone_t *zone, buddy_system_t *buddy, pfn_t start, 780 size_t count, zone_flags_t flags) 808 781 { 809 782 zone->base = start; … … 848 821 * 849 822 */ 850 size_t zone_conf_size(size_t count)823 uintptr_t zone_conf_size(size_t count) 851 824 { 852 825 return (count * sizeof(frame_t) + buddy_conf_size(fnzb(count))); … … 879 852 * the assert 880 853 */ 881 ASSERT(confframe != ADDR2PFN((uintptr_t ) NULL));854 ASSERT(confframe != NULL); 882 855 883 856 /* If confframe is supposed to be inside our zone, then make sure … … 915 888 } 916 889 917 size_t znum = zones_insert_zone(start, count , flags);890 size_t znum = zones_insert_zone(start, count); 918 891 if (znum == (size_t) -1) { 919 892 irq_spinlock_unlock(&zones.lock, true); … … 938 911 939 912 /* Non-available zone */ 940 size_t znum = zones_insert_zone(start, count , flags);913 size_t znum = zones_insert_zone(start, count); 941 914 if (znum == (size_t) -1) { 942 915 irq_spinlock_unlock(&zones.lock, true); … … 1050 1023 1051 1024 #ifdef CONFIG_DEBUG 1052 printf("Thread %" PRIu64 " waiting for % zuframes, "1053 "% zuavailable.\n", THREAD->tid, size, avail);1025 printf("Thread %" PRIu64 " waiting for %" PRIs " frames, " 1026 "%" PRIs " available.\n", THREAD->tid, size, avail); 1054 1027 #endif 1055 1028 … … 1105 1078 */ 1106 1079 pfn_t pfn = ADDR2PFN(frame); 1107 size_t znum = find_zone(pfn, 1, 0);1080 size_t znum = find_zone(pfn, 1, NULL); 1108 1081 1109 1082 ASSERT(znum != (size_t) -1); … … 1135 1108 * 1136 1109 */ 1137 NO_TRACEvoid frame_reference_add(pfn_t pfn)1110 void frame_reference_add(pfn_t pfn) 1138 1111 { 1139 1112 irq_spinlock_lock(&zones.lock, true); … … 1142 1115 * First, find host frame zone for addr. 1143 1116 */ 1144 size_t znum = find_zone(pfn, 1, 0);1117 size_t znum = find_zone(pfn, 1, NULL); 1145 1118 1146 1119 ASSERT(znum != (size_t) -1); … … 1154 1127 * 1155 1128 */ 1156 NO_TRACEvoid frame_mark_unavailable(pfn_t start, size_t count)1129 void frame_mark_unavailable(pfn_t start, size_t count) 1157 1130 { 1158 1131 irq_spinlock_lock(&zones.lock, true); … … 1298 1271 bool available = zone_flags_available(flags); 1299 1272 1300 printf("%-4 zu", i);1273 printf("%-4" PRIs, i); 1301 1274 1302 1275 #ifdef __32_BITS__ 1303 printf(" % p", (void *)base);1276 printf(" %10p", base); 1304 1277 #endif 1305 1278 1306 1279 #ifdef __64_BITS__ 1307 printf(" % p", (void *)base);1280 printf(" %18p", base); 1308 1281 #endif 1309 1282 1310 printf(" %12 zu%c%c%c ", count,1283 printf(" %12" PRIs " %c%c%c ", count, 1311 1284 available ? 'A' : ' ', 1312 1285 (flags & ZONE_RESERVED) ? 'R' : ' ', … … 1314 1287 1315 1288 if (available) 1316 printf("%14 zu %14zu",1289 printf("%14" PRIs " %14" PRIs, 1317 1290 free_count, busy_count); 1318 1291 … … 1355 1328 bool available = zone_flags_available(flags); 1356 1329 1357 printf("Zone number: % zu\n", znum);1358 printf("Zone base address: %p\n", (void *)base);1359 printf("Zone size: % zu frames (%zuKiB)\n", count,1330 printf("Zone number: %" PRIs "\n", znum); 1331 printf("Zone base address: %p\n", base); 1332 printf("Zone size: %" PRIs " frames (%" PRIs " KiB)\n", count, 1360 1333 SIZE2KB(FRAMES2SIZE(count))); 1361 1334 printf("Zone flags: %c%c%c\n", … … 1365 1338 1366 1339 if (available) { 1367 printf("Allocated space: % zu frames (%zuKiB)\n",1340 printf("Allocated space: %" PRIs " frames (%" PRIs " KiB)\n", 1368 1341 busy_count, SIZE2KB(FRAMES2SIZE(busy_count))); 1369 printf("Available space: % zu frames (%zuKiB)\n",1342 printf("Available space: %" PRIs " frames (%" PRIs " KiB)\n", 1370 1343 free_count, SIZE2KB(FRAMES2SIZE(free_count))); 1371 1344 }
Note:
See TracChangeset
for help on using the changeset viewer.