~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/kernel/cgroup/cpuset-internal.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /kernel/cgroup/cpuset-internal.h (Version linux-6.12-rc7) and /kernel/cgroup/cpuset-internal.h (Version linux-4.13.16)


  1 /* SPDX-License-Identifier: GPL-2.0-or-later *      1 
  2                                                   
  3 #ifndef __CPUSET_INTERNAL_H                       
  4 #define __CPUSET_INTERNAL_H                       
  5                                                   
  6 #include <linux/cgroup.h>                         
  7 #include <linux/cpu.h>                            
  8 #include <linux/cpumask.h>                        
  9 #include <linux/cpuset.h>                         
 10 #include <linux/spinlock.h>                       
 11 #include <linux/union_find.h>                     
 12                                                   
 13 /* See "Frequency meter" comments, below. */      
 14                                                   
 15 struct fmeter {                                   
 16         int cnt;                /* unprocessed    
 17         int val;                /* most recent    
 18         time64_t time;          /* clock (secs    
 19         spinlock_t lock;        /* guards read    
 20 };                                                
 21                                                   
 22 /*                                                
 23  * Invalid partition error code                   
 24  */                                               
 25 enum prs_errcode {                                
 26         PERR_NONE = 0,                            
 27         PERR_INVCPUS,                             
 28         PERR_INVPARENT,                           
 29         PERR_NOTPART,                             
 30         PERR_NOTEXCL,                             
 31         PERR_NOCPUS,                              
 32         PERR_HOTPLUG,                             
 33         PERR_CPUSEMPTY,                           
 34         PERR_HKEEPING,                            
 35         PERR_ACCESS,                              
 36 };                                                
 37                                                   
 38 /* bits in struct cpuset flags field */           
 39 typedef enum {                                    
 40         CS_ONLINE,                                
 41         CS_CPU_EXCLUSIVE,                         
 42         CS_MEM_EXCLUSIVE,                         
 43         CS_MEM_HARDWALL,                          
 44         CS_MEMORY_MIGRATE,                        
 45         CS_SCHED_LOAD_BALANCE,                    
 46         CS_SPREAD_PAGE,                           
 47         CS_SPREAD_SLAB,                           
 48 } cpuset_flagbits_t;                              
 49                                                   
 50 /* The various types of files and directories     
 51                                                   
 52 typedef enum {                                    
 53         FILE_MEMORY_MIGRATE,                      
 54         FILE_CPULIST,                             
 55         FILE_MEMLIST,                             
 56         FILE_EFFECTIVE_CPULIST,                   
 57         FILE_EFFECTIVE_MEMLIST,                   
 58         FILE_SUBPARTS_CPULIST,                    
 59         FILE_EXCLUSIVE_CPULIST,                   
 60         FILE_EFFECTIVE_XCPULIST,                  
 61         FILE_ISOLATED_CPULIST,                    
 62         FILE_CPU_EXCLUSIVE,                       
 63         FILE_MEM_EXCLUSIVE,                       
 64         FILE_MEM_HARDWALL,                        
 65         FILE_SCHED_LOAD_BALANCE,                  
 66         FILE_PARTITION_ROOT,                      
 67         FILE_SCHED_RELAX_DOMAIN_LEVEL,            
 68         FILE_MEMORY_PRESSURE_ENABLED,             
 69         FILE_MEMORY_PRESSURE,                     
 70         FILE_SPREAD_PAGE,                         
 71         FILE_SPREAD_SLAB,                         
 72 } cpuset_filetype_t;                              
 73                                                   
 74 struct cpuset {                                   
 75         struct cgroup_subsys_state css;           
 76                                                   
 77         unsigned long flags;            /* "un    
 78                                                   
 79         /*                                        
 80          * On default hierarchy:                  
 81          *                                        
 82          * The user-configured masks can only     
 83          * cpuset.cpus and cpuset.mems, and wo    
 84          * parent masks.                          
 85          *                                        
 86          * The effective masks is the real mas    
 87          * in the cpuset. They may be changed     
 88          * changed or hotplug happens.            
 89          *                                        
 90          * effective_mask == configured_mask &    
 91          * and if it ends up empty, it will in    
 92          *                                        
 93          *                                        
 94          * On legacy hierarchy:                   
 95          *                                        
 96          * The user-configured masks are alway    
 97          */                                       
 98                                                   
 99         /* user-configured CPUs and Memory Nod    
100         cpumask_var_t cpus_allowed;               
101         nodemask_t mems_allowed;                  
102                                                   
103         /* effective CPUs and Memory Nodes all    
104         cpumask_var_t effective_cpus;             
105         nodemask_t effective_mems;                
106                                                   
107         /*                                        
108          * Exclusive CPUs dedicated to current    
109          *                                        
110          * The effective_cpus of a valid parti    
111          * effective_xcpus and some of the eff    
112          * to sub-partitions below & hence exc    
113          * For a valid partition root, its eff    
114          * with cpus_allowed unless its exclus    
115          *                                        
116          * This value will only be set if eith    
117          * when this cpuset becomes a local pa    
118          */                                       
119         cpumask_var_t effective_xcpus;            
120                                                   
121         /*                                        
122          * Exclusive CPUs as requested by the     
123          *                                        
124          * Its value is independent of cpus_al    
125          * CPUs that can be granted to the cur    
126          * it becomes a valid partition root.     
127          * CPUs granted (effective_xcpus) depe    
128          * CPUs are passed down by its ancesto    
129          * another sibling partition root alon    
130          *                                        
131          * If its value isn't set, it defaults    
132          */                                       
133         cpumask_var_t exclusive_cpus;             
134                                                   
135         /*                                        
136          * This is old Memory Nodes tasks took    
137          *                                        
138          * - top_cpuset.old_mems_allowed is in    
139          * - A new cpuset's old_mems_allowed i    
140          *   task is moved into it.               
141          * - old_mems_allowed is used in cpuse    
142          *   cpuset.mems_allowed and have task    
143          *   then old_mems_allowed is updated     
144          */                                       
145         nodemask_t old_mems_allowed;              
146                                                   
147         struct fmeter fmeter;           /* mem    
148                                                   
149         /*                                        
150          * Tasks are being attached to this cp    
151          * zeroing cpus/mems_allowed between -    
152          */                                       
153         int attach_in_progress;                   
154                                                   
155         /* for custom sched domain */             
156         int relax_domain_level;                   
157                                                   
158         /* number of valid local child partiti    
159         int nr_subparts;                          
160                                                   
161         /* partition root state */                
162         int partition_root_state;                 
163                                                   
164         /*                                        
165          * number of SCHED_DEADLINE tasks atta    
166          * know when to rebuild associated roo    
167          */                                       
168         int nr_deadline_tasks;                    
169         int nr_migrate_dl_tasks;                  
170         u64 sum_migrate_dl_bw;                    
171                                                   
172         /* Invalid partition error code, not l    
173         enum prs_errcode prs_err;                 
174                                                   
175         /* Handle for cpuset.cpus.partition */    
176         struct cgroup_file partition_file;        
177                                                   
178         /* Remote partition silbling list anch    
179         struct list_head remote_sibling;          
180                                                   
181         /* Used to merge intersecting subsets     
182         struct uf_node node;                      
183 };                                                
184                                                   
185 static inline struct cpuset *css_cs(struct cgr    
186 {                                                 
187         return css ? container_of(css, struct     
188 }                                                 
189                                                   
190 /* Retrieve the cpuset for a task */              
191 static inline struct cpuset *task_cs(struct ta    
192 {                                                 
193         return css_cs(task_css(task, cpuset_cg    
194 }                                                 
195                                                   
196 static inline struct cpuset *parent_cs(struct     
197 {                                                 
198         return css_cs(cs->css.parent);            
199 }                                                 
200                                                   
201 /* convenient tests for these bits */             
202 static inline bool is_cpuset_online(struct cpu    
203 {                                                 
204         return test_bit(CS_ONLINE, &cs->flags)    
205 }                                                 
206                                                   
207 static inline int is_cpu_exclusive(const struc    
208 {                                                 
209         return test_bit(CS_CPU_EXCLUSIVE, &cs-    
210 }                                                 
211                                                   
212 static inline int is_mem_exclusive(const struc    
213 {                                                 
214         return test_bit(CS_MEM_EXCLUSIVE, &cs-    
215 }                                                 
216                                                   
217 static inline int is_mem_hardwall(const struct    
218 {                                                 
219         return test_bit(CS_MEM_HARDWALL, &cs->    
220 }                                                 
221                                                   
222 static inline int is_sched_load_balance(const     
223 {                                                 
224         return test_bit(CS_SCHED_LOAD_BALANCE,    
225 }                                                 
226                                                   
227 static inline int is_memory_migrate(const stru    
228 {                                                 
229         return test_bit(CS_MEMORY_MIGRATE, &cs    
230 }                                                 
231                                                   
232 static inline int is_spread_page(const struct     
233 {                                                 
234         return test_bit(CS_SPREAD_PAGE, &cs->f    
235 }                                                 
236                                                   
237 static inline int is_spread_slab(const struct     
238 {                                                 
239         return test_bit(CS_SPREAD_SLAB, &cs->f    
240 }                                                 
241                                                   
242 /**                                               
243  * cpuset_for_each_child - traverse online chi    
244  * @child_cs: loop cursor pointing to the curr    
245  * @pos_css: used for iteration                   
246  * @parent_cs: target cpuset to walk children     
247  *                                                
248  * Walk @child_cs through the online children     
249  * with RCU read locked.                          
250  */                                               
251 #define cpuset_for_each_child(child_cs, pos_cs    
252         css_for_each_child((pos_css), &(parent    
253                 if (is_cpuset_online(((child_c    
254                                                   
255 /**                                               
256  * cpuset_for_each_descendant_pre - pre-order     
257  * @des_cs: loop cursor pointing to the curren    
258  * @pos_css: used for iteration                   
259  * @root_cs: target cpuset to walk ancestor of    
260  *                                                
261  * Walk @des_cs through the online descendants    
262  * with RCU read locked.  The caller may modif    
263  * css_rightmost_descendant() to skip subtree.    
264  * iteration and the first node to be visited.    
265  */                                               
266 #define cpuset_for_each_descendant_pre(des_cs,    
267         css_for_each_descendant_pre((pos_css),    
268                 if (is_cpuset_online(((des_cs)    
269                                                   
270 void rebuild_sched_domains_locked(void);          
271 void cpuset_callback_lock_irq(void);              
272 void cpuset_callback_unlock_irq(void);            
273 void cpuset_update_tasks_cpumask(struct cpuset    
274 void cpuset_update_tasks_nodemask(struct cpuse    
275 int cpuset_update_flag(cpuset_flagbits_t bit,     
276 ssize_t cpuset_write_resmask(struct kernfs_ope    
277                                     char *buf,    
278 int cpuset_common_seq_show(struct seq_file *sf    
279                                                   
280 /*                                                
281  * cpuset-v1.c                                    
282  */                                               
283 #ifdef CONFIG_CPUSETS_V1                          
284 extern struct cftype cpuset1_files[];             
285 void fmeter_init(struct fmeter *fmp);             
286 void cpuset1_update_task_spread_flags(struct c    
287                                         struct    
288 void cpuset1_update_tasks_flags(struct cpuset     
289 void cpuset1_hotplug_update_tasks(struct cpuse    
290                             struct cpumask *ne    
291                             bool cpus_updated,    
292 int cpuset1_validate_change(struct cpuset *cur    
293 #else                                             
294 static inline void fmeter_init(struct fmeter *    
295 static inline void cpuset1_update_task_spread_    
296                                         struct    
297 static inline void cpuset1_update_tasks_flags(    
298 static inline void cpuset1_hotplug_update_task    
299                             struct cpumask *ne    
300                             bool cpus_updated,    
301 static inline int cpuset1_validate_change(stru    
302                                 struct cpuset     
303 #endif /* CONFIG_CPUSETS_V1 */                    
304                                                   
305 #endif /* __CPUSET_INTERNAL_H */                  
306                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php