Subversion Repositories HelenOS

Rev

Rev 1757 | Rev 1766 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1757 Rev 1760
Line 122... Line 122...
122
 
122
 
123
/** Initialization and allocation for thread_t structure */
123
/** Initialization and allocation for thread_t structure */
124
static int thr_constructor(void *obj, int kmflags)
124
static int thr_constructor(void *obj, int kmflags)
125
{
125
{
126
    thread_t *t = (thread_t *)obj;
126
    thread_t *t = (thread_t *)obj;
127
    pfn_t pfn;
-
 
128
    int status;
127
    int status;
129
 
128
 
130
    spinlock_initialize(&t->lock, "thread_t_lock");
129
    spinlock_initialize(&t->lock, "thread_t_lock");
131
    link_initialize(&t->rq_link);
130
    link_initialize(&t->rq_link);
132
    link_initialize(&t->wq_link);
131
    link_initialize(&t->wq_link);
Line 140... Line 139...
140
    if (!t->saved_fpu_context)
139
    if (!t->saved_fpu_context)
141
        return -1;
140
        return -1;
142
#  endif
141
#  endif
143
#endif  
142
#endif  
144
 
143
 
145
    pfn = frame_alloc_rc(STACK_FRAMES, FRAME_KA | kmflags,&status);
144
    t->kstack = frame_alloc_rc(STACK_FRAMES, FRAME_KA | kmflags,&status);
146
    if (status) {
145
    if (status) {
147
#ifdef ARCH_HAS_FPU
146
#ifdef ARCH_HAS_FPU
148
        if (t->saved_fpu_context)
147
        if (t->saved_fpu_context)
149
            slab_free(fpu_context_slab,t->saved_fpu_context);
148
            slab_free(fpu_context_slab,t->saved_fpu_context);
150
#endif
149
#endif
151
        return -1;
150
        return -1;
152
    }
151
    }
153
    t->kstack = (__u8 *)PA2KA(PFN2ADDR(pfn));
-
 
154
 
152
 
155
    return 0;
153
    return 0;
156
}
154
}
157
 
155
 
158
/** Destruction of thread_t object */
156
/** Destruction of thread_t object */
159
static int thr_destructor(void *obj)
157
static int thr_destructor(void *obj)
160
{
158
{
161
    thread_t *t = (thread_t *)obj;
159
    thread_t *t = (thread_t *)obj;
162
 
160
 
163
    frame_free(ADDR2PFN(KA2PA(t->kstack)));
161
    frame_free(KA2PA(t->kstack));
164
#ifdef ARCH_HAS_FPU
162
#ifdef ARCH_HAS_FPU
165
    if (t->saved_fpu_context)
163
    if (t->saved_fpu_context)
166
        slab_free(fpu_context_slab,t->saved_fpu_context);
164
        slab_free(fpu_context_slab,t->saved_fpu_context);
167
#endif
165
#endif
168
    return 1; /* One page freed */
166
    return 1; /* One page freed */