From 1199f2512be2367ba1c97eafdbb56ffee30cb3e7 Mon Sep 17 00:00:00 2001 From: Anthony Barbier Date: Wed, 28 Jun 2017 17:15:05 +0100 Subject: [PATCH 1/2] Check if any big/LITTLE core is online before dereferencing an potentially empty list --- devlib/module/biglittle.py | 104 +++++++++++++++++++++++++++---------- 1 file changed, 78 insertions(+), 26 deletions(-) diff --git a/devlib/module/biglittle.py b/devlib/module/biglittle.py index eafcb0a..d9ed2bf 100644 --- a/devlib/module/biglittle.py +++ b/devlib/module/biglittle.py @@ -44,79 +44,131 @@ class BigLittleModule(Module): # cpufreq def list_bigs_frequencies(self): - return self.target.cpufreq.list_frequencies(self.bigs_online[0]) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + return self.target.cpufreq.list_frequencies(bigs_online[0]) def list_bigs_governors(self): - return self.target.cpufreq.list_governors(self.bigs_online[0]) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + return self.target.cpufreq.list_governors(bigs_online[0]) def list_bigs_governor_tunables(self): - return self.target.cpufreq.list_governor_tunables(self.bigs_online[0]) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + return self.target.cpufreq.list_governor_tunables(bigs_online[0]) def list_littles_frequencies(self): - return self.target.cpufreq.list_frequencies(self.littles_online[0]) + littles_online = self.littles_online + if len(littles_online) > 0: + return self.target.cpufreq.list_frequencies(littles_online[0]) def list_littles_governors(self): - return self.target.cpufreq.list_governors(self.littles_online[0]) + littles_online = self.littles_online + if len(littles_online) > 0: + return self.target.cpufreq.list_governors(littles_online[0]) def list_littles_governor_tunables(self): - return self.target.cpufreq.list_governor_tunables(self.littles_online[0]) + littles_online = self.littles_online + if len(littles_online) > 0: + return self.target.cpufreq.list_governor_tunables(littles_online[0]) def get_bigs_governor(self): - return self.target.cpufreq.get_governor(self.bigs_online[0]) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + return self.target.cpufreq.get_governor(bigs_online[0]) def get_bigs_governor_tunables(self): - return self.target.cpufreq.get_governor_tunables(self.bigs_online[0]) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + return self.target.cpufreq.get_governor_tunables(bigs_online[0]) def get_bigs_frequency(self): - return self.target.cpufreq.get_frequency(self.bigs_online[0]) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + return self.target.cpufreq.get_frequency(bigs_online[0]) def get_bigs_min_frequency(self): - return self.target.cpufreq.get_min_frequency(self.bigs_online[0]) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + return self.target.cpufreq.get_min_frequency(bigs_online[0]) def get_bigs_max_frequency(self): - return self.target.cpufreq.get_max_frequency(self.bigs_online[0]) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + return self.target.cpufreq.get_max_frequency(bigs_online[0]) def get_littles_governor(self): - return self.target.cpufreq.get_governor(self.littles_online[0]) + littles_online = self.littles_online + if len(littles_online) > 0: + return self.target.cpufreq.get_governor(littles_online[0]) def get_littles_governor_tunables(self): - return self.target.cpufreq.get_governor_tunables(self.littles_online[0]) + littles_online = self.littles_online + if len(littles_online) > 0: + return self.target.cpufreq.get_governor_tunables(littles_online[0]) def get_littles_frequency(self): - return self.target.cpufreq.get_frequency(self.littles_online[0]) + littles_online = self.littles_online + if len(littles_online) > 0: + return self.target.cpufreq.get_frequency(littles_online[0]) def get_littles_min_frequency(self): - return self.target.cpufreq.get_min_frequency(self.littles_online[0]) + littles_online = self.littles_online + if len(littles_online) > 0: + return self.target.cpufreq.get_min_frequency(littles_online[0]) def get_littles_max_frequency(self): - return self.target.cpufreq.get_max_frequency(self.littles_online[0]) + littles_online = self.littles_online + if len(littles_online) > 0: + return self.target.cpufreq.get_max_frequency(littles_online[0]) def set_bigs_governor(self, governor, **kwargs): - self.target.cpufreq.set_governor(self.bigs_online[0], governor, **kwargs) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + self.target.cpufreq.set_governor(bigs_online[0], governor, **kwargs) def set_bigs_governor_tunables(self, governor, **kwargs): - self.target.cpufreq.set_governor_tunables(self.bigs_online[0], governor, **kwargs) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + self.target.cpufreq.set_governor_tunables(bigs_online[0], governor, **kwargs) def set_bigs_frequency(self, frequency, exact=True): - self.target.cpufreq.set_frequency(self.bigs_online[0], frequency, exact) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + self.target.cpufreq.set_frequency(bigs_online[0], frequency, exact) def set_bigs_min_frequency(self, frequency, exact=True): - self.target.cpufreq.set_min_frequency(self.bigs_online[0], frequency, exact) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + self.target.cpufreq.set_min_frequency(bigs_online[0], frequency, exact) def set_bigs_max_frequency(self, frequency, exact=True): - self.target.cpufreq.set_max_frequency(self.bigs_online[0], frequency, exact) + bigs_online = self.bigs_online + if len(bigs_online) > 0: + self.target.cpufreq.set_max_frequency(bigs_online[0], frequency, exact) def set_littles_governor(self, governor, **kwargs): - self.target.cpufreq.set_governor(self.littles_online[0], governor, **kwargs) + littles_online = self.littles_online + if len(littles_online) > 0: + self.target.cpufreq.set_governor(littles_online[0], governor, **kwargs) def set_littles_governor_tunables(self, governor, **kwargs): - self.target.cpufreq.set_governor_tunables(self.littles_online[0], governor, **kwargs) + littles_online = self.littles_online + if len(littles_online) > 0: + self.target.cpufreq.set_governor_tunables(littles_online[0], governor, **kwargs) def set_littles_frequency(self, frequency, exact=True): - self.target.cpufreq.set_frequency(self.littles_online[0], frequency, exact) + littles_online = self.littles_online + if len(littles_online) > 0: + self.target.cpufreq.set_frequency(littles_online[0], frequency, exact) def set_littles_min_frequency(self, frequency, exact=True): - self.target.cpufreq.set_min_frequency(self.littles_online[0], frequency, exact) + littles_online = self.littles_online + if len(littles_online) > 0: + self.target.cpufreq.set_min_frequency(littles_online[0], frequency, exact) def set_littles_max_frequency(self, frequency, exact=True): - self.target.cpufreq.set_max_frequency(self.littles_online[0], frequency, exact) + littles_online = self.littles_online + if len(littles_online) > 0: + self.target.cpufreq.set_max_frequency(littles_online[0], frequency, exact) From 3660361df094dceefea3205b2da385dc964b0a38 Mon Sep 17 00:00:00 2001 From: Anthony Barbier Date: Fri, 30 Jun 2017 13:15:23 +0100 Subject: [PATCH 2/2] Raise a ValueError when trying to set a property of a type of core which is offline --- devlib/module/biglittle.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/devlib/module/biglittle.py b/devlib/module/biglittle.py index d9ed2bf..e353229 100644 --- a/devlib/module/biglittle.py +++ b/devlib/module/biglittle.py @@ -127,48 +127,68 @@ class BigLittleModule(Module): bigs_online = self.bigs_online if len(bigs_online) > 0: self.target.cpufreq.set_governor(bigs_online[0], governor, **kwargs) + else: + raise ValueError("All bigs appear to be offline") def set_bigs_governor_tunables(self, governor, **kwargs): bigs_online = self.bigs_online if len(bigs_online) > 0: self.target.cpufreq.set_governor_tunables(bigs_online[0], governor, **kwargs) + else: + raise ValueError("All bigs appear to be offline") def set_bigs_frequency(self, frequency, exact=True): bigs_online = self.bigs_online if len(bigs_online) > 0: self.target.cpufreq.set_frequency(bigs_online[0], frequency, exact) + else: + raise ValueError("All bigs appear to be offline") def set_bigs_min_frequency(self, frequency, exact=True): bigs_online = self.bigs_online if len(bigs_online) > 0: self.target.cpufreq.set_min_frequency(bigs_online[0], frequency, exact) + else: + raise ValueError("All bigs appear to be offline") def set_bigs_max_frequency(self, frequency, exact=True): bigs_online = self.bigs_online if len(bigs_online) > 0: self.target.cpufreq.set_max_frequency(bigs_online[0], frequency, exact) + else: + raise ValueError("All bigs appear to be offline") def set_littles_governor(self, governor, **kwargs): littles_online = self.littles_online if len(littles_online) > 0: self.target.cpufreq.set_governor(littles_online[0], governor, **kwargs) + else: + raise ValueError("All littles appear to be offline") def set_littles_governor_tunables(self, governor, **kwargs): littles_online = self.littles_online if len(littles_online) > 0: self.target.cpufreq.set_governor_tunables(littles_online[0], governor, **kwargs) + else: + raise ValueError("All littles appear to be offline") def set_littles_frequency(self, frequency, exact=True): littles_online = self.littles_online if len(littles_online) > 0: self.target.cpufreq.set_frequency(littles_online[0], frequency, exact) + else: + raise ValueError("All littles appear to be offline") def set_littles_min_frequency(self, frequency, exact=True): littles_online = self.littles_online if len(littles_online) > 0: self.target.cpufreq.set_min_frequency(littles_online[0], frequency, exact) + else: + raise ValueError("All littles appear to be offline") def set_littles_max_frequency(self, frequency, exact=True): littles_online = self.littles_online if len(littles_online) > 0: self.target.cpufreq.set_max_frequency(littles_online[0], frequency, exact) + else: + raise ValueError("All littles appear to be offline")