Rev 689 | Rev 703 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 689 | Rev 701 | ||
---|---|---|---|
Line 115... | Line 115... | ||
115 | 115 | ||
116 | if (!zone) { |
116 | if (!zone) { |
117 | if (flags & FRAME_PANIC) |
117 | if (flags & FRAME_PANIC) |
118 | panic("Can't allocate frame.\n"); |
118 | panic("Can't allocate frame.\n"); |
119 | 119 | ||
120 | - | ||
121 | - | ||
122 | /* |
120 | /* |
123 | * TODO: Sleep until frames are available again. |
121 | * TODO: Sleep until frames are available again. |
124 | */ |
122 | */ |
125 | spinlock_unlock(&zone_head_lock); |
123 | spinlock_unlock(&zone_head_lock); |
126 | interrupts_restore(ipl); |
124 | interrupts_restore(ipl); |
Line 153... | Line 151... | ||
153 | 151 | ||
154 | spinlock_unlock(&zone->lock); |
152 | spinlock_unlock(&zone->lock); |
155 | spinlock_unlock(&zone_head_lock); |
153 | spinlock_unlock(&zone_head_lock); |
156 | interrupts_restore(ipl); |
154 | interrupts_restore(ipl); |
157 | 155 | ||
158 | - | ||
159 | if (flags & FRAME_KA) |
156 | if (flags & FRAME_KA) |
160 | v = PA2KA(v); |
157 | v = PA2KA(v); |
161 | 158 | ||
162 | if (flags & FRAME_NON_BLOCKING) { |
159 | if (flags & FRAME_NON_BLOCKING) { |
163 | ASSERT(status != NULL); |
160 | ASSERT(status != NULL); |
Line 203... | Line 200... | ||
203 | */ |
200 | */ |
204 | if ((addr >= z->base) && (addr <= z->base + (z->free_count + z->busy_count) * FRAME_SIZE)) { |
201 | if ((addr >= z->base) && (addr <= z->base + (z->free_count + z->busy_count) * FRAME_SIZE)) { |
205 | zone = z; |
202 | zone = z; |
206 | break; |
203 | break; |
207 | } |
204 | } |
- | 205 | ||
208 | spinlock_unlock(&z->lock); |
206 | spinlock_unlock(&z->lock); |
209 | } |
207 | } |
210 | 208 | ||
211 | ASSERT(zone != NULL); |
209 | ASSERT(zone != NULL); |
212 | 210 | ||
Line 500... | Line 498... | ||
500 | * |
498 | * |
501 | */ |
499 | */ |
502 | void zone_print_list(void) { |
500 | void zone_print_list(void) { |
503 | zone_t *zone = NULL; |
501 | zone_t *zone = NULL; |
504 | link_t *cur; |
502 | link_t *cur; |
- | 503 | ipl_t ipl; |
|
- | 504 | ||
- | 505 | ipl = interrupts_disable(); |
|
505 | spinlock_lock(&zone_head_lock); |
506 | spinlock_lock(&zone_head_lock); |
506 | printf("Base address\tFree Frames\tBusy Frames\n"); |
507 | printf("Base address\tFree Frames\tBusy Frames\n"); |
507 | printf("------------\t-----------\t-----------\n"); |
508 | printf("------------\t-----------\t-----------\n"); |
508 | for (cur = zone_head.next; cur != &zone_head; cur = cur->next) { |
509 | for (cur = zone_head.next; cur != &zone_head; cur = cur->next) { |
509 | zone = list_get_instance(cur, zone_t, link); |
510 | zone = list_get_instance(cur, zone_t, link); |
510 | spinlock_lock(&zone->lock); |
511 | spinlock_lock(&zone->lock); |
511 | printf("%L\t%d\t\t%d\n",zone->base, zone->free_count, zone->busy_count); |
512 | printf("%L\t%d\t\t%d\n",zone->base, zone->free_count, zone->busy_count); |
- | 513 | spinlock_unlock(&zone->lock); |
|
512 | } |
514 | } |
513 | spinlock_unlock(&zone_head_lock); |
515 | spinlock_unlock(&zone_head_lock); |
514 | - | ||
- | 516 | interrupts_restore(ipl); |
|
515 | } |
517 | } |
516 | 518 | ||
517 | /** Prints zone details |
519 | /** Prints zone details |
518 | * |
520 | * |
519 | * @param base Zone base address |
521 | * @param base Zone base address |
520 | */ |
522 | */ |
521 | void zone_print_one(__address base) { |
523 | void zone_print_one(__address base) { |
522 | zone_t *zone = NULL, *z ; |
524 | zone_t *zone = NULL, *z ; |
523 | link_t *cur; |
525 | link_t *cur; |
524 | 526 | ipl_t ipl; |
|
525 | 527 | ||
- | 528 | ipl = interrupts_disable(); |
|
526 | spinlock_lock(&zone_head_lock); |
529 | spinlock_lock(&zone_head_lock); |
527 | 530 | ||
528 | - | ||
529 | for (cur = zone_head.next; cur != &zone_head; cur = cur->next) { |
531 | for (cur = zone_head.next; cur != &zone_head; cur = cur->next) { |
530 | z = list_get_instance(cur, zone_t, link); |
532 | z = list_get_instance(cur, zone_t, link); |
531 | if (base == z->base) { |
533 | if (base == z->base) { |
532 | zone = z; |
534 | zone = z; |
533 | break; |
535 | break; |
534 | } |
536 | } |
535 | } |
537 | } |
536 | 538 | ||
537 | - | ||
538 | if (!zone) { |
539 | if (!zone) { |
- | 540 | spinlock_unlock(&zone_head_lock); |
|
- | 541 | interrupts_restore(ipl); |
|
539 | printf("No zone with address %X\n", base); |
542 | printf("No zone with address %X\n", base); |
540 | return; |
543 | return; |
541 | } |
544 | } |
542 | 545 | ||
543 | spinlock_lock(&zone->lock); |
546 | spinlock_lock(&zone->lock); |
544 | printf("Memory zone information\n\n"); |
547 | printf("Memory zone information\n\n"); |
545 | printf("Zone base address: %P\n", zone->base); |
548 | printf("Zone base address: %P\n", zone->base); |
546 | printf("Zone size: %d frames (%d kbytes)\n", zone->free_count + zone->busy_count, ((zone->free_count + zone->busy_count) * FRAME_SIZE) >> 10); |
549 | printf("Zone size: %d frames (%dK)\n", zone->free_count + zone->busy_count, ((zone->free_count + zone->busy_count) * FRAME_SIZE) >> 10); |
547 | printf("Allocated space: %d frames (%d kbytes)\n", zone->busy_count, (zone->busy_count * FRAME_SIZE) >> 10); |
550 | printf("Allocated space: %d frames (%dK)\n", zone->busy_count, (zone->busy_count * FRAME_SIZE) >> 10); |
548 | printf("Available space: %d (%d kbytes)\n", zone->free_count, (zone->free_count * FRAME_SIZE) >> 10); |
551 | printf("Available space: %d (%dK)\n", zone->free_count, (zone->free_count * FRAME_SIZE) >> 10); |
549 | 552 | ||
550 | printf("\nBuddy allocator structures:\n\n"); |
553 | printf("\nBuddy allocator structures:\n\n"); |
551 | buddy_system_structure_print(zone->buddy_system, FRAME_SIZE); |
554 | buddy_system_structure_print(zone->buddy_system, FRAME_SIZE); |
552 | 555 | ||
553 | spinlock_unlock(&zone->lock); |
556 | spinlock_unlock(&zone->lock); |
554 | spinlock_unlock(&zone_head_lock); |
557 | spinlock_unlock(&zone_head_lock); |
555 | - | ||
- | 558 | interrupts_restore(ipl); |
|
556 | } |
559 | } |
557 | 560 |