mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
Merge tag 'cgroup-for-6.2' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
Pull cgroup updates from Tejun Heo:
"Nothing too interesting:
- Add CONFIG_DEBUG_GROUP_REF which makes cgroup refcnt operations
kprobable
- A couple cpuset optimizations
- Other misc changes including doc and test updates"
* tag 'cgroup-for-6.2' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:
cgroup: remove rcu_read_lock()/rcu_read_unlock() in critical section of spin_lock_irq()
cgroup/cpuset: Improve cpuset_css_alloc() description
kselftest/cgroup: Add cleanup() to test_cpuset_prs.sh
cgroup/cpuset: Optimize cpuset_attach() on v2
cgroup/cpuset: Skip spread flags update on v2
kselftest/cgroup: Fix gathering number of CPUs
cgroup: cgroup refcnt functions should be exported when CONFIG_DEBUG_CGROUP_REF
cgroup: Implement DEBUG_CGROUP_REF
This commit is contained in:
@@ -310,71 +310,24 @@ void css_task_iter_end(struct css_task_iter *it);
|
||||
* Inline functions.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_DEBUG_CGROUP_REF
|
||||
void css_get(struct cgroup_subsys_state *css);
|
||||
void css_get_many(struct cgroup_subsys_state *css, unsigned int n);
|
||||
bool css_tryget(struct cgroup_subsys_state *css);
|
||||
bool css_tryget_online(struct cgroup_subsys_state *css);
|
||||
void css_put(struct cgroup_subsys_state *css);
|
||||
void css_put_many(struct cgroup_subsys_state *css, unsigned int n);
|
||||
#else
|
||||
#define CGROUP_REF_FN_ATTRS static inline
|
||||
#define CGROUP_REF_EXPORT(fn)
|
||||
#include <linux/cgroup_refcnt.h>
|
||||
#endif
|
||||
|
||||
static inline u64 cgroup_id(const struct cgroup *cgrp)
|
||||
{
|
||||
return cgrp->kn->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* css_get - obtain a reference on the specified css
|
||||
* @css: target css
|
||||
*
|
||||
* The caller must already have a reference.
|
||||
*/
|
||||
static inline void css_get(struct cgroup_subsys_state *css)
|
||||
{
|
||||
if (!(css->flags & CSS_NO_REF))
|
||||
percpu_ref_get(&css->refcnt);
|
||||
}
|
||||
|
||||
/**
|
||||
* css_get_many - obtain references on the specified css
|
||||
* @css: target css
|
||||
* @n: number of references to get
|
||||
*
|
||||
* The caller must already have a reference.
|
||||
*/
|
||||
static inline void css_get_many(struct cgroup_subsys_state *css, unsigned int n)
|
||||
{
|
||||
if (!(css->flags & CSS_NO_REF))
|
||||
percpu_ref_get_many(&css->refcnt, n);
|
||||
}
|
||||
|
||||
/**
|
||||
* css_tryget - try to obtain a reference on the specified css
|
||||
* @css: target css
|
||||
*
|
||||
* Obtain a reference on @css unless it already has reached zero and is
|
||||
* being released. This function doesn't care whether @css is on or
|
||||
* offline. The caller naturally needs to ensure that @css is accessible
|
||||
* but doesn't have to be holding a reference on it - IOW, RCU protected
|
||||
* access is good enough for this function. Returns %true if a reference
|
||||
* count was successfully obtained; %false otherwise.
|
||||
*/
|
||||
static inline bool css_tryget(struct cgroup_subsys_state *css)
|
||||
{
|
||||
if (!(css->flags & CSS_NO_REF))
|
||||
return percpu_ref_tryget(&css->refcnt);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* css_tryget_online - try to obtain a reference on the specified css if online
|
||||
* @css: target css
|
||||
*
|
||||
* Obtain a reference on @css if it's online. The caller naturally needs
|
||||
* to ensure that @css is accessible but doesn't have to be holding a
|
||||
* reference on it - IOW, RCU protected access is good enough for this
|
||||
* function. Returns %true if a reference count was successfully obtained;
|
||||
* %false otherwise.
|
||||
*/
|
||||
static inline bool css_tryget_online(struct cgroup_subsys_state *css)
|
||||
{
|
||||
if (!(css->flags & CSS_NO_REF))
|
||||
return percpu_ref_tryget_live(&css->refcnt);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* css_is_dying - test whether the specified css is dying
|
||||
* @css: target css
|
||||
@@ -395,31 +348,6 @@ static inline bool css_is_dying(struct cgroup_subsys_state *css)
|
||||
return !(css->flags & CSS_NO_REF) && percpu_ref_is_dying(&css->refcnt);
|
||||
}
|
||||
|
||||
/**
|
||||
* css_put - put a css reference
|
||||
* @css: target css
|
||||
*
|
||||
* Put a reference obtained via css_get() and css_tryget_online().
|
||||
*/
|
||||
static inline void css_put(struct cgroup_subsys_state *css)
|
||||
{
|
||||
if (!(css->flags & CSS_NO_REF))
|
||||
percpu_ref_put(&css->refcnt);
|
||||
}
|
||||
|
||||
/**
|
||||
* css_put_many - put css references
|
||||
* @css: target css
|
||||
* @n: number of references to put
|
||||
*
|
||||
* Put references obtained via css_get() and css_tryget_online().
|
||||
*/
|
||||
static inline void css_put_many(struct cgroup_subsys_state *css, unsigned int n)
|
||||
{
|
||||
if (!(css->flags & CSS_NO_REF))
|
||||
percpu_ref_put_many(&css->refcnt, n);
|
||||
}
|
||||
|
||||
static inline void cgroup_get(struct cgroup *cgrp)
|
||||
{
|
||||
css_get(&cgrp->self);
|
||||
|
||||
Reference in New Issue
Block a user