linux/include/linux/cgroup.h
<<
>>
Prefs
   1#ifndef _LINUX_CGROUP_H
   2#define _LINUX_CGROUP_H
   3/*
   4 *  cgroup interface
   5 *
   6 *  Copyright (C) 2003 BULL SA
   7 *  Copyright (C) 2004-2006 Silicon Graphics, Inc.
   8 *
   9 */
  10
  11#include <linux/sched.h>
  12#include <linux/cpumask.h>
  13#include <linux/nodemask.h>
  14#include <linux/rcupdate.h>
  15#include <linux/cgroupstats.h>
  16#include <linux/prio_heap.h>
  17#include <linux/rwsem.h>
  18#include <linux/idr.h>
  19
  20#ifdef CONFIG_CGROUPS
  21
  22struct cgroupfs_root;
  23struct cgroup_subsys;
  24struct inode;
  25struct cgroup;
  26struct css_id;
  27
  28extern int cgroup_init_early(void);
  29extern int cgroup_init(void);
  30extern void cgroup_lock(void);
  31extern int cgroup_lock_is_held(void);
  32extern bool cgroup_lock_live_group(struct cgroup *cgrp);
  33extern void cgroup_unlock(void);
  34extern void cgroup_fork(struct task_struct *p);
  35extern void cgroup_fork_callbacks(struct task_struct *p);
  36extern void cgroup_post_fork(struct task_struct *p);
  37extern void cgroup_exit(struct task_struct *p, int run_callbacks);
  38extern int cgroupstats_build(struct cgroupstats *stats,
  39                                struct dentry *dentry);
  40extern int cgroup_load_subsys(struct cgroup_subsys *ss);
  41extern void cgroup_unload_subsys(struct cgroup_subsys *ss);
  42
  43extern const struct file_operations proc_cgroup_operations;
  44
  45/* Define the enumeration of all builtin cgroup subsystems */
  46#define SUBSYS(_x) _x ## _subsys_id,
  47enum cgroup_subsys_id {
  48#include <linux/cgroup_subsys.h>
  49        CGROUP_BUILTIN_SUBSYS_COUNT
  50};
  51#undef SUBSYS
  52/*
  53 * This define indicates the maximum number of subsystems that can be loaded
  54 * at once. We limit to this many since cgroupfs_root has subsys_bits to keep
  55 * track of all of them.
  56 */
  57#define CGROUP_SUBSYS_COUNT (BITS_PER_BYTE*sizeof(unsigned long))
  58
  59/* Per-subsystem/per-cgroup state maintained by the system. */
  60struct cgroup_subsys_state {
  61        /*
  62         * The cgroup that this subsystem is attached to. Useful
  63         * for subsystems that want to know about the cgroup
  64         * hierarchy structure
  65         */
  66        struct cgroup *cgroup;
  67
  68        /*
  69         * State maintained by the cgroup system to allow subsystems
  70         * to be "busy". Should be accessed via css_get(),
  71         * css_tryget() and and css_put().
  72         */
  73
  74        atomic_t refcnt;
  75
  76        unsigned long flags;
  77        /* ID for this css, if possible */
  78        struct css_id __rcu *id;
  79};
  80
  81/* bits in struct cgroup_subsys_state flags field */
  82enum {
  83        CSS_ROOT, /* This CSS is the root of the subsystem */
  84        CSS_REMOVED, /* This CSS is dead */
  85};
  86
  87/* Caller must verify that the css is not for root cgroup */
  88static inline void __css_get(struct cgroup_subsys_state *css, int count)
  89{
  90        atomic_add(count, &css->refcnt);
  91}
  92
  93/*
  94 * Call css_get() to hold a reference on the css; it can be used
  95 * for a reference obtained via:
  96 * - an existing ref-counted reference to the css
  97 * - task->cgroups for a locked task
  98 */
  99
 100static inline void css_get(struct cgroup_subsys_state *css)
 101{
 102        /* We don't need to reference count the root state */
 103        if (!test_bit(CSS_ROOT, &css->flags))
 104                __css_get(css, 1);
 105}
 106
 107static inline bool css_is_removed(struct cgroup_subsys_state *css)
 108{
 109        return test_bit(CSS_REMOVED, &css->flags);
 110}
 111
 112/*
 113 * Call css_tryget() to take a reference on a css if your existing
 114 * (known-valid) reference isn't already ref-counted. Returns false if
 115 * the css has been destroyed.
 116 */
 117
 118static inline bool css_tryget(struct cgroup_subsys_state *css)
 119{
 120        if (test_bit(CSS_ROOT, &css->flags))
 121                return true;
 122        while (!atomic_inc_not_zero(&css->refcnt)) {
 123                if (test_bit(CSS_REMOVED, &css->flags))
 124                        return false;
 125                cpu_relax();
 126        }
 127        return true;
 128}
 129
 130/*
 131 * css_put() should be called to release a reference taken by
 132 * css_get() or css_tryget()
 133 */
 134
 135extern void __css_put(struct cgroup_subsys_state *css, int count);
 136static inline void css_put(struct cgroup_subsys_state *css)
 137{
 138        if (!test_bit(CSS_ROOT, &css->flags))
 139                __css_put(css, 1);
 140}
 141
 142/* bits in struct cgroup flags field */
 143enum {
 144        /* Control Group is dead */
 145        CGRP_REMOVED,
 146        /*
 147         * Control Group has previously had a child cgroup or a task,
 148         * but no longer (only if CGRP_NOTIFY_ON_RELEASE is set)
 149         */
 150        CGRP_RELEASABLE,
 151        /* Control Group requires release notifications to userspace */
 152        CGRP_NOTIFY_ON_RELEASE,
 153        /*
 154         * A thread in rmdir() is wating for this cgroup.
 155         */
 156        CGRP_WAIT_ON_RMDIR,
 157        /*
 158         * Clone cgroup values when creating a new child cgroup
 159         */
 160        CGRP_CLONE_CHILDREN,
 161};
 162
 163struct cgroup {
 164        unsigned long flags;            /* "unsigned long" so bitops work */
 165
 166        /*
 167         * count users of this cgroup. >0 means busy, but doesn't
 168         * necessarily indicate the number of tasks in the cgroup
 169         */
 170        atomic_t count;
 171
 172        /*
 173         * We link our 'sibling' struct into our parent's 'children'.
 174         * Our children link their 'sibling' into our 'children'.
 175         */
 176        struct list_head sibling;       /* my parent's children */
 177        struct list_head children;      /* my children */
 178
 179        struct cgroup *parent;          /* my parent */
 180        struct dentry __rcu *dentry;    /* cgroup fs entry, RCU protected */
 181
 182        /* Private pointers for each registered subsystem */
 183        struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT];
 184
 185        struct cgroupfs_root *root;
 186        struct cgroup *top_cgroup;
 187
 188        /*
 189         * List of cg_cgroup_links pointing at css_sets with
 190         * tasks in this cgroup. Protected by css_set_lock
 191         */
 192        struct list_head css_sets;
 193
 194        /*
 195         * Linked list running through all cgroups that can
 196         * potentially be reaped by the release agent. Protected by
 197         * release_list_lock
 198         */
 199        struct list_head release_list;
 200
 201        /*
 202         * list of pidlists, up to two for each namespace (one for procs, one
 203         * for tasks); created on demand.
 204         */
 205        struct list_head pidlists;
 206        struct mutex pidlist_mutex;
 207
 208        /* For RCU-protected deletion */
 209        struct rcu_head rcu_head;
 210
 211        /* List of events which userspace want to receive */
 212        struct list_head event_list;
 213        spinlock_t event_list_lock;
 214};
 215
 216/*
 217 * A css_set is a structure holding pointers to a set of
 218 * cgroup_subsys_state objects. This saves space in the task struct
 219 * object and speeds up fork()/exit(), since a single inc/dec and a
 220 * list_add()/del() can bump the reference count on the entire cgroup
 221 * set for a task.
 222 */
 223
 224struct css_set {
 225
 226        /* Reference count */
 227        atomic_t refcount;
 228
 229        /*
 230         * List running through all cgroup groups in the same hash
 231         * slot. Protected by css_set_lock
 232         */
 233        struct hlist_node hlist;
 234
 235        /*
 236         * List running through all tasks using this cgroup
 237         * group. Protected by css_set_lock
 238         */
 239        struct list_head tasks;
 240
 241        /*
 242         * List of cg_cgroup_link objects on link chains from
 243         * cgroups referenced from this css_set. Protected by
 244         * css_set_lock
 245         */
 246        struct list_head cg_links;
 247
 248        /*
 249         * Set of subsystem states, one for each subsystem. This array
 250         * is immutable after creation apart from the init_css_set
 251         * during subsystem registration (at boot time) and modular subsystem
 252         * loading/unloading.
 253         */
 254        struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT];
 255
 256        /* For RCU-protected deletion */
 257        struct rcu_head rcu_head;
 258};
 259
 260/*
 261 * cgroup_map_cb is an abstract callback API for reporting map-valued
 262 * control files
 263 */
 264
 265struct cgroup_map_cb {
 266        int (*fill)(struct cgroup_map_cb *cb, const char *key, u64 value);
 267        void *state;
 268};
 269
 270/*
 271 * struct cftype: handler definitions for cgroup control files
 272 *
 273 * When reading/writing to a file:
 274 *      - the cgroup to use is file->f_dentry->d_parent->d_fsdata
 275 *      - the 'cftype' of the file is file->f_dentry->d_fsdata
 276 */
 277
 278#define MAX_CFTYPE_NAME 64
 279struct cftype {
 280        /*
 281         * By convention, the name should begin with the name of the
 282         * subsystem, followed by a period
 283         */
 284        char name[MAX_CFTYPE_NAME];
 285        int private;
 286        /*
 287         * If not 0, file mode is set to this value, otherwise it will
 288         * be figured out automatically
 289         */
 290        umode_t mode;
 291
 292        /*
 293         * If non-zero, defines the maximum length of string that can
 294         * be passed to write_string; defaults to 64
 295         */
 296        size_t max_write_len;
 297
 298        int (*open)(struct inode *inode, struct file *file);
 299        ssize_t (*read)(struct cgroup *cgrp, struct cftype *cft,
 300                        struct file *file,
 301                        char __user *buf, size_t nbytes, loff_t *ppos);
 302        /*
 303         * read_u64() is a shortcut for the common case of returning a
 304         * single integer. Use it in place of read()
 305         */
 306        u64 (*read_u64)(struct cgroup *cgrp, struct cftype *cft);
 307        /*
 308         * read_s64() is a signed version of read_u64()
 309         */
 310        s64 (*read_s64)(struct cgroup *cgrp, struct cftype *cft);
 311        /*
 312         * read_map() is used for defining a map of key/value
 313         * pairs. It should call cb->fill(cb, key, value) for each
 314         * entry. The key/value pairs (and their ordering) should not
 315         * change between reboots.
 316         */
 317        int (*read_map)(struct cgroup *cont, struct cftype *cft,
 318                        struct cgroup_map_cb *cb);
 319        /*
 320         * read_seq_string() is used for outputting a simple sequence
 321         * using seqfile.
 322         */
 323        int (*read_seq_string)(struct cgroup *cont, struct cftype *cft,
 324                               struct seq_file *m);
 325
 326        ssize_t (*write)(struct cgroup *cgrp, struct cftype *cft,
 327                         struct file *file,
 328                         const char __user *buf, size_t nbytes, loff_t *ppos);
 329
 330        /*
 331         * write_u64() is a shortcut for the common case of accepting
 332         * a single integer (as parsed by simple_strtoull) from
 333         * userspace. Use in place of write(); return 0 or error.
 334         */
 335        int (*write_u64)(struct cgroup *cgrp, struct cftype *cft, u64 val);
 336        /*
 337         * write_s64() is a signed version of write_u64()
 338         */
 339        int (*write_s64)(struct cgroup *cgrp, struct cftype *cft, s64 val);
 340
 341        /*
 342         * write_string() is passed a nul-terminated kernelspace
 343         * buffer of maximum length determined by max_write_len.
 344         * Returns 0 or -ve error code.
 345         */
 346        int (*write_string)(struct cgroup *cgrp, struct cftype *cft,
 347                            const char *buffer);
 348        /*
 349         * trigger() callback can be used to get some kick from the
 350         * userspace, when the actual string written is not important
 351         * at all. The private field can be used to determine the
 352         * kick type for multiplexing.
 353         */
 354        int (*trigger)(struct cgroup *cgrp, unsigned int event);
 355
 356        int (*release)(struct inode *inode, struct file *file);
 357
 358        /*
 359         * register_event() callback will be used to add new userspace
 360         * waiter for changes related to the cftype. Implement it if
 361         * you want to provide this functionality. Use eventfd_signal()
 362         * on eventfd to send notification to userspace.
 363         */
 364        int (*register_event)(struct cgroup *cgrp, struct cftype *cft,
 365                        struct eventfd_ctx *eventfd, const char *args);
 366        /*
 367         * unregister_event() callback will be called when userspace
 368         * closes the eventfd or on cgroup removing.
 369         * This callback must be implemented, if you want provide
 370         * notification functionality.
 371         */
 372        void (*unregister_event)(struct cgroup *cgrp, struct cftype *cft,
 373                        struct eventfd_ctx *eventfd);
 374};
 375
 376struct cgroup_scanner {
 377        struct cgroup *cg;
 378        int (*test_task)(struct task_struct *p, struct cgroup_scanner *scan);
 379        void (*process_task)(struct task_struct *p,
 380                        struct cgroup_scanner *scan);
 381        struct ptr_heap *heap;
 382        void *data;
 383};
 384
 385/*
 386 * Add a new file to the given cgroup directory. Should only be
 387 * called by subsystems from within a populate() method
 388 */
 389int cgroup_add_file(struct cgroup *cgrp, struct cgroup_subsys *subsys,
 390                       const struct cftype *cft);
 391
 392/*
 393 * Add a set of new files to the given cgroup directory. Should
 394 * only be called by subsystems from within a populate() method
 395 */
 396int cgroup_add_files(struct cgroup *cgrp,
 397                        struct cgroup_subsys *subsys,
 398                        const struct cftype cft[],
 399                        int count);
 400
 401int cgroup_is_removed(const struct cgroup *cgrp);
 402
 403int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen);
 404
 405int cgroup_task_count(const struct cgroup *cgrp);
 406
 407/* Return true if cgrp is a descendant of the task's cgroup */
 408int cgroup_is_descendant(const struct cgroup *cgrp, struct task_struct *task);
 409
 410/*
 411 * When the subsys has to access css and may add permanent refcnt to css,
 412 * it should take care of racy conditions with rmdir(). Following set of
 413 * functions, is for stop/restart rmdir if necessary.
 414 * Because these will call css_get/put, "css" should be alive css.
 415 *
 416 *  cgroup_exclude_rmdir();
 417 *  ...do some jobs which may access arbitrary empty cgroup
 418 *  cgroup_release_and_wakeup_rmdir();
 419 *
 420 *  When someone removes a cgroup while cgroup_exclude_rmdir() holds it,
 421 *  it sleeps and cgroup_release_and_wakeup_rmdir() will wake him up.
 422 */
 423
 424void cgroup_exclude_rmdir(struct cgroup_subsys_state *css);
 425void cgroup_release_and_wakeup_rmdir(struct cgroup_subsys_state *css);
 426
 427/*
 428 * Control Group taskset, used to pass around set of tasks to cgroup_subsys
 429 * methods.
 430 */
 431struct cgroup_taskset;
 432struct task_struct *cgroup_taskset_first(struct cgroup_taskset *tset);
 433struct task_struct *cgroup_taskset_next(struct cgroup_taskset *tset);
 434struct cgroup *cgroup_taskset_cur_cgroup(struct cgroup_taskset *tset);
 435int cgroup_taskset_size(struct cgroup_taskset *tset);
 436
 437/**
 438 * cgroup_taskset_for_each - iterate cgroup_taskset
 439 * @task: the loop cursor
 440 * @skip_cgrp: skip if task's cgroup matches this, %NULL to iterate through all
 441 * @tset: taskset to iterate
 442 */
 443#define cgroup_taskset_for_each(task, skip_cgrp, tset)                  \
 444        for ((task) = cgroup_taskset_first((tset)); (task);             \
 445             (task) = cgroup_taskset_next((tset)))                      \
 446                if (!(skip_cgrp) ||                                     \
 447                    cgroup_taskset_cur_cgroup((tset)) != (skip_cgrp))
 448
 449/*
 450 * Control Group subsystem type.
 451 * See Documentation/cgroups/cgroups.txt for details
 452 */
 453
 454struct cgroup_subsys {
 455        struct cgroup_subsys_state *(*create)(struct cgroup *cgrp);
 456        int (*pre_destroy)(struct cgroup *cgrp);
 457        void (*destroy)(struct cgroup *cgrp);
 458        int (*can_attach)(struct cgroup *cgrp, struct cgroup_taskset *tset);
 459        void (*cancel_attach)(struct cgroup *cgrp, struct cgroup_taskset *tset);
 460        void (*attach)(struct cgroup *cgrp, struct cgroup_taskset *tset);
 461        void (*fork)(struct task_struct *task);
 462        void (*exit)(struct cgroup *cgrp, struct cgroup *old_cgrp,
 463                     struct task_struct *task);
 464        int (*populate)(struct cgroup_subsys *ss, struct cgroup *cgrp);
 465        void (*post_clone)(struct cgroup *cgrp);
 466        void (*bind)(struct cgroup *root);
 467
 468        int subsys_id;
 469        int active;
 470        int disabled;
 471        int early_init;
 472        /*
 473         * True if this subsys uses ID. ID is not available before cgroup_init()
 474         * (not available in early_init time.)
 475         */
 476        bool use_id;
 477#define MAX_CGROUP_TYPE_NAMELEN 32
 478        const char *name;
 479
 480        /*
 481         * Protects sibling/children links of cgroups in this
 482         * hierarchy, plus protects which hierarchy (or none) the
 483         * subsystem is a part of (i.e. root/sibling).  To avoid
 484         * potential deadlocks, the following operations should not be
 485         * undertaken while holding any hierarchy_mutex:
 486         *
 487         * - allocating memory
 488         * - initiating hotplug events
 489         */
 490        struct mutex hierarchy_mutex;
 491        struct lock_class_key subsys_key;
 492
 493        /*
 494         * Link to parent, and list entry in parent's children.
 495         * Protected by this->hierarchy_mutex and cgroup_lock()
 496         */
 497        struct cgroupfs_root *root;
 498        struct list_head sibling;
 499        /* used when use_id == true */
 500        struct idr idr;
 501        spinlock_t id_lock;
 502
 503        /* should be defined only by modular subsystems */
 504        struct module *module;
 505};
 506
 507#define SUBSYS(_x) extern struct cgroup_subsys _x ## _subsys;
 508#include <linux/cgroup_subsys.h>
 509#undef SUBSYS
 510
 511static inline struct cgroup_subsys_state *cgroup_subsys_state(
 512        struct cgroup *cgrp, int subsys_id)
 513{
 514        return cgrp->subsys[subsys_id];
 515}
 516
 517/*
 518 * function to get the cgroup_subsys_state which allows for extra
 519 * rcu_dereference_check() conditions, such as locks used during the
 520 * cgroup_subsys::attach() methods.
 521 */
 522#define task_subsys_state_check(task, subsys_id, __c)                   \
 523        rcu_dereference_check(task->cgroups->subsys[subsys_id],         \
 524                              lockdep_is_held(&task->alloc_lock) ||     \
 525                              cgroup_lock_is_held() || (__c))
 526
 527static inline struct cgroup_subsys_state *
 528task_subsys_state(struct task_struct *task, int subsys_id)
 529{
 530        return task_subsys_state_check(task, subsys_id, false);
 531}
 532
 533static inline struct cgroup* task_cgroup(struct task_struct *task,
 534                                               int subsys_id)
 535{
 536        return task_subsys_state(task, subsys_id)->cgroup;
 537}
 538
 539/* A cgroup_iter should be treated as an opaque object */
 540struct cgroup_iter {
 541        struct list_head *cg_link;
 542        struct list_head *task;
 543};
 544
 545/*
 546 * To iterate across the tasks in a cgroup:
 547 *
 548 * 1) call cgroup_iter_start to initialize an iterator
 549 *
 550 * 2) call cgroup_iter_next() to retrieve member tasks until it
 551 *    returns NULL or until you want to end the iteration
 552 *
 553 * 3) call cgroup_iter_end() to destroy the iterator.
 554 *
 555 * Or, call cgroup_scan_tasks() to iterate through every task in a
 556 * cgroup - cgroup_scan_tasks() holds the css_set_lock when calling
 557 * the test_task() callback, but not while calling the process_task()
 558 * callback.
 559 */
 560void cgroup_iter_start(struct cgroup *cgrp, struct cgroup_iter *it);
 561struct task_struct *cgroup_iter_next(struct cgroup *cgrp,
 562                                        struct cgroup_iter *it);
 563void cgroup_iter_end(struct cgroup *cgrp, struct cgroup_iter *it);
 564int cgroup_scan_tasks(struct cgroup_scanner *scan);
 565int cgroup_attach_task(struct cgroup *, struct task_struct *);
 566int cgroup_attach_task_all(struct task_struct *from, struct task_struct *);
 567
 568/*
 569 * CSS ID is ID for cgroup_subsys_state structs under subsys. This only works
 570 * if cgroup_subsys.use_id == true. It can be used for looking up and scanning.
 571 * CSS ID is assigned at cgroup allocation (create) automatically
 572 * and removed when subsys calls free_css_id() function. This is because
 573 * the lifetime of cgroup_subsys_state is subsys's matter.
 574 *
 575 * Looking up and scanning function should be called under rcu_read_lock().
 576 * Taking cgroup_mutex()/hierarchy_mutex() is not necessary for following calls.
 577 * But the css returned by this routine can be "not populated yet" or "being
 578 * destroyed". The caller should check css and cgroup's status.
 579 */
 580
 581/*
 582 * Typically Called at ->destroy(), or somewhere the subsys frees
 583 * cgroup_subsys_state.
 584 */
 585void free_css_id(struct cgroup_subsys *ss, struct cgroup_subsys_state *css);
 586
 587/* Find a cgroup_subsys_state which has given ID */
 588
 589struct cgroup_subsys_state *css_lookup(struct cgroup_subsys *ss, int id);
 590
 591/*
 592 * Get a cgroup whose id is greater than or equal to id under tree of root.
 593 * Returning a cgroup_subsys_state or NULL.
 594 */
 595struct cgroup_subsys_state *css_get_next(struct cgroup_subsys *ss, int id,
 596                struct cgroup_subsys_state *root, int *foundid);
 597
 598/* Returns true if root is ancestor of cg */
 599bool css_is_ancestor(struct cgroup_subsys_state *cg,
 600                     const struct cgroup_subsys_state *root);
 601
 602/* Get id and depth of css */
 603unsigned short css_id(struct cgroup_subsys_state *css);
 604unsigned short css_depth(struct cgroup_subsys_state *css);
 605struct cgroup_subsys_state *cgroup_css_from_dir(struct file *f, int id);
 606
 607#else /* !CONFIG_CGROUPS */
 608
 609static inline int cgroup_init_early(void) { return 0; }
 610static inline int cgroup_init(void) { return 0; }
 611static inline void cgroup_fork(struct task_struct *p) {}
 612static inline void cgroup_fork_callbacks(struct task_struct *p) {}
 613static inline void cgroup_post_fork(struct task_struct *p) {}
 614static inline void cgroup_exit(struct task_struct *p, int callbacks) {}
 615
 616static inline void cgroup_lock(void) {}
 617static inline void cgroup_unlock(void) {}
 618static inline int cgroupstats_build(struct cgroupstats *stats,
 619                                        struct dentry *dentry)
 620{
 621        return -EINVAL;
 622}
 623
 624/* No cgroups - nothing to do */
 625static inline int cgroup_attach_task_all(struct task_struct *from,
 626                                         struct task_struct *t)
 627{
 628        return 0;
 629}
 630
 631#endif /* !CONFIG_CGROUPS */
 632
 633#endif /* _LINUX_CGROUP_H */
 634