1/** 2 * css_get - obtain a reference on the specified css 3 * @css: target css 4 * 5 * The caller must already have a reference. 6 */ 7CGROUP_REF_FN_ATTRS 8void css_get(struct cgroup_subsys_state *css) 9{ 10 if (!(css->flags & CSS_NO_REF)) 11 percpu_ref_get(&css->refcnt); 12} 13CGROUP_REF_EXPORT(css_get) 14 15/** 16 * css_get_many - obtain references on the specified css 17 * @css: target css 18 * @n: number of references to get 19 * 20 * The caller must already have a reference. 21 */ 22CGROUP_REF_FN_ATTRS 23void css_get_many(struct cgroup_subsys_state *css, unsigned int n) 24{ 25 if (!(css->flags & CSS_NO_REF)) 26 percpu_ref_get_many(&css->refcnt, n); 27} 28CGROUP_REF_EXPORT(css_get_many) 29 30/** 31 * css_tryget - try to obtain a reference on the specified css 32 * @css: target css 33 * 34 * Obtain a reference on @css unless it already has reached zero and is 35 * being released. This function doesn't care whether @css is on or 36 * offline. The caller naturally needs to ensure that @css is accessible 37 * but doesn't have to be holding a reference on it - IOW, RCU protected 38 * access is good enough for this function. Returns %true if a reference 39 * count was successfully obtained; %false otherwise. 40 */ 41CGROUP_REF_FN_ATTRS 42bool css_tryget(struct cgroup_subsys_state *css) 43{ 44 if (!(css->flags & CSS_NO_REF)) 45 return percpu_ref_tryget(&css->refcnt); 46 return true; 47} 48CGROUP_REF_EXPORT(css_tryget) 49 50/** 51 * css_tryget_online - try to obtain a reference on the specified css if online 52 * @css: target css 53 * 54 * Obtain a reference on @css if it's online. The caller naturally needs 55 * to ensure that @css is accessible but doesn't have to be holding a 56 * reference on it - IOW, RCU protected access is good enough for this 57 * function. Returns %true if a reference count was successfully obtained; 58 * %false otherwise. 59 */ 60CGROUP_REF_FN_ATTRS 61bool css_tryget_online(struct cgroup_subsys_state *css) 62{ 63 if (!(css->flags & CSS_NO_REF)) 64 return percpu_ref_tryget_live(&css->refcnt); 65 return true; 66} 67CGROUP_REF_EXPORT(css_tryget_online) 68 69/** 70 * css_put - put a css reference 71 * @css: target css 72 * 73 * Put a reference obtained via css_get() and css_tryget_online(). 74 */ 75CGROUP_REF_FN_ATTRS 76void css_put(struct cgroup_subsys_state *css) 77{ 78 if (!(css->flags & CSS_NO_REF)) 79 percpu_ref_put(&css->refcnt); 80} 81CGROUP_REF_EXPORT(css_put) 82 83/** 84 * css_put_many - put css references 85 * @css: target css 86 * @n: number of references to put 87 * 88 * Put references obtained via css_get() and css_tryget_online(). 89 */ 90CGROUP_REF_FN_ATTRS 91void css_put_many(struct cgroup_subsys_state *css, unsigned int n) 92{ 93 if (!(css->flags & CSS_NO_REF)) 94 percpu_ref_put_many(&css->refcnt, n); 95} 96CGROUP_REF_EXPORT(css_put_many) 97