diff options
Diffstat (limited to 'devlib/module')
-rw-r--r-- | devlib/module/cgroups.py | 5 | ||||
-rw-r--r-- | devlib/module/cpufreq.py | 15 |
2 files changed, 19 insertions, 1 deletions
diff --git a/devlib/module/cgroups.py b/devlib/module/cgroups.py index bfe2785..472304e 100644 --- a/devlib/module/cgroups.py +++ b/devlib/module/cgroups.py @@ -287,6 +287,11 @@ class CGroup(object): logging.debug('Tasks: %s', task_ids) return map(int, task_ids) + # Used to insert fake cgroup attach events to know existing cgroup assignments + def trace_cgroup_tasks(self): + exec_cmd = "cgroup_trace_attach_task {} {} {}".format(self.controller.hid, self.directory, self.tasks_file) + self.target._execute_util(exec_cmd) + def add_task(self, tid): self.target.write_value(self.tasks_file, tid, verify=False) diff --git a/devlib/module/cpufreq.py b/devlib/module/cpufreq.py index d72b8fd..e18d95b 100644 --- a/devlib/module/cpufreq.py +++ b/devlib/module/cpufreq.py @@ -382,7 +382,9 @@ class CpufreqModule(Module): 'cpufreq_set_all_governors {}'.format(governor), as_root=True) except TargetError as e: - if "echo: I/O error" in str(e): + if ("echo: I/O error" in str(e) or + "write error: Invalid argument" in str(e)): + cpus_unsupported = [c for c in self.target.list_online_cpus() if governor not in self.list_governors(c)] raise TargetError("Governor {} unsupported for CPUs {}".format( @@ -421,3 +423,14 @@ class CpufreqModule(Module): sysfile = '/sys/devices/system/cpu/{}/cpufreq/affected_cpus'.format(cpu) return [int(c) for c in self.target.read_value(sysfile).split()] + + def iter_domains(self): + """ + Iterate over the frequency domains in the system + """ + cpus = set(range(self.target.number_of_cpus)) + while cpus: + cpu = iter(cpus).next() + domain = self.target.cpufreq.get_domain_cpus(cpu) + yield domain + cpus = cpus.difference(domain) |