Subversion Repositories HelenOS

Rev

Rev 3386 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3386 Rev 4263
Line 34... Line 34...
34
#include <arch/mm/page.h>
34
#include <arch/mm/page.h>
35
#include <arch/types.h>
35
#include <arch/types.h>
36
#include <debug.h>
36
#include <debug.h>
37
#include <align.h>
37
#include <align.h>
38
 
38
 
39
#define MAX_FRAMES 1024
39
#define MAX_FRAMES  1024
40
#define MAX_ORDER 8
40
#define MAX_ORDER   8
41
#define TEST_RUNS 2
41
#define TEST_RUNS   2
42
 
42
 
43
char * test_falloc1(bool quiet) {
43
char *test_falloc1(void) {
-
 
44
    uintptr_t *frames
44
    uintptr_t * frames = (uintptr_t *) malloc(MAX_FRAMES * sizeof(uintptr_t), 0);
45
        = (uintptr_t *) malloc(MAX_FRAMES * sizeof(uintptr_t), 0);
45
    int results[MAX_ORDER + 1];
46
    int results[MAX_ORDER + 1];
46
   
47
   
47
    int i, order, run;
48
    int i, order, run;
48
    int allocated;
49
    int allocated;
49
   
50
   
50
    if (TEST_RUNS < 2)
51
    if (TEST_RUNS < 2)
51
        return "Test is compiled with TEST_RUNS < 2";
52
        return "Test is compiled with TEST_RUNS < 2";
52
   
53
   
53
    if (frames == NULL)
54
    if (frames == NULL)
54
        return "Unable to allocate frames";
55
        return "Unable to allocate frames";
55
 
56
   
56
    for (run = 0; run < TEST_RUNS; run++) {
57
    for (run = 0; run < TEST_RUNS; run++) {
57
        for (order = 0; order <= MAX_ORDER; order++) {
58
        for (order = 0; order <= MAX_ORDER; order++) {
58
            if (!quiet)
-
 
59
                printf("Allocating %d frames blocks ... ", 1 << order);
59
            TPRINTF("Allocating %d frames blocks ... ", 1 << order);
60
           
60
           
61
            allocated = 0;
61
            allocated = 0;
62
            for (i = 0; i < MAX_FRAMES >> order; i++) {
62
            for (i = 0; i < MAX_FRAMES >> order; i++) {
63
                frames[allocated] = (uintptr_t) frame_alloc(order, FRAME_ATOMIC | FRAME_KA);
63
                frames[allocated] = (uintptr_t) frame_alloc(order, FRAME_ATOMIC | FRAME_KA);
64
               
64
               
65
                if (ALIGN_UP(frames[allocated], FRAME_SIZE << order) != frames[allocated]) {
65
                if (ALIGN_UP(frames[allocated], FRAME_SIZE << order) != frames[allocated]) {
66
                    if (!quiet)
-
 
67
                        printf("Block at address %p (size %dK) is not aligned\n", frames[allocated], (FRAME_SIZE << order) >> 10);
66
                    TPRINTF("Block at address %p (size %dK) is not aligned\n", frames[allocated], (FRAME_SIZE << order) >> 10);
68
                    return "Test failed";
67
                    return "Test failed";
69
                }
68
                }
70
               
69
               
71
                if (frames[allocated])
70
                if (frames[allocated])
72
                    allocated++;
71
                    allocated++;
73
                else {
72
                else {
74
                    if (!quiet)
-
 
75
                        printf("done. ");
73
                    TPRINTF("done. ");
76
                    break;
74
                    break;
77
                }
75
                }
78
            }
76
            }
79
           
77
           
80
            if (!quiet)
-
 
81
                printf("%d blocks allocated.\n", allocated);
78
            TPRINTF("%d blocks allocated.\n", allocated);
82
       
79
           
83
            if (run) {
80
            if (run) {
84
                if (results[order] != allocated)
81
                if (results[order] != allocated)
85
                    return "Possible frame leak";
82
                    return "Possible frame leak";
86
            } else
83
            } else
87
                results[order] = allocated;
84
                results[order] = allocated;
88
           
85
           
89
            if (!quiet)
-
 
90
                printf("Deallocating ... ");
86
            TPRINTF("Deallocating ... ");
91
           
87
           
92
            for (i = 0; i < allocated; i++)
88
            for (i = 0; i < allocated; i++)
93
                frame_free(KA2PA(frames[i]));
89
                frame_free(KA2PA(frames[i]));
94
           
90
           
95
            if (!quiet)
-
 
96
                printf("done.\n");
91
            TPRINTF("done.\n");
97
        }
92
        }
98
    }
93
    }
99
 
94
   
100
    free(frames);
95
    free(frames);
101
   
96
   
102
    return NULL;
97
    return NULL;
103
}
98
}