LinuxKPI: Additions to rcu list.

- Add rcu list functions.
- Make rcu hlist's foreach macro use rcu calls instead of the non-rcu macro.
- Bump FreeBSD version so we have a checkpoint for the vboxvideo drm driver.

Reviewed by:	hps
Approved by:	imp (mentor), hps
MFC after:	1 week
Differential Revision:	D20719
This commit is contained in:
Johannes Lundberg 2019-06-21 18:48:07 +00:00
parent 62260f68b4
commit 6425fed7e6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=349277
2 changed files with 26 additions and 3 deletions

View File

@ -33,6 +33,25 @@
#include <linux/list.h>
#include <linux/rcupdate.h>
#define list_entry_rcu(ptr, type, member) \
container_of(READ_ONCE(ptr), type, member)
#define list_next_rcu(head) (*((struct list_head **)(&(head)->next)))
#define list_for_each_entry_rcu(pos, head, member) \
for (pos = list_entry_rcu((head)->next, typeof(*(pos)), member); \
&(pos)->member != (head); \
pos = list_entry_rcu((pos)->member.next, typeof(*(pos)), member))
static inline void
list_add_rcu(struct list_head *new, struct list_head *prev)
{
new->next = prev->next;
new->prev = prev;
rcu_assign_pointer(list_next_rcu(prev), new);
prev->prev = new;
}
#define hlist_first_rcu(head) (*((struct hlist_node **)(&(head)->first)))
#define hlist_next_rcu(node) (*((struct hlist_node **)(&(node)->next)))
#define hlist_pprev_rcu(node) (*((struct hlist_node **)((node)->pprev)))
@ -47,8 +66,12 @@ hlist_add_behind_rcu(struct hlist_node *n, struct hlist_node *prev)
n->next->pprev = &n->next;
}
#define hlist_for_each_entry_rcu(pos, head, member) \
hlist_for_each_entry(pos, head, member)
#define hlist_for_each_entry_rcu(pos, head, member) \
for (pos = hlist_entry_safe (rcu_dereference_raw(hlist_first_rcu(head)),\
typeof(*(pos)), member); \
(pos); \
pos = hlist_entry_safe(rcu_dereference_raw(hlist_next_rcu( \
&(pos)->member)), typeof(*(pos)), member))
static inline void
hlist_del_rcu(struct hlist_node *n)

View File

@ -60,7 +60,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
#define __FreeBSD_version 1300032 /* Master, propagated to newvers */
#define __FreeBSD_version 1300033 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,