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 */ 7 CGROUP_REF_FN_ATTRS css_get(struct cgroup_subsys_state * css)8void css_get(struct cgroup_subsys_state *css) 9 { 10 if (!(css->flags & CSS_NO_REF)) 11 percpu_ref_get(&css->refcnt); 12 } CGROUP_REF_EXPORT(css_get)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 */ 22 CGROUP_REF_FN_ATTRS 23 void 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 } CGROUP_REF_EXPORT(css_get_many)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 */ 41 CGROUP_REF_FN_ATTRS 42 bool 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 } CGROUP_REF_EXPORT(css_tryget)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 */ 60 CGROUP_REF_FN_ATTRS 61 bool 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 } CGROUP_REF_EXPORT(css_tryget_online)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 */ 75 CGROUP_REF_FN_ATTRS 76 void css_put(struct cgroup_subsys_state *css) 77 { 78 if (!(css->flags & CSS_NO_REF)) 79 percpu_ref_put(&css->refcnt); 80 } CGROUP_REF_EXPORT(css_put)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 */ 90 CGROUP_REF_FN_ATTRS 91 void 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 } 96 CGROUP_REF_EXPORT(css_put_many) 97