Add a garbage RCU implementation
[akaros.git] / kern / include / rcu.h
1 /* Copyright (c) 2018 Google Inc
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * Junk, racy implementation of RCU
6  */
7
8 #pragma once
9
10 #include <trap.h>
11
12 struct rcu_head {
13 };
14
15 static void __call_rcu_kmsg(uint32_t srcid, long a0, long a1, long a2)
16 {
17         void (*f)(struct rcu_head *) = (void*)a0;
18
19         f((void*)a1);
20 }
21
22 static void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *head))
23 {
24         send_kernel_message(core_id(), __call_rcu_kmsg, (long)func, (long)head, 0,
25                             KMSG_ROUTINE);
26 }
27
28 #define hlist_for_each_entry_rcu hlist_for_each_entry
29 #define hlist_add_head_rcu hlist_add_head
30 #define hlist_del_rcu hlist_del
31
32 #define rcu_read_lock()
33 #define rcu_read_unlock()
34 #define synchronize_rcu()
35 #define rcu_dereference(x) (x)
36 #define rcu_barrier() kthread_usleep(10000)