Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 71420
b: refs/heads/master
c: 006cb99
h: refs/heads/master
v: v3
  • Loading branch information
Paul Menage authored and Linus Torvalds committed Oct 19, 2007
1 parent 4d214a9 commit 58b4473
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 62d0df64065e7c135d0002f069444fbdfc64768f
refs/heads/master: 006cb99200a38a8e3b0cbc1be48035a08921e601
4 changes: 4 additions & 0 deletions trunk/include/linux/cgroup_subsys.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,8 @@ SUBSYS(cpuacct)

/* */

#ifdef CONFIG_CGROUP_DEBUG
SUBSYS(debug)
#endif

/* */
10 changes: 10 additions & 0 deletions trunk/init/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,16 @@ config CGROUPS

Say N if unsure.

config CGROUP_DEBUG
bool "Example debug cgroup subsystem"
depends on CGROUPS
help
This option enables a simple cgroup subsystem that
exports useful debugging information about the cgroups
framework

Say N if unsure

config CPUSETS
bool "Cpuset support"
depends on SMP && CGROUPS
Expand Down
1 change: 1 addition & 0 deletions trunk/kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o
obj-$(CONFIG_KEXEC) += kexec.o
obj-$(CONFIG_COMPAT) += compat.o
obj-$(CONFIG_CGROUPS) += cgroup.o
obj-$(CONFIG_CGROUP_DEBUG) += cgroup_debug.o
obj-$(CONFIG_CPUSETS) += cpuset.o
obj-$(CONFIG_CGROUP_CPUACCT) += cpu_acct.o
obj-$(CONFIG_IKCONFIG) += configs.o
Expand Down
97 changes: 97 additions & 0 deletions trunk/kernel/cgroup_debug.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/*
* kernel/ccontainer_debug.c - Example cgroup subsystem that
* exposes debug info
*
* Copyright (C) Google Inc, 2007
*
* Developed by Paul Menage (menage@google.com)
*
*/

#include <linux/cgroup.h>
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/rcupdate.h>

#include <asm/atomic.h>

static struct cgroup_subsys_state *debug_create(struct cgroup_subsys *ss,
struct cgroup *cont)
{
struct cgroup_subsys_state *css = kzalloc(sizeof(*css), GFP_KERNEL);

if (!css)
return ERR_PTR(-ENOMEM);

return css;
}

static void debug_destroy(struct cgroup_subsys *ss, struct cgroup *cont)
{
kfree(cont->subsys[debug_subsys_id]);
}

static u64 cgroup_refcount_read(struct cgroup *cont, struct cftype *cft)
{
return atomic_read(&cont->count);
}

static u64 taskcount_read(struct cgroup *cont, struct cftype *cft)
{
u64 count;

cgroup_lock();
count = cgroup_task_count(cont);
cgroup_unlock();
return count;
}

static u64 current_css_set_read(struct cgroup *cont, struct cftype *cft)
{
return (u64)(long)current->cgroups;
}

static u64 current_css_set_refcount_read(struct cgroup *cont,
struct cftype *cft)
{
u64 count;

rcu_read_lock();
count = atomic_read(&current->cgroups->ref.refcount);
rcu_read_unlock();
return count;
}

static struct cftype files[] = {
{
.name = "cgroup_refcount",
.read_uint = cgroup_refcount_read,
},
{
.name = "taskcount",
.read_uint = taskcount_read,
},

{
.name = "current_css_set",
.read_uint = current_css_set_read,
},

{
.name = "current_css_set_refcount",
.read_uint = current_css_set_refcount_read,
},
};

static int debug_populate(struct cgroup_subsys *ss, struct cgroup *cont)
{
return cgroup_add_files(cont, ss, files, ARRAY_SIZE(files));
}

struct cgroup_subsys debug_subsys = {
.name = "debug",
.create = debug_create,
.destroy = debug_destroy,
.populate = debug_populate,
.subsys_id = debug_subsys_id,
};

0 comments on commit 58b4473

Please sign in to comment.