Changes in kernel/generic/src/mm/frame.c [7e752b2:98000fb] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/frame.c
r7e752b2 r98000fb 43 43 */ 44 44 45 #include < typedefs.h>45 #include <arch/types.h> 46 46 #include <mm/frame.h> 47 47 #include <mm/as.h> … … 66 66 * available. 67 67 */ 68 staticmutex_t mem_avail_mtx;69 staticcondvar_t mem_avail_cv;70 s tatic size_t mem_avail_req = 0; /**< Number of frames requested. */71 s tatic size_t mem_avail_gen = 0; /**< Generation counter. */68 mutex_t mem_avail_mtx; 69 condvar_t mem_avail_cv; 70 size_t mem_avail_req = 0; /**< Number of frames requested. */ 71 size_t mem_avail_gen = 0; /**< Generation counter. */ 72 72 73 73 /********************/ … … 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; … … 190 171 return total; 191 172 } 192 #endif /* CONFIG_DEBUG */173 #endif 193 174 194 175 /** Find a zone with a given frames. … … 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) … … 218 199 if (i >= zones.count) 219 200 i = 0; 220 221 201 } while (i != hint); 222 202 … … 225 205 226 206 /** @return True if zone can allocate specified order */ 227 NO_TRACEstatic bool zone_can_alloc(zone_t *zone, uint8_t order)207 static bool zone_can_alloc(zone_t *zone, uint8_t order) 228 208 { 229 209 return (zone_flags_available(zone->flags) … … 241 221 * 242 222 */ 243 NO_TRACE static size_t find_free_zone(uint8_t order, zone_flags_t flags, 244 size_t hint) 223 static size_t find_free_zone(uint8_t order, zone_flags_t flags, size_t hint) 245 224 { 246 225 if (hint >= zones.count) … … 263 242 if (i >= zones.count) 264 243 i = 0; 265 266 244 } while (i != hint); 267 245 … … 282 260 * 283 261 */ 284 NO_TRACE static link_t *zone_buddy_find_block(buddy_system_t *buddy,285 link_t *child,uint8_t order)262 static link_t *zone_buddy_find_block(buddy_system_t *buddy, link_t *child, 263 uint8_t order) 286 264 { 287 265 frame_t *frame = list_get_instance(child, frame_t, buddy_link); … … 305 283 * 306 284 */ 307 NO_TRACE static link_t *zone_buddy_find_buddy(buddy_system_t *buddy, 308 link_t *block) 285 static link_t *zone_buddy_find_buddy(buddy_system_t *buddy, link_t *block) 309 286 { 310 287 frame_t *frame = list_get_instance(block, frame_t, buddy_link); … … 319 296 index = (frame_index(zone, frame)) + 320 297 (1 << frame->buddy_order); 321 } else { 298 } else { /* is_right */ 322 299 index = (frame_index(zone, frame)) - 323 300 (1 << frame->buddy_order); … … 342 319 * 343 320 */ 344 NO_TRACEstatic link_t *zone_buddy_bisect(buddy_system_t *buddy, link_t *block)321 static link_t *zone_buddy_bisect(buddy_system_t *buddy, link_t *block) 345 322 { 346 323 frame_t *frame_l = list_get_instance(block, frame_t, buddy_link); … … 360 337 * 361 338 */ 362 NO_TRACE static link_t *zone_buddy_coalesce(buddy_system_t *buddy,363 link_t *block_ 1, link_t *block_2)339 static link_t *zone_buddy_coalesce(buddy_system_t *buddy, link_t *block_1, 340 link_t *block_2) 364 341 { 365 342 frame_t *frame1 = list_get_instance(block_1, frame_t, buddy_link); … … 376 353 * 377 354 */ 378 NO_TRACEstatic void zone_buddy_set_order(buddy_system_t *buddy, link_t *block,355 static void zone_buddy_set_order(buddy_system_t *buddy, link_t *block, 379 356 uint8_t order) 380 357 { … … 390 367 * 391 368 */ 392 NO_TRACE static uint8_t zone_buddy_get_order(buddy_system_t *buddy, 393 link_t *block) 369 static uint8_t zone_buddy_get_order(buddy_system_t *buddy, link_t *block) 394 370 { 395 371 return list_get_instance(block, frame_t, buddy_link)->buddy_order; … … 402 378 * 403 379 */ 404 NO_TRACE static void zone_buddy_mark_busy(buddy_system_t *buddy, link_t *block)380 static void zone_buddy_mark_busy(buddy_system_t *buddy, link_t * block) 405 381 { 406 382 list_get_instance(block, frame_t, buddy_link)->refcount = 1; … … 411 387 * @param buddy Buddy system. 412 388 * @param block Buddy system block. 413 * 414 */ 415 NO_TRACE static void zone_buddy_mark_available(buddy_system_t *buddy, 416 link_t *block) 389 */ 390 static void zone_buddy_mark_available(buddy_system_t *buddy, link_t *block) 417 391 { 418 392 list_get_instance(block, frame_t, buddy_link)->refcount = 0; … … 445 419 * 446 420 */ 447 NO_TRACEstatic pfn_t zone_frame_alloc(zone_t *zone, uint8_t order)421 static pfn_t zone_frame_alloc(zone_t *zone, uint8_t order) 448 422 { 449 423 ASSERT(zone_flags_available(zone->flags)); … … 473 447 * 474 448 */ 475 NO_TRACEstatic void zone_frame_free(zone_t *zone, size_t frame_idx)449 static void zone_frame_free(zone_t *zone, size_t frame_idx) 476 450 { 477 451 ASSERT(zone_flags_available(zone->flags)); … … 494 468 495 469 /** Return frame from zone. */ 496 NO_TRACEstatic frame_t *zone_get_frame(zone_t *zone, size_t frame_idx)470 static frame_t *zone_get_frame(zone_t *zone, size_t frame_idx) 497 471 { 498 472 ASSERT(frame_idx < zone->count); … … 501 475 502 476 /** Mark frame in zone unavailable to allocation. */ 503 NO_TRACEstatic void zone_mark_unavailable(zone_t *zone, size_t frame_idx)477 static void zone_mark_unavailable(zone_t *zone, size_t frame_idx) 504 478 { 505 479 ASSERT(zone_flags_available(zone->flags)); … … 530 504 * 531 505 */ 532 NO_TRACE static void zone_merge_internal(size_t z1, size_t z2, zone_t *old_z1, 533 buddy_system_t *buddy) 506 static void zone_merge_internal(size_t z1, size_t z2, zone_t *old_z1, buddy_system_t *buddy) 534 507 { 535 508 ASSERT(zone_flags_available(zones.info[z1].flags)); … … 627 600 * 628 601 */ 629 NO_TRACEstatic void return_config_frames(size_t znum, pfn_t pfn, size_t count)602 static void return_config_frames(size_t znum, pfn_t pfn, size_t count) 630 603 { 631 604 ASSERT(zone_flags_available(zones.info[znum].flags)); … … 662 635 * 663 636 */ 664 NO_TRACE static void zone_reduce_region(size_t znum, pfn_t frame_idx, 665 size_t count) 637 static void zone_reduce_region(size_t znum, pfn_t frame_idx, size_t count) 666 638 { 667 639 ASSERT(zone_flags_available(zones.info[znum].flags)); … … 701 673 bool zone_merge(size_t z1, size_t z2) 702 674 { 703 irq_spinlock_lock(&zones.lock, true); 675 ipl_t ipl = interrupts_disable(); 676 spinlock_lock(&zones.lock); 704 677 705 678 bool ret = true; … … 764 737 for (i = z2 + 1; i < zones.count; i++) { 765 738 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]; 739 zones.info[i - 1].buddy_system->data = 740 (void *) &zones.info[i - 1]; 769 741 } 770 742 … … 772 744 773 745 errout: 774 irq_spinlock_unlock(&zones.lock, true); 746 spinlock_unlock(&zones.lock); 747 interrupts_restore(ipl); 775 748 776 749 return ret; … … 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, size_t count, zone_flags_t flags) 808 780 { 809 781 zone->base = start; … … 848 820 * 849 821 */ 850 size_t zone_conf_size(size_t count)822 uintptr_t zone_conf_size(size_t count) 851 823 { 852 824 return (count * sizeof(frame_t) + buddy_conf_size(fnzb(count))); … … 869 841 * 870 842 */ 871 size_t zone_create(pfn_t start, size_t count, pfn_t confframe, 872 zone_flags_t flags) 873 { 874 irq_spinlock_lock(&zones.lock, true);843 size_t zone_create(pfn_t start, size_t count, pfn_t confframe, zone_flags_t flags) 844 { 845 ipl_t ipl = interrupts_disable(); 846 spinlock_lock(&zones.lock); 875 847 876 848 if (zone_flags_available(flags)) { /* Create available zone */ … … 879 851 * the assert 880 852 */ 881 ASSERT(confframe != ADDR2PFN((uintptr_t ) NULL));853 ASSERT(confframe != NULL); 882 854 883 855 /* If confframe is supposed to be inside our zone, then make sure … … 915 887 } 916 888 917 size_t znum = zones_insert_zone(start, count , flags);889 size_t znum = zones_insert_zone(start, count); 918 890 if (znum == (size_t) -1) { 919 irq_spinlock_unlock(&zones.lock, true); 891 spinlock_unlock(&zones.lock); 892 interrupts_restore(ipl); 920 893 return (size_t) -1; 921 894 } … … 932 905 } 933 906 934 irq_spinlock_unlock(&zones.lock, true); 907 spinlock_unlock(&zones.lock); 908 interrupts_restore(ipl); 935 909 936 910 return znum; … … 938 912 939 913 /* Non-available zone */ 940 size_t znum = zones_insert_zone(start, count , flags);914 size_t znum = zones_insert_zone(start, count); 941 915 if (znum == (size_t) -1) { 942 irq_spinlock_unlock(&zones.lock, true); 916 spinlock_unlock(&zones.lock); 917 interrupts_restore(ipl); 943 918 return (size_t) -1; 944 919 } 945 920 zone_construct(&zones.info[znum], NULL, start, count, flags); 946 921 947 irq_spinlock_unlock(&zones.lock, true); 922 spinlock_unlock(&zones.lock); 923 interrupts_restore(ipl); 948 924 949 925 return znum; … … 957 933 void frame_set_parent(pfn_t pfn, void *data, size_t hint) 958 934 { 959 irq_spinlock_lock(&zones.lock, true); 935 ipl_t ipl = interrupts_disable(); 936 spinlock_lock(&zones.lock); 960 937 961 938 size_t znum = find_zone(pfn, 1, hint); … … 966 943 pfn - zones.info[znum].base)->parent = data; 967 944 968 irq_spinlock_unlock(&zones.lock, true); 945 spinlock_unlock(&zones.lock); 946 interrupts_restore(ipl); 969 947 } 970 948 971 949 void *frame_get_parent(pfn_t pfn, size_t hint) 972 950 { 973 irq_spinlock_lock(&zones.lock, true); 951 ipl_t ipl = interrupts_disable(); 952 spinlock_lock(&zones.lock); 974 953 975 954 size_t znum = find_zone(pfn, 1, hint); … … 980 959 pfn - zones.info[znum].base)->parent; 981 960 982 irq_spinlock_unlock(&zones.lock, true); 961 spinlock_unlock(&zones.lock); 962 interrupts_restore(ipl); 983 963 984 964 return res; … … 997 977 { 998 978 size_t size = ((size_t) 1) << order; 979 ipl_t ipl; 999 980 size_t hint = pzone ? (*pzone) : 0; 1000 981 1001 982 loop: 1002 irq_spinlock_lock(&zones.lock, true); 983 ipl = interrupts_disable(); 984 spinlock_lock(&zones.lock); 1003 985 1004 986 /* … … 1011 993 if it does not help, reclaim all */ 1012 994 if ((znum == (size_t) -1) && (!(flags & FRAME_NO_RECLAIM))) { 1013 irq_spinlock_unlock(&zones.lock, true); 995 spinlock_unlock(&zones.lock); 996 interrupts_restore(ipl); 997 1014 998 size_t freed = slab_reclaim(0); 1015 irq_spinlock_lock(&zones.lock, true); 999 1000 ipl = interrupts_disable(); 1001 spinlock_lock(&zones.lock); 1016 1002 1017 1003 if (freed > 0) … … 1020 1006 1021 1007 if (znum == (size_t) -1) { 1022 irq_spinlock_unlock(&zones.lock, true); 1008 spinlock_unlock(&zones.lock); 1009 interrupts_restore(ipl); 1010 1023 1011 freed = slab_reclaim(SLAB_RECLAIM_ALL); 1024 irq_spinlock_lock(&zones.lock, true); 1012 1013 ipl = interrupts_disable(); 1014 spinlock_lock(&zones.lock); 1025 1015 1026 1016 if (freed > 0) … … 1032 1022 if (znum == (size_t) -1) { 1033 1023 if (flags & FRAME_ATOMIC) { 1034 irq_spinlock_unlock(&zones.lock, true); 1024 spinlock_unlock(&zones.lock); 1025 interrupts_restore(ipl); 1035 1026 return NULL; 1036 1027 } … … 1040 1031 #endif 1041 1032 1042 irq_spinlock_unlock(&zones.lock, true); 1043 1044 if (!THREAD) 1045 panic("Cannot wait for memory to become available."); 1033 spinlock_unlock(&zones.lock); 1034 interrupts_restore(ipl); 1046 1035 1047 1036 /* … … 1050 1039 1051 1040 #ifdef CONFIG_DEBUG 1052 printf("Thread %" PRIu64 " waiting for % zuframes, "1053 "% zuavailable.\n", THREAD->tid, size, avail);1041 printf("Thread %" PRIu64 " waiting for %" PRIs " frames, " 1042 "%" PRIs " available.\n", THREAD->tid, size, avail); 1054 1043 #endif 1055 1044 … … 1077 1066 + zones.info[znum].base; 1078 1067 1079 irq_spinlock_unlock(&zones.lock, true); 1068 spinlock_unlock(&zones.lock); 1069 interrupts_restore(ipl); 1080 1070 1081 1071 if (pzone) … … 1099 1089 void frame_free(uintptr_t frame) 1100 1090 { 1101 irq_spinlock_lock(&zones.lock, true); 1091 ipl_t ipl = interrupts_disable(); 1092 spinlock_lock(&zones.lock); 1102 1093 1103 1094 /* … … 1105 1096 */ 1106 1097 pfn_t pfn = ADDR2PFN(frame); 1107 size_t znum = find_zone(pfn, 1, 0);1098 size_t znum = find_zone(pfn, 1, NULL); 1108 1099 1109 1100 ASSERT(znum != (size_t) -1); … … 1111 1102 zone_frame_free(&zones.info[znum], pfn - zones.info[znum].base); 1112 1103 1113 irq_spinlock_unlock(&zones.lock, true); 1104 spinlock_unlock(&zones.lock); 1105 interrupts_restore(ipl); 1114 1106 1115 1107 /* … … 1135 1127 * 1136 1128 */ 1137 NO_TRACE void frame_reference_add(pfn_t pfn) 1138 { 1139 irq_spinlock_lock(&zones.lock, true); 1129 void frame_reference_add(pfn_t pfn) 1130 { 1131 ipl_t ipl = interrupts_disable(); 1132 spinlock_lock(&zones.lock); 1140 1133 1141 1134 /* 1142 1135 * First, find host frame zone for addr. 1143 1136 */ 1144 size_t znum = find_zone(pfn, 1, 0);1137 size_t znum = find_zone(pfn, 1, NULL); 1145 1138 1146 1139 ASSERT(znum != (size_t) -1); … … 1148 1141 zones.info[znum].frames[pfn - zones.info[znum].base].refcount++; 1149 1142 1150 irq_spinlock_unlock(&zones.lock, true);1151 } 1152 1153 /** Mark given range unavailable in frame zones. 1154 * 1155 */ 1156 NO_TRACE void frame_mark_unavailable(pfn_t start, size_t count) 1157 { 1158 irq_spinlock_lock(&zones.lock, true);1143 spinlock_unlock(&zones.lock); 1144 interrupts_restore(ipl); 1145 } 1146 1147 /** Mark given range unavailable in frame zones. */ 1148 void frame_mark_unavailable(pfn_t start, size_t count) 1149 { 1150 ipl_t ipl = interrupts_disable(); 1151 spinlock_lock(&zones.lock); 1159 1152 1160 1153 size_t i; … … 1168 1161 } 1169 1162 1170 irq_spinlock_unlock(&zones.lock, true); 1171 } 1172 1173 /** Initialize physical memory management. 1174 * 1175 */ 1163 spinlock_unlock(&zones.lock); 1164 interrupts_restore(ipl); 1165 } 1166 1167 /** Initialize physical memory management. */ 1176 1168 void frame_init(void) 1177 1169 { 1178 1170 if (config.cpu_active == 1) { 1179 1171 zones.count = 0; 1180 irq_spinlock_initialize(&zones.lock, "frame.zones.lock");1172 spinlock_initialize(&zones.lock, "zones.lock"); 1181 1173 mutex_initialize(&mem_avail_mtx, MUTEX_ACTIVE); 1182 1174 condvar_initialize(&mem_avail_cv); … … 1209 1201 } 1210 1202 1211 /** Return total size of all zones. 1212 * 1213 */ 1214 uint64_t zones_total_size(void) 1215 { 1216 irq_spinlock_lock(&zones.lock, true); 1203 /** Return total size of all zones. */ 1204 uint64_t zone_total_size(void) 1205 { 1206 ipl_t ipl = interrupts_disable(); 1207 spinlock_lock(&zones.lock); 1217 1208 1218 1209 uint64_t total = 0; … … 1221 1212 total += (uint64_t) FRAMES2SIZE(zones.info[i].count); 1222 1213 1223 irq_spinlock_unlock(&zones.lock, true); 1214 spinlock_unlock(&zones.lock); 1215 interrupts_restore(ipl); 1224 1216 1225 1217 return total; 1226 1218 } 1227 1219 1228 void zones_stats(uint64_t *total, uint64_t *unavail, uint64_t *busy, 1229 uint64_t *free) 1230 { 1231 ASSERT(total != NULL); 1232 ASSERT(unavail != NULL); 1233 ASSERT(busy != NULL); 1234 ASSERT(free != NULL); 1235 1236 irq_spinlock_lock(&zones.lock, true); 1237 1238 *total = 0; 1239 *unavail = 0; 1240 *busy = 0; 1241 *free = 0; 1242 1243 size_t i; 1244 for (i = 0; i < zones.count; i++) { 1245 *total += (uint64_t) FRAMES2SIZE(zones.info[i].count); 1246 1247 if (zone_flags_available(zones.info[i].flags)) { 1248 *busy += (uint64_t) FRAMES2SIZE(zones.info[i].busy_count); 1249 *free += (uint64_t) FRAMES2SIZE(zones.info[i].free_count); 1250 } else 1251 *unavail += (uint64_t) FRAMES2SIZE(zones.info[i].count); 1252 } 1253 1254 irq_spinlock_unlock(&zones.lock, true); 1255 } 1256 1257 /** Prints list of zones. 1258 * 1259 */ 1260 void zones_print_list(void) 1220 /** Prints list of zones. */ 1221 void zone_print_list(void) 1261 1222 { 1262 1223 #ifdef __32_BITS__ 1263 printf("[nr] [base addr] [frames ] [flags ] [free frames ] [busy frames ]\n"); 1224 printf("# base address frames flags free frames busy frames\n"); 1225 printf("-- ------------ ------------ -------- ------------ ------------\n"); 1264 1226 #endif 1265 1227 1266 1228 #ifdef __64_BITS__ 1267 printf("[nr] [base address ] [frames ] [flags ] [free frames ] [busy frames ]\n"); 1229 printf("# base address frames flags free frames busy frames\n"); 1230 printf("-- -------------------- ------------ -------- ------------ ------------\n"); 1268 1231 #endif 1269 1232 … … 1281 1244 size_t i; 1282 1245 for (i = 0;; i++) { 1283 irq_spinlock_lock(&zones.lock, true); 1246 ipl_t ipl = interrupts_disable(); 1247 spinlock_lock(&zones.lock); 1284 1248 1285 1249 if (i >= zones.count) { 1286 irq_spinlock_unlock(&zones.lock, true); 1250 spinlock_unlock(&zones.lock); 1251 interrupts_restore(ipl); 1287 1252 break; 1288 1253 } … … 1294 1259 size_t busy_count = zones.info[i].busy_count; 1295 1260 1296 irq_spinlock_unlock(&zones.lock, true); 1261 spinlock_unlock(&zones.lock); 1262 interrupts_restore(ipl); 1297 1263 1298 1264 bool available = zone_flags_available(flags); 1299 1265 1300 printf("%- 4zu", i);1266 printf("%-2" PRIs, i); 1301 1267 1302 1268 #ifdef __32_BITS__ 1303 printf(" %p", (void *)base);1269 printf(" %10p", base); 1304 1270 #endif 1305 1271 1306 1272 #ifdef __64_BITS__ 1307 printf(" %p", (void *)base);1273 printf(" %18p", base); 1308 1274 #endif 1309 1275 1310 printf(" %12 zu%c%c%c ", count,1276 printf(" %12" PRIs " %c%c%c ", count, 1311 1277 available ? 'A' : ' ', 1312 1278 (flags & ZONE_RESERVED) ? 'R' : ' ', … … 1314 1280 1315 1281 if (available) 1316 printf("%1 4zu %14zu",1282 printf("%12" PRIs " %12" PRIs, 1317 1283 free_count, busy_count); 1318 1284 … … 1328 1294 void zone_print_one(size_t num) 1329 1295 { 1330 irq_spinlock_lock(&zones.lock, true); 1296 ipl_t ipl = interrupts_disable(); 1297 spinlock_lock(&zones.lock); 1331 1298 size_t znum = (size_t) -1; 1332 1299 … … 1340 1307 1341 1308 if (znum == (size_t) -1) { 1342 irq_spinlock_unlock(&zones.lock, true); 1309 spinlock_unlock(&zones.lock); 1310 interrupts_restore(ipl); 1343 1311 printf("Zone not found.\n"); 1344 1312 return; … … 1351 1319 size_t busy_count = zones.info[i].busy_count; 1352 1320 1353 irq_spinlock_unlock(&zones.lock, true); 1321 spinlock_unlock(&zones.lock); 1322 interrupts_restore(ipl); 1354 1323 1355 1324 bool available = zone_flags_available(flags); 1356 1325 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,1326 printf("Zone number: %" PRIs "\n", znum); 1327 printf("Zone base address: %p\n", base); 1328 printf("Zone size: %" PRIs " frames (%" PRIs " KiB)\n", count, 1360 1329 SIZE2KB(FRAMES2SIZE(count))); 1361 1330 printf("Zone flags: %c%c%c\n", … … 1365 1334 1366 1335 if (available) { 1367 printf("Allocated space: % zu frames (%zuKiB)\n",1336 printf("Allocated space: %" PRIs " frames (%" PRIs " KiB)\n", 1368 1337 busy_count, SIZE2KB(FRAMES2SIZE(busy_count))); 1369 printf("Available space: % zu frames (%zuKiB)\n",1338 printf("Available space: %" PRIs " frames (%" PRIs " KiB)\n", 1370 1339 free_count, SIZE2KB(FRAMES2SIZE(free_count))); 1371 1340 }
Note:
See TracChangeset
for help on using the changeset viewer.