#include <linux/list.h>
#include <linux/spinlock.h>
+#include <linux/rcupdate.h>
#define _VX_INFO_DEF_
#include "cvirt.h"
#undef _VX_INFO_DEF_
struct vx_info {
- struct list_head vx_list; /* linked list of contexts */
+ struct hlist_node vx_hlist; /* linked list of contexts */
+ struct rcu_head vx_rcu; /* the rcu head */
xid_t vx_id; /* context id */
- atomic_t vx_refcount; /* refcount */
+ atomic_t vx_usecnt; /* usage count */
+ atomic_t vx_refcnt; /* reference count */
struct vx_info *vx_parent; /* parent context */
struct namespace *vx_namespace; /* private namespace */
};
-extern spinlock_t vxlist_lock;
-extern struct list_head vx_infos;
-
-
#define VX_ADMIN 0x0001
#define VX_WATCH 0x0002
#define VX_DUMMY 0x0008
#define VX_ATR_MASK 0x0F00
-void free_vx_info(struct vx_info *);
+extern void rcu_free_vx_info(void *);
+extern void unhash_vx_info(struct vx_info *);
+
+extern struct vx_info *locate_vx_info(int);
+extern struct vx_info *locate_or_create_vx_info(int);
-extern struct vx_info *find_vx_info(int);
-extern struct vx_info *find_or_create_vx_info(int);
-extern int vx_info_id_valid(int);
+extern int get_xid_list(int, unsigned int *, int);
+extern int vx_info_is_hashed(xid_t);
extern int vx_migrate_task(struct task_struct *, struct vx_info *);