Rev 735 | Rev 759 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 735 | Rev 745 | ||
|---|---|---|---|
| Line 31... | Line 31... | ||
| 31 | #include <mm/frame.h> |
31 | #include <mm/frame.h> |
| 32 | #include <mm/heap.h> |
32 | #include <mm/heap.h> |
| 33 | #include <arch/mm/page.h> |
33 | #include <arch/mm/page.h> |
| 34 | #include <arch/types.h> |
34 | #include <arch/types.h> |
| 35 | #include <debug.h> |
35 | #include <debug.h> |
| - | 36 | #include <align.h> |
|
| 36 | 37 | ||
| 37 | #define MAX_FRAMES 1024 |
38 | #define MAX_FRAMES 1024 |
| 38 | #define MAX_ORDER 8 |
39 | #define MAX_ORDER 8 |
| 39 | #define TEST_RUNS 2 |
40 | #define TEST_RUNS 2 |
| 40 | 41 | ||
| Line 45... | Line 46... | ||
| 45 | int i, order, run; |
46 | int i, order, run; |
| 46 | int allocated; |
47 | int allocated; |
| 47 | int status; |
48 | int status; |
| 48 | 49 | ||
| 49 | ASSERT(TEST_RUNS > 1); |
50 | ASSERT(TEST_RUNS > 1); |
| - | 51 | ASSERT(frames != NULL) |
|
| 50 | 52 | ||
| 51 | for (run=0;run<=TEST_RUNS;run++) { |
53 | for (run = 0; run < TEST_RUNS; run++) { |
| 52 | for (order=0;order<=MAX_ORDER;order++) { |
54 | for (order = 0; order <= MAX_ORDER; order++) { |
| 53 | printf("Allocating %d frames blocks ... ", 1<<order); |
55 | printf("Allocating %d frames blocks ... ", 1 << order); |
| 54 | allocated = 0; |
56 | allocated = 0; |
| 55 | for (i=0;i<MAX_FRAMES>>order;i++) { |
57 | for (i = 0; i < MAX_FRAMES >> order; i++) { |
| 56 | frames[allocated] = frame_alloc(FRAME_NON_BLOCKING | FRAME_KA, order, &status); |
58 | frames[allocated] = frame_alloc(FRAME_NON_BLOCKING | FRAME_KA, order, &status); |
| 57 | 59 | ||
| 58 | if (frames[allocated] % (FRAME_SIZE << order) != 0) { |
60 | if (ALIGN_UP(frames[allocated], FRAME_SIZE << order) != frames[allocated]) { |
| 59 | panic("Test failed. Block at address %X (size %dK) is not aligned\n", frames[allocated], (FRAME_SIZE << order) >> 10); |
61 | panic("Test failed. Block at address %X (size %dK) is not aligned\n", frames[allocated], (FRAME_SIZE << order) >> 10); |
| 60 | } |
62 | } |
| 61 | 63 | ||
| 62 | if (status == 0) { |
64 | if (status == 0) { |
| 63 | allocated++; |
65 | allocated++; |
| Line 65... | Line 67... | ||
| 65 | printf("done. "); |
67 | printf("done. "); |
| 66 | break; |
68 | break; |
| 67 | } |
69 | } |
| 68 | } |
70 | } |
| 69 | 71 | ||
| 70 | printf("%d blocks alocated.\n", allocated); |
72 | printf("%d blocks allocated.\n", allocated); |
| 71 | 73 | ||
| 72 | if (run) { |
74 | if (run) { |
| 73 | if (results[order] != allocated) { |
75 | if (results[order] != allocated) { |
| 74 | panic("Test failed. Frame leak possible.\n"); |
76 | panic("Test failed. Frame leak possible.\n"); |
| 75 | } |
77 | } |
| - | 78 | } else |
|
| 76 | } else results[order] = allocated; |
79 | results[order] = allocated; |
| 77 | 80 | ||
| 78 | printf("Deallocating ... "); |
81 | printf("Deallocating ... "); |
| 79 | for (i=0;i<allocated;i++) { |
82 | for (i = 0; i < allocated; i++) { |
| 80 | frame_free(frames[i]); |
83 | frame_free(frames[i]); |
| 81 | } |
84 | } |
| 82 | printf("done.\n"); |
85 | printf("done.\n"); |
| 83 | } |
86 | } |
| 84 | } |
87 | } |
| 85 | 88 | ||
| 86 | free(frames); |
89 | free(frames); |
| 87 | 90 | ||
| 88 | printf("Test passed\n"); |
91 | printf("Test passed.\n"); |
| 89 | } |
92 | } |
| 90 | 93 | ||