diff -NurpP --minimal linux-2.6.36-vs2.3.0.36.34/kernel/vserver/Kconfig linux-2.6.36-vs2.3.0.36.35/kernel/vserver/Kconfig --- linux-2.6.36-vs2.3.0.36.34/kernel/vserver/Kconfig 2010-10-21 18:34:45.000000000 +0200 +++ linux-2.6.36-vs2.3.0.36.35/kernel/vserver/Kconfig 2010-10-21 19:04:20.000000000 +0200 @@ -204,33 +204,6 @@ config VSERVER_HISTORY_SIZE This allows you to specify the number of entries in the per-CPU history buffer. -config VSERVER_MONITOR - bool "VServer Scheduling Monitor" - depends on VSERVER_DISABLED - default n - help - Set this to yes if you want to record the scheduling - decisions, so that they can be relayed to userspace - for detailed analysis. - -config VSERVER_MONITOR_SIZE - int "Per-CPU Monitor Queue Size (32-65536)" - depends on VSERVER_MONITOR - range 32 65536 - default 1024 - help - This allows you to specify the number of entries in - the per-CPU scheduling monitor buffer. - -config VSERVER_MONITOR_SYNC - int "Per-CPU Monitor Sync Interval (0-65536)" - depends on VSERVER_MONITOR - range 0 65536 - default 256 - help - This allows you to specify the interval in ticks - when a time sync entry is inserted. - config VSERVER_LEGACY_MEM bool "Legacy Memory Limits" default n diff -NurpP --minimal linux-2.6.36-vs2.3.0.36.34/kernel/vserver/monitor.c linux-2.6.36-vs2.3.0.36.35/kernel/vserver/monitor.c --- linux-2.6.36-vs2.3.0.36.34/kernel/vserver/monitor.c 2010-10-21 13:09:36.000000000 +0200 +++ linux-2.6.36-vs2.3.0.36.35/kernel/vserver/monitor.c 1970-01-01 01:00:00.000000000 +0100 @@ -1,138 +0,0 @@ -/* - * kernel/vserver/monitor.c - * - * Virtual Context Scheduler Monitor - * - * Copyright (C) 2006-2007 Herbert Pötzl - * - * V0.01 basic design - * - */ - -#include -#include -#include -#include - -#include -#include - - -#ifdef CONFIG_VSERVER_MONITOR -#define VXM_SIZE CONFIG_VSERVER_MONITOR_SIZE -#else -#define VXM_SIZE 64 -#endif - -struct _vx_monitor { - unsigned int counter; - - struct _vx_mon_entry entry[VXM_SIZE+1]; -}; - - -DEFINE_PER_CPU(struct _vx_monitor, vx_monitor_buffer); - -unsigned volatile int vxm_active = 1; - -static atomic_t sequence = ATOMIC_INIT(0); - - -/* vxm_advance() - - * requires disabled preemption */ - -struct _vx_mon_entry *vxm_advance(int cpu) -{ - struct _vx_monitor *mon = &per_cpu(vx_monitor_buffer, cpu); - struct _vx_mon_entry *entry; - unsigned int index; - - index = vxm_active ? (mon->counter++ % VXM_SIZE) : VXM_SIZE; - entry = &mon->entry[index]; - - entry->ev.seq = atomic_inc_return(&sequence); - entry->ev.jif = jiffies; - return entry; -} - -EXPORT_SYMBOL_GPL(vxm_advance); - - -int do_read_monitor(struct __user _vx_mon_entry *data, - int cpu, uint32_t *index, uint32_t *count) -{ - int pos, ret = 0; - struct _vx_monitor *mon = &per_cpu(vx_monitor_buffer, cpu); - int end = mon->counter; - int start = end - VXM_SIZE + 2; - int idx = *index; - - /* special case: get current pos */ - if (!*count) { - *index = end; - return 0; - } - - /* have we lost some data? */ - if (idx < start) - idx = start; - - for (pos = 0; (pos < *count) && (idx < end); pos++, idx++) { - struct _vx_mon_entry *entry = - &mon->entry[idx % VXM_SIZE]; - - /* send entry to userspace */ - ret = copy_to_user(&data[pos], entry, sizeof(*entry)); - if (ret) - break; - } - /* save new index and count */ - *index = idx; - *count = pos; - return ret ? ret : (*index < end); -} - -int vc_read_monitor(uint32_t id, void __user *data) -{ - struct vcmd_read_monitor_v0 vc_data; - int ret; - - if (id >= NR_CPUS) - return -EINVAL; - - if (copy_from_user(&vc_data, data, sizeof(vc_data))) - return -EFAULT; - - ret = do_read_monitor((struct __user _vx_mon_entry *)vc_data.data, - id, &vc_data.index, &vc_data.count); - - if (copy_to_user(data, &vc_data, sizeof(vc_data))) - return -EFAULT; - return ret; -} - -#ifdef CONFIG_COMPAT - -int vc_read_monitor_x32(uint32_t id, void __user *data) -{ - struct vcmd_read_monitor_v0_x32 vc_data; - int ret; - - if (id >= NR_CPUS) - return -EINVAL; - - if (copy_from_user(&vc_data, data, sizeof(vc_data))) - return -EFAULT; - - ret = do_read_monitor((struct __user _vx_mon_entry *) - compat_ptr(vc_data.data_ptr), - id, &vc_data.index, &vc_data.count); - - if (copy_to_user(data, &vc_data, sizeof(vc_data))) - return -EFAULT; - return ret; -} - -#endif /* CONFIG_COMPAT */ - diff -NurpP --minimal linux-2.6.36-vs2.3.0.36.34/kernel/vserver/switch.c linux-2.6.36-vs2.3.0.36.35/kernel/vserver/switch.c --- linux-2.6.36-vs2.3.0.36.34/kernel/vserver/switch.c 2010-10-21 13:09:36.000000000 +0200 +++ linux-2.6.36-vs2.3.0.36.35/kernel/vserver/switch.c 2010-10-21 19:05:54.000000000 +0200 @@ -272,10 +272,6 @@ long do_vcmd(uint32_t cmd, uint32_t id, case VCMD_read_history: return __COMPAT(vc_read_history, id, data, compat); #endif -#ifdef CONFIG_VSERVER_MONITOR - case VCMD_read_monitor: - return __COMPAT(vc_read_monitor, id, data, compat); -#endif default: vxwprintk_task(1, "unimplemented VCMD_%02d_%d[%d]", VC_CATEGORY(cmd), VC_COMMAND(cmd), VC_VERSION(cmd)); @@ -406,9 +402,6 @@ long do_vserver(uint32_t cmd, uint32_t i __VCMD(dump_history, 9, VCA_NONE, 0); __VCMD(read_history, 9, VCA_NONE, 0); #endif -#ifdef CONFIG_VSERVER_MONITOR - __VCMD(read_monitor, 9, VCA_NONE, 0); -#endif default: perm = -1;