Subversion Repositories HelenOS

Rev

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

Rev 2330 Rev 2400
Line 59... Line 59...
59
 
59
 
60
/** Assigning a value to an RCU protected pointer */
60
/** Assigning a value to an RCU protected pointer */
61
#define rcu_assign_pointer(p, newp) {write_barrier(); (p)=(newp);}
61
#define rcu_assign_pointer(p, newp) {write_barrier(); (p)=(newp);}
62
 
62
 
63
/** RCU sync callback for those who don't need custom allocation */
63
/** RCU sync callback for those who don't need custom allocation */
64
#define rcu_sync_callback(func, data) {\
64
#define rcu_sync_callback_normal_alloc(func, data) {\
65
    rcu_callback_list_t* rd = malloc(sizeof(rcu_callback_list_t),0);\
65
    rcu_callback_list_t* rd = malloc(sizeof(rcu_callback_list_t),0);\
66
    rcu_sync_callback_custom_alloc(func, data, rd);}
66
    rcu_sync_callback(func, data, rd);}
-
 
67
 
-
 
68
/** RCU sync callback without custom allocation, default callback (just frees the argument) */
-
 
69
#define rcu_sync_callback_normal_alloc_free(data) rcu_sync_callback_normal_alloc(&rcu_callback_free, data)
67
 
70
 
68
void rcu_init(void);
71
void rcu_init(void);
69
void rcu_synchronize(void);
72
void rcu_synchronize(void);
70
void rcu_synchronize_callback_function(void* waitq);
73
void rcu_synchronize_callback_function(void* waitq);
71
void rcu_sync_callback_custom_alloc(void (*func)(void* data), void* data, rcu_callback_list_t* rcu_struct);
74
void rcu_sync_callback(void (*func)(void* data), void* data, rcu_callback_list_t* rcu_struct);
72
void rcu_tasklet(void* data);  
75
void rcu_tasklet(void* data);  
73
void rcu_passQS(void);
76
void rcu_passQS(void);
74
void rcu_run_callbacks(void);
77
void rcu_run_callbacks(void);
-
 
78
void rcu_callback_free(void* pointer);
-
 
79
 
-
 
80
 
-
 
81
 
75
 
82
 
76
#endif
83
#endif