INIT_HLIST_NODE(&new->vx_hlist);
atomic_set(&new->vx_usecnt, 0);
atomic_set(&new->vx_tasks, 0);
new->vx_parent = NULL;
new->vx_state = 0;
INIT_HLIST_NODE(&new->vx_hlist);
atomic_set(&new->vx_usecnt, 0);
atomic_set(&new->vx_tasks, 0);
new->vx_parent = NULL;
new->vx_state = 0;
BUG_ON(atomic_read(&vxi->vx_usecnt));
BUG_ON(atomic_read(&vxi->vx_tasks));
BUG_ON(vx_info_state(vxi, VXS_HASHED));
BUG_ON(atomic_read(&vxi->vx_usecnt));
BUG_ON(atomic_read(&vxi->vx_tasks));
BUG_ON(vx_info_state(vxi, VXS_HASHED));
- /* maybe warn on that? */
- if (!(vxi->vx_state & VXS_HASHED))
- return;
+ /* context must be hashed */
+ BUG_ON(!vx_info_state(vxi, VXS_HASHED));
vxdprintk(VXD_CBIT(xid, 0),
"__lookup_vx_info(#%u): %p[#%u]",
xid, vxi, vxi?vxi->vx_id:0);
vxdprintk(VXD_CBIT(xid, 0),
"__lookup_vx_info(#%u): %p[#%u]",
xid, vxi, vxi?vxi->vx_id:0);
vxdprintk(VXD_CBIT(xid, 1), "create_vx_info(%d)*", id);
vxdprintk(VXD_CBIT(xid, 1), "create_vx_info(%d)*", id);
else if ((vxi = __lookup_vx_info(id))) {
vxdprintk(VXD_CBIT(xid, 0),
"create_vx_info(%d) = %p (already there)", id, vxi);
else if ((vxi = __lookup_vx_info(id))) {
vxdprintk(VXD_CBIT(xid, 0),
"create_vx_info(%d) = %p (already there)", id, vxi);
vxdprintk(VXD_CBIT(xid, 0),
"create_vx_info(%d) = %p (new)", id, new);
__hash_vx_info(get_vx_info(new));
vxdprintk(VXD_CBIT(xid, 0),
"create_vx_info(%d) = %p (new)", id, new);
__hash_vx_info(get_vx_info(new));
int vx_migrate_user(struct task_struct *p, struct vx_info *vxi)
{
struct user_struct *new_user, *old_user;
int vx_migrate_user(struct task_struct *p, struct vx_info *vxi)
{
struct user_struct *new_user, *old_user;
vs_state_change(new_vxi, VSC_STARTUP);
ret = new_vxi->vx_id;
vx_migrate_task(current, new_vxi);
vs_state_change(new_vxi, VSC_STARTUP);
ret = new_vxi->vx_id;
vx_migrate_task(current, new_vxi);