the pandaboard.
aboutsummaryrefslogblamecommitdiffstats
path: root/kernel/cpuset.c
blob: f76db9dcaa05e592f3138f5389ae4c22827b58d9 (plain) (tree)
1
2
3
4
5
6
7
8





                                                                 
                                                  
                                  


                                                      
  
                                     
                                            
                                         
                                                     

                                                                 





                                                                              











                            
                            
                     
                         




                          
                           

                           
                           
                       








                              
                        

                            
 
  







                                                                



                                                           
                                    
 
                                       


                                   








                                                                    
               

                                       
                                                                            
                                                                             

                                                                           
                                                       




                                                               


                                                                    


                                                          
 


                                     

                                                 

  












                                                                        



                                   
 



                                       
                        
                          
                              

                       




                                                           
                                                      



                                                           
                                                      

 




                                                          




                                                                

                                                            
                                                       

 









                                                         
  
                                                          



                                                                  
                                                                           



                                                                       
                                                                    


                                                                     
  
                                                                        
                                      
   
                                  


                                                                     

  
  






                                                                      
  
                                                              
                                                                
                                                                        

                                                                   
                                                                     
                                                                 

                                                                     

                                                                     
                                                                       


                                                             
                                                                  




                                                                   
                                                                         


                                                                     

                                                                  

   
                                    
 
  










                                                                        
                                                                    
                                                               

                                               


                                                                
 










                                                                            




                                                 

  
  
                                                               








                                                                   
                                 

   

                                                          
 
                                                                            

                                
                                                                      
            

                                                            



                                                                



                                                                   

                                                                   
                                 
  
                                 



                                                                             

                                                                    

                                

                                                                    
            

                                                                      

 





                                                                     
  



                                                              
                                                           

                                                               

                                                                  
  

                                                                  
                                                        













                                                                   




                                                                   

   
                                          
 
                               
                                          
                          
 


                                                           
 
                                                                
                                            
                               
                                                                           

                                                                  







                                                      
                                 
                                              
                                                          







                                                                  
                                                                   



                                                                           
                                                                   




                                                                 





                                                                 












                                                                   







                                                   
                                              


                     






                                                                       
                     













                                                                                
                            


                                                              

                                                                        



                                                         
                               

                         

                          



                                                      



                                                                     

                                                                        

                                                                       
                                                                             






                                                                           

                                                                              
                                                         




                                                       


                 
  
                                               

                                                       

                                                              
                                                                    

 


                                                                     




                                                                  













                                                                          
                                                    











                                                                               
  








                                                                        
  
                                                                        






                                                                  
                                        

                                           
                                                                      






























                                                                       

                                                           
                                                              
 
                                                                    



                                                                         
                                                                             
                                                                             
                                                                       
                                                                           
 
                    
                     
                   


                                                                              
                                                           
                          

                                  


                                                                              
                                                                    
                 
                                                            


                          

         




                                                                  

                                             

                                                                       
 


                                                                     
                                                    

                                 






                                                                              
                                        

                                 
 

                                                                               
                                                              





























                                                                      



                                                                      
                                                           
                  
                          




                                                                       
                                                                              


                                              
                                   

                                















                                                                      
                         

                                 
 
                                  





                                                        
                                                                    




                                                                                  
                         
                 
                        


                               


                   






                                                              

















                                                                    
                             

                  
                          








                                                     
                          
 
 






















                                                                          
                                                           













                                                               

 




                                                                              
                                                                     


                                                                               
   

                                                           
 
                                                 

                                                             
 










                                                                              

                                                              
 
                                                                         


   

                                                                             
                                                                      





                                                                        

                                                                             
   
                                                                          

                                   



                                                  

                                 


   



                                                                                

                                                                    
 
                             

                             
 



                                                                           
          
                                                                       


                                                                         
           
                    
                                                     
                
                                                                   

                                      
 
                                                                            
                                       
         
                                              

                              
 
                                                     
                                                                   
                         
 



                                                               
                                                          
 
                                    
                                                              
                                      
 

                                                                   
                               
           


                                        
 
                             
                                              
                 

 
  






                                                                       
                                                                 
                                                                     

                                                                    
                        































                                                                             
                                                               


                                      

                                  








                                                                             
 
                              

                                   
                    
                  
                              
                   
 
                                                                              

                                                                           
                                                                               









                                                                  
                                                                        



                                                                         
                                                                        
                                                                
                                                                        
                                                                       





                                                                          

                                                             




                                                                         
                              
                 



                                    

                                             
                                    





                                                                      
                                                                      

                                                                       
                                                                 

                                                                      
                                                                      
           
                                        



                                                      
                            
                                                                         


                          
                                                                          
                       
                                    
                   
     


                      












                                                                     

                                                                     
 









                                                                    






                                                                            
                                                   
                
                                                                    


                                  
                                                        



                                                            
                                                         


                                                                      
                                              



                                    
                                                 







                                                       




                                                        
                                                                
 

                                         


                                             

                                                       
                                                      




                 
  
                                                                     


                                                         
  
                               

   

                                                                
 
                               
                
                                 
 



                                         
                       
                                              
            
                                                
 
                                           
                    
                         
 
                                                            
                                                                
 
                                    
                                   
                                      
 
                                                                          
                                              
 


                                   

 
  
                                                      































































































                                                                             


                                 
                                                                             

                                                                          
 
                                            
                    
 
                                                                             
                               
 
                                           
                                            
                                                                         
                                      
                                              
         
 
                                                                        
 
 



                                                                      



                                                  
                
 
                                
                                                             

                                            
                                                       

                                              
                                                     

                       
 

                                   


                                        
                                          
                                                          

                          




                                                                        
                            



                           
                          
                                
                                      

                                     

                         

                    





                                                                             
                                          
                               

                       
                                
                                                                

                                
                                                                
                      


                                                               
                                     
                                                                     
                      
                                 
                                                                 
                      
                                          
                                                       



                                  
                              
                                                              
                                                               

                              
                                                              
                                                               
                      

                                 
                      
         
                        


                      





                                                                             
                                          
                               
 











                                                            
  





                                                                        

                                            



                                          



                                         

                               
                                                          

                          
                                                           




                                 

                                   




                        












                                                                        
                
 
                                    
                                                                   
                                      
 
                   





                                                                
                                    
                                
                                      



                                                         




                                                                   
 
                                            



                                              
 
                                                             










                                                   




                                 
 
                                                                            




                                       








                                                                   

                                           














                                                      


                                             
 
 









                                                                   


                                            

 




                                                             



                                                

                                                      





                                                

                                                           

















                                              






                                              







                                                   

                                              





























                                                         

  

                                                    

                                      


                                                
                                                                         


                

                                                                   
                           
                                                            
                          
                                               

                                                                    


  












                                                               

                                                                      
















                                                                 
                                                                



               
                                       

                                                                 

   


                                                 

                          
                              
 





                                                                      

                                              
                                        



                                                                
 
                                          
                      



                                                    
                                                   
                                        
                                      
                                                       
                                 
                                    

                            
                            
                         

 
  

                                                                
                                           

   
                                                                         
 
                                            
 
                                          

                                      
                                                          
 
                            
                                           
                  

 


                                      
                                  







                                        







                                                       

                                                            
                                                              


                 
 







                                                                          
                    
 
                                                
                                              
 
                                        
                                                              
                                                          
                                           
 

                                                   

                           


                                                         
                              
                 

 







                                                                              

                                                            











                                                                       

                                                                    













                                                                               
                                          



                                                               
  
                                                                

                                                                   

                                                                   
  

                                                                    
   



                                                           




                                                                  

                                                  
 




                                                              
                                                     
                                                          
                                        







                                                                
                                                                   









                                                                        
                                                       
 
                         

                                                                 
                            
                           
 

                                                                     
                                     
                                                                         




                                                                               

                                                                      
                                                                        


                                                                               

                                           
                                                                    
                                            

                                                               

                                                                            


                                                                  
                                                      
                                                   
                                                         
                      
                                                       

                                                            



         




                                                                  

                                                           


                                                                
   
                                                                     
                                                                      
 
                                       
                             

                  
                        



                               
                      
 
                
                                   
         
 
                      
                                                               






                                                     
                         
 
 
                            
  
                                                                    

                                                                      
   

                                                                 
 
                      










                                                                     
                        
                         


      







                                                                      
                                                               
                                                             
 
                                                     
                                                               


                                                            


   

                                                                          
                                                                          
  
                                                                    




                                                                       
                                                                        
 
                                    
                                               
                                      



                                                                             
                                           
    
                                                                               
 
                       
                                                   
                         



                                           
                                            

 
   




                                                                          
                                                                             






                                                       
                                    
                       
                                                   
                         
                                      




                    

                                                                               
  
                                                                         
   
                                                            
 
                                                                  

 
  



                                                                     
   
                                                                              
 
                                                                            



                                
   
                                                                          
                                       
                                     
  

                                                               

                                                                 
                                                        

                                                                    

                 













                                                                     
                                                               

                                                                
                                                                 
                                                
  






                                                                      
  
                                                                  


                                                                   





                                                                     

                                                                    
                                  
                                                                 
                                                                   

        
                                                                            

                                                                     
   
 
                                                                  
 

                                                                      
                                                                              
 
                                                          
                         
                              
                                                     

                                                    





                                                                            


                                                                            


                                                                         
                                                                         
                                    
 
                           
                                                         

                             
                                                     
                                      
                       

 






                                                                          


                                                                     






















                                                                    





                                                                            


                 
   

                                                          
                                                           
                                                               
                                                                 

                                                              
                                       



                      
                                    









                                                        
                                      


   





































                                                                                  







                                                                                

    

                                                                  
 
                                                                        

 






















                                                                         
  




                                                            
                                                 




















                                                                   
                           
                                                    


                             
                             
  


                                            

                                                                    
                                                                        
             
   
                                                               
 
                        

                                
                                        
                   
 
                         

                                             


                         

                                             

                              
 
                         


                                                          
                       
                                

                          
           
                        

                             
                   
    




                                                              

                                                        

 
                                                       




                                         
                                   

                                                                         


                                                                             
                                            
                            
                                              
                                                 
                            
                                         
                                             
                            
                                              
                                                  
                            
 
/*
 *  kernel/cpuset.c
 *
 *  Processor and Memory placement constraints for sets of tasks.
 *
 *  Copyright (C) 2003 BULL SA.
 *  Copyright (C) 2004-2007 Silicon Graphics, Inc.
 *  Copyright (C) 2006 Google, Inc
 *
 *  Portions derived from Patrick Mochel's sysfs code.
 *  sysfs is Copyright (c) 2001-3 Patrick Mochel
 *
 *  2003-10-10 Written by Simon Derr.
 *  2003-10-22 Updates by Stephen Hemminger.
 *  2004 May-July Rework by Paul Jackson.
 *  2006 Rework by Paul Menage to use generic cgroups
 *  2008 Rework of the scheduler domains and CPU hotplug handling
 *       by Max Krasnyansky
 *
 *  This file is subject to the terms and conditions of the GNU General Public
 *  License.  See the file COPYING in the main directory of the Linux
 *  distribution for more details.
 */

#include <linux/cpu.h>
#include <linux/cpumask.h>
#include <linux/cpuset.h>
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/file.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/kmod.h>
#include <linux/list.h>
#include <linux/mempolicy.h>
#include <linux/mm.h>
#include <linux/memory.h>
#include <linux/module.h>
#include <linux/mount.h>
#include <linux/namei.h>
#include <linux/pagemap.h>
#include <linux/proc_fs.h>
#include <linux/rcupdate.h>
#include <linux/sched.h>
#include <linux/seq_file.h>
#include <linux/security.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/stat.h>
#include <linux/string.h>
#include <linux/time.h>
#include <linux/backing-dev.h>
#include <linux/sort.h>

#include <asm/uaccess.h>
#include <asm/atomic.h>
#include <linux/mutex.h>
#include <linux/workqueue.h>
#include <linux/cgroup.h>

/*
 * Workqueue for cpuset related tasks.
 *
 * Using kevent workqueue may cause deadlock when memory_migrate
 * is set. So we create a separate workqueue thread for cpuset.
 */
static struct workqueue_struct *cpuset_wq;

/*
 * Tracks how many cpusets are currently defined in system.
 * When there is only one cpuset (the root cpuset) we can
 * short circuit some hooks.
 */
int number_of_cpusets __read_mostly;

/* Forward declare cgroup structures */
struct cgroup_subsys cpuset_subsys;
struct cpuset;

/* See "Frequency meter" comments, below. */

struct fmeter {
	int cnt;		/* unprocessed events count */
	int val;		/* most recent output value */
	time_t time;		/* clock (secs) when val computed */
	spinlock_t lock;	/* guards read or write of above */
};

struct cpuset {
	struct cgroup_subsys_state css;

	unsigned long flags;		/* "unsigned long" so bitops work */
	cpumask_var_t cpus_allowed;	/* CPUs allowed to tasks in cpuset */
	nodemask_t mems_allowed;	/* Memory Nodes allowed to tasks */

	struct cpuset *parent;		/* my parent */

	/*
	 * Copy of global cpuset_mems_generation as of the most
	 * recent time this cpuset changed its mems_allowed.
	 */
	int mems_generation;

	struct fmeter fmeter;		/* memory_pressure filter */

	/* partition number for rebuild_sched_domains() */
	int pn;

	/* for custom sched domain */
	int relax_domain_level;

	/* used for walking a cpuset heirarchy */
	struct list_head stack_list;
};

/* Retrieve the cpuset for a cgroup */
static inline struct cpuset *cgroup_cs(struct cgroup *cont)
{
	return container_of(cgroup_subsys_state(cont, cpuset_subsys_id),
			    struct cpuset, css);
}

/* Retrieve the cpuset for a task */
static inline struct cpuset *task_cs(struct task_struct *task)
{
	return container_of(task_subsys_state(task, cpuset_subsys_id),
			    struct cpuset, css);
}
struct cpuset_hotplug_scanner {
	struct cgroup_scanner scan;
	struct cgroup *to;
};

/* bits in struct cpuset flags field */
typedef enum {
	CS_CPU_EXCLUSIVE,
	CS_MEM_EXCLUSIVE,
	CS_MEM_HARDWALL,
	CS_MEMORY_MIGRATE,
	CS_SCHED_LOAD_BALANCE,
	CS_SPREAD_PAGE,
	CS_SPREAD_SLAB,
} cpuset_flagbits_t;

/* convenient tests for these bits */