Subversion Repositories HelenOS-historic

Rev

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

Rev 1129 Rev 1155
Line 32... Line 32...
32
#include <unistd.h>
32
#include <unistd.h>
33
#include <thread.h>
33
#include <thread.h>
34
#include <stdio.h>
34
#include <stdio.h>
35
#include <kernel/arch/faddr.h>
35
#include <kernel/arch/faddr.h>
36
 
36
 
-
 
37
 
-
 
38
#ifndef PSTHREAD_INITIAL_STACK_PAGES_NO
-
 
39
#define PSTHREAD_INITIAL_STACK_PAGES_NO 1
-
 
40
#endif
-
 
41
 
37
static LIST_INITIALIZE(ready_list);
42
static LIST_INITIALIZE(ready_list);
38
 
43
 
39
static void psthread_exit(void) __attribute__ ((noinline));
44
static void psthread_exit(void) __attribute__ ((noinline));
40
static void psthread_main(void);
45
static void psthread_main(void);
41
 
46
 
Line 163... Line 168...
163
    pt = psthread_setup(tcb);
168
    pt = psthread_setup(tcb);
164
    if (!pt) {
169
    if (!pt) {
165
        __free_tls(tcb);
170
        __free_tls(tcb);
166
        return 0;
171
        return 0;
167
    }
172
    }
168
    pt->stack = (char *) malloc(getpagesize());
173
    pt->stack = (char *) malloc(PSTHREAD_INITIAL_STACK_PAGES_NO*getpagesize());
169
 
174
 
170
    if (!pt->stack) {
175
    if (!pt->stack) {
171
        __free_tls(tcb);
176
        __free_tls(tcb);
172
        psthread_teardown(pt);
177
        psthread_teardown(pt);
173
        return 0;
178
        return 0;
Line 177... Line 182...
177
    pt->func = func;
182
    pt->func = func;
178
    pt->finished = 0;
183
    pt->finished = 0;
179
    pt->waiter = NULL;
184
    pt->waiter = NULL;
180
 
185
 
181
    context_save(&pt->ctx);
186
    context_save(&pt->ctx);
182
    context_set(&pt->ctx, FADDR(psthread_main), pt->stack, getpagesize(),
187
    context_set(&pt->ctx, FADDR(psthread_main), pt->stack, PSTHREAD_INITIAL_STACK_PAGES_NO*getpagesize(),
183
            tcb);
188
            tcb);
184
 
189
 
185
    list_append(&pt->link, &ready_list);
190
    list_append(&pt->link, &ready_list);
186
 
191
 
187
    return (pstid_t )pt;
192
    return (pstid_t )pt;