Subversion Repositories HelenOS

Rev

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

Rev 2309 Rev 2315
Line 34... Line 34...
34
#include <proc/tasklet.h>
34
#include <proc/tasklet.h>
35
#include <arch/barrier.h>
35
#include <arch/barrier.h>
36
#include <arch.h>
36
#include <arch.h>
37
#include <preemption.h>
37
#include <preemption.h>
38
bool gquiet;
38
bool gquiet;
-
 
39
bool called;
39
 
40
 
40
static void callback(void* data)
41
static void callback(void* data)
41
{
42
{
42
    if (!gquiet)
43
    if (!gquiet)
43
        printf("callback called\n");
44
        printf("callback called\n");
-
 
45
    called = true;
44
}
46
}
45
char * test_rcu1(bool quiet)
47
char * test_rcu1(bool quiet)
46
{
48
{
47
    gquiet = quiet;
49
    gquiet = quiet;
-
 
50
    called = false;
48
    int* p;
51
    int* p;
49
    rcu_read_lock();
52
    rcu_read_lock();
50
    rcu_read_unlock();
-
 
51
    rcu_assign_pointer(p,malloc(sizeof(int),0));
53
    rcu_assign_pointer(p,malloc(sizeof(int),0));
52
    if (!quiet)
54
    if (!quiet)
53
        printf("p:%x\n",rcu_dereference_pointer(p));
55
        printf("p:%x\n",rcu_dereference_pointer(p));
-
 
56
    rcu_read_unlock();
54
    rcu_sync_callback(&callback, NULL);
57
    rcu_sync_callback(&callback, NULL);
55
    if (!quiet)
58
    if (!quiet)
56
        printf("Callback scheduled\n");
59
        printf("Callback scheduled\n");
-
 
60
    while(!called);
57
    rcu_synchronize();
61
    rcu_synchronize();
58
    if (!quiet)
62
    if (!quiet)
59
        printf("Synchronized\n");
63
        printf("Synchronized\n");
60
    return NULL;
64
    return NULL;
61
 
65