Subversion Repositories HelenOS

Rev

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

Rev 1833 Rev 1894
Line 92... Line 92...
92
/** Initial user-space tasks */
92
/** Initial user-space tasks */
93
init_t init = {
93
init_t init = {
94
    0
94
    0
95
};
95
};
96
 
96
 
-
 
97
/** Boot allocations. */
-
 
98
ballocs_t ballocs = {
-
 
99
    .base = NULL,
-
 
100
    .size = 0
-
 
101
};
-
 
102
 
97
context_t ctx;
103
context_t ctx;
98
 
104
 
99
/*
105
/*
100
 * These 'hardcoded' variables will be intialized by
106
 * These 'hardcoded' variables will be intialized by
101
 * the linker or the low level assembler code with
107
 * the linker or the low level assembler code with
Line 103... Line 109...
103
 */
109
 */
104
uintptr_t hardcoded_load_address = 0;   /**< Virtual address of where the kernel is loaded. */
110
uintptr_t hardcoded_load_address = 0;   /**< Virtual address of where the kernel is loaded. */
105
size_t hardcoded_ktext_size = 0;    /**< Size of the kernel code in bytes. */
111
size_t hardcoded_ktext_size = 0;    /**< Size of the kernel code in bytes. */
106
size_t hardcoded_kdata_size = 0;    /**< Size of the kernel data in bytes. */
112
size_t hardcoded_kdata_size = 0;    /**< Size of the kernel data in bytes. */
107
 
113
 
108
uintptr_t stack_safe = 0;   /**< Lowest safe stack virtual address */
114
uintptr_t stack_safe = 0;       /**< Lowest safe stack virtual address */
109
 
115
 
110
void main_bsp(void);
116
void main_bsp(void);
111
void main_ap(void);
117
void main_ap(void);
112
 
118
 
113
/*
119
/*
Line 150... Line 156...
150
    count_t i;
156
    count_t i;
151
    for (i = 0; i < init.cnt; i++) {
157
    for (i = 0; i < init.cnt; i++) {
152
        if (PA_overlaps(config.stack_base, config.stack_size, init.tasks[i].addr, init.tasks[i].size))
158
        if (PA_overlaps(config.stack_base, config.stack_size, init.tasks[i].addr, init.tasks[i].size))
153
            config.stack_base = ALIGN_UP(init.tasks[i].addr + init.tasks[i].size, config.stack_size);
159
            config.stack_base = ALIGN_UP(init.tasks[i].addr + init.tasks[i].size, config.stack_size);
154
    }
160
    }
-
 
161
 
-
 
162
    /* Avoid placing stack on top of boot allocations. */
-
 
163
    if (ballocs.size) {
-
 
164
        if (PA_overlaps(config.stack_base, config.stack_size, ballocs.base, ballocs.size))
-
 
165
            config.stack_base = ALIGN_UP(ballocs.base + ballocs.size, PAGE_SIZE);
-
 
166
    }
155
   
167
   
156
    if (config.stack_base < stack_safe)
168
    if (config.stack_base < stack_safe)
157
        config.stack_base = ALIGN_UP(stack_safe, PAGE_SIZE);
169
        config.stack_base = ALIGN_UP(stack_safe, PAGE_SIZE);
158
   
170
   
159
    context_save(&ctx);
171
    context_save(&ctx);