Subversion Repositories HelenOS-historic

Rev

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

Rev 84 Rev 86
Line -... Line 1...
-
 
1
/*
-
 
2
 * Copyright (C) 2005 Jakub Vana
-
 
3
 * All rights reserved.
1
 
4
 *
-
 
5
 * Redistribution and use in source and binary forms, with or without
-
 
6
 * modification, are permitted provided that the following conditions
-
 
7
 * are met:
-
 
8
 *
-
 
9
 * - Redistributions of source code must retain the above copyright
-
 
10
 *   notice, this list of conditions and the following disclaimer.
-
 
11
 * - Redistributions in binary form must reproduce the above copyright
-
 
12
 *   notice, this list of conditions and the following disclaimer in the
-
 
13
 *   documentation and/or other materials provided with the distribution.
-
 
14
 * - The name of the author may not be used to endorse or promote products
-
 
15
 *   derived from this software without specific prior written permission.
2
 
16
 *
-
 
17
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-
 
18
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-
 
19
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-
 
20
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-
 
21
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-
 
22
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
 
23
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
 
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
 
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-
 
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 
27
 */
3
 
28
 
4
#include <arch/interrupt.h>
29
#include <arch/interrupt.h>
5
#include <print.h>
30
#include <print.h>
6
#include <debug.h>
31
#include <debug.h>
7
#include <panic.h>
32
#include <panic.h>
Line 9... Line 34...
9
#include <func.h>
34
#include <func.h>
10
#include <cpu.h>
35
#include <cpu.h>
11
#include <arch/asm.h>
36
#include <arch/asm.h>
12
#include <mm/tlb.h>
37
#include <mm/tlb.h>
13
 
38
 
14
 
-
 
15
 
-
 
16
#include <test.h>
39
#include <test.h>
17
#include <arch.h>
40
#include <arch.h>
18
#include <arch/smp/atomic.h>
41
#include <arch/smp/atomic.h>
19
#include <proc/thread.h>
42
#include <proc/thread.h>
20
 
43
 
21
 
-
 
22
 
-
 
23
 
-
 
24
thread_t *thread_create(void (* func)(void *), void *arg, task_t *task, int flags);
-
 
25
 
-
 
26
 
-
 
27
static void thread(void *data)
44
static void e(void *data)
28
{
45
{
29
  while(1)
46
    while(1) {
30
  {
-
 
31
    double e,d,le,f;
47
        double e,d,le,f;
32
    le=-1;
48
        le=-1;
33
    e=0;
49
        e=0;
34
    f=1;
50
        f=1;
35
    for(d=1;e!=le;d*=f,f+=1) {le=e;e=e+1/d;}
51
        for(d=1;e!=le;d*=f,f+=1) {
-
 
52
            le=e;
-
 
53
            e=e+1/d;
-
 
54
        }
36
   
55
   
37
    if((int)(100000000*e)==271828182) printf("THREAD:%s e OK\n",(char*)data);
56
        if((int)(100000000*e)==271828182) printf("tid%d: e OK\n", THREAD->tid);
38
    else panic("THREAD:%s e Failed\n",(char*)data);
57
        else panic("tid%d: e FAILED (100000000*e=%d)\n", THREAD->tid, (int) 100000000*e);
39
 
-
 
40
   
-
 
41
//    printf("100000000*e:%d\n");
-
 
42
  }
58
    }
43
  //printf("TEST:%s\n",(char*)data);  
-
 
44
}
59
}
45
 
60
 
46
 
61
 
47
 
62
 
48
void test(void)
63
void test(void)
49
{
64
{
50
  thread_t *t;
65
    thread_t *t;
51
 
66
    int i;
52
  t=thread_create(thread, (void*)"0", TASK,0);
-
 
53
  thread_ready(t);
-
 
54
 
-
 
55
 
-
 
56
 
-
 
57
  t=thread_create(thread, (void*)"1", TASK,0);
-
 
58
  thread_ready(t);
-
 
59
 
67
 
60
 
-
 
61
 
-
 
62
  t=thread_create(thread, (void*)"2", TASK,0);
-
 
63
  thread_ready(t);
68
    for (i=0; i<4; i++) {  
64
 
-
 
65
  t=thread_create(thread, (void*)"3", TASK,0);
69
        t = thread_create(e, NULL, TASK, 0);
66
  thread_ready(t);
70
        thread_ready(t);
67
  while(1);
71
    }
68
 
72
 
69
}
73
}
70
 
-