diff -NurpP --minimal linux-2.6.19.1-vs2.2.0-rc6.3.1/kernel/vserver/sched.c linux-2.6.19.1-vs2.2.0-rc6.4/kernel/vserver/sched.c --- linux-2.6.19.1-vs2.2.0-rc6.3.1/kernel/vserver/sched.c 2007-01-10 13:52:15 +0100 +++ linux-2.6.19.1-vs2.2.0-rc6.4/kernel/vserver/sched.c 2007-01-10 17:06:02 +0100 @@ -408,7 +408,6 @@ int vc_get_sched(struct vx_info *vxi, vo int vc_sched_info(struct vx_info *vxi, void __user *data) { struct vcmd_sched_info vc_data; - struct _vx_sched_pc *sched_pc; int cpu; if (copy_from_user (&vc_data, data, sizeof(vc_data))) @@ -418,13 +417,16 @@ int vc_sched_info(struct vx_info *vxi, v if (!cpu_possible(cpu)) return -EINVAL; - sched_pc = &vx_per_cpu(vxi, sched_pc, cpu); + if (vxi) { + struct _vx_sched_pc *sched_pc = + &vx_per_cpu(vxi, sched_pc, cpu); - vc_data.user_msec = ticks_to_msec(sched_pc->user_ticks); - vc_data.sys_msec = ticks_to_msec(sched_pc->sys_ticks); - vc_data.hold_msec = ticks_to_msec(sched_pc->hold_ticks); + vc_data.user_msec = ticks_to_msec(sched_pc->user_ticks); + vc_data.sys_msec = ticks_to_msec(sched_pc->sys_ticks); + vc_data.hold_msec = ticks_to_msec(sched_pc->hold_ticks); + vc_data.vavavoom = sched_pc->vavavoom; + } vc_data.token_usec = ticks_to_usec(1); - vc_data.vavavoom = sched_pc->vavavoom; if (copy_to_user (data, &vc_data, sizeof(vc_data))) return -EFAULT; diff -NurpP --minimal linux-2.6.19.1-vs2.2.0-rc6.3.1/kernel/vserver/switch.c linux-2.6.19.1-vs2.2.0-rc6.4/kernel/vserver/switch.c --- linux-2.6.19.1-vs2.2.0-rc6.3.1/kernel/vserver/switch.c 2007-01-10 17:14:23 +0100 +++ linux-2.6.19.1-vs2.2.0-rc6.4/kernel/vserver/switch.c 2007-01-10 17:00:02 +0100 @@ -310,7 +310,7 @@ long do_vserver(uint32_t cmd, uint32_t i __VCMD(get_iattr, 2, VCA_NONE, 0); __VCMD(get_dlimit, 3, VCA_NONE, VCF_INFO); __VCMD(get_sched, 3, VCA_VXI, VCF_INFO); - __VCMD(sched_info, 3, VCA_VXI, VCF_INFO); + __VCMD(sched_info, 3, VCA_VXI, VCF_INFO|VCF_ZIDOK); /* lower admin commands */ __VCMD(wait_exit, 4, VCA_VXI, VCF_INFO);