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