mirror of
				https://github.com/ARM-software/devlib.git
				synced 2025-11-04 07:51:21 +00:00 
			
		
		
		
	Merge pull request #159 from qperret/fix/cgroup-freeze
module/cgroups: robustify task freezer
This commit is contained in:
		@@ -177,6 +177,23 @@ cgroups_tasks_in() {
 | 
				
			|||||||
	exit 0
 | 
						exit 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cgroups_freezer_set_state() {
 | 
				
			||||||
 | 
					    STATE=${1}
 | 
				
			||||||
 | 
					    SYSFS_ENTRY=${2}/freezer.state
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Set the state of the freezer
 | 
				
			||||||
 | 
					    echo $STATE > $SYSFS_ENTRY
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # And check it applied cleanly
 | 
				
			||||||
 | 
					    for i in `seq 1 10`; do
 | 
				
			||||||
 | 
					        [ $($CAT $SYSFS_ENTRY) = $STATE ] && exit 0
 | 
				
			||||||
 | 
					        sleep 1
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # We have an issue
 | 
				
			||||||
 | 
					    echo "ERROR: Freezer stalled while changing state to \"$STATE\"." >&2
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
# Main Function Dispatcher
 | 
					# Main Function Dispatcher
 | 
				
			||||||
@@ -213,6 +230,9 @@ cgroups_tasks_move)
 | 
				
			|||||||
cgroups_tasks_in)
 | 
					cgroups_tasks_in)
 | 
				
			||||||
	cgroups_tasks_in $*
 | 
						cgroups_tasks_in $*
 | 
				
			||||||
	;;
 | 
						;;
 | 
				
			||||||
 | 
					cgroups_freezer_set_state)
 | 
				
			||||||
 | 
						cgroups_freezer_set_state $*
 | 
				
			||||||
 | 
						;;
 | 
				
			||||||
ftrace_get_function_stats)
 | 
					ftrace_get_function_stats)
 | 
				
			||||||
    ftrace_get_function_stats
 | 
					    ftrace_get_function_stats
 | 
				
			||||||
    ;;
 | 
					    ;;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -466,11 +466,11 @@ class CgroupsModule(Module):
 | 
				
			|||||||
        if freezer is None:
 | 
					        if freezer is None:
 | 
				
			||||||
            raise RuntimeError('freezer cgroup controller not present')
 | 
					            raise RuntimeError('freezer cgroup controller not present')
 | 
				
			||||||
        freezer_cg = freezer.cgroup('/DEVLIB_FREEZER')
 | 
					        freezer_cg = freezer.cgroup('/DEVLIB_FREEZER')
 | 
				
			||||||
        thawed_cg = freezer.cgroup('/')
 | 
					        cmd = 'cgroups_freezer_set_state {{}} {}'.format(freezer_cg.directory)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if thaw:
 | 
					        if thaw:
 | 
				
			||||||
            # Restart froozen tasks
 | 
					            # Restart froozen tasks
 | 
				
			||||||
            freezer_cg.set(state='THAWED')
 | 
					            freezer.target._execute_util(cmd.format('THAWED'), as_root=True)
 | 
				
			||||||
            # Remove all tasks from freezer
 | 
					            # Remove all tasks from freezer
 | 
				
			||||||
            freezer.move_all_tasks_to('/')
 | 
					            freezer.move_all_tasks_to('/')
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
@@ -482,7 +482,7 @@ class CgroupsModule(Module):
 | 
				
			|||||||
        tasks = freezer.tasks('/')
 | 
					        tasks = freezer.tasks('/')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Freeze all tasks
 | 
					        # Freeze all tasks
 | 
				
			||||||
        freezer_cg.set(state='FROZEN')
 | 
					        freezer.target._execute_util(cmd.format('FROZEN'), as_root=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return tasks
 | 
					        return tasks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user