The following patch set is another iteration of the implementation of mixin classes to control CPU features - idle states and turboboost.
Differences to v2: * since the host_list properties are equivalent for all of the recipes that inherit from BaseEnrtRecipe, the definition of these properties is moved to the BaseEnrtRecipe
Differences to v1: * mixin classes now inherit from BaseSubConfigMixin instead of PerfTestTweakMixin * added disable_turboboost_host_list and disable_idlestates properties to specify on which hosts the CPU feature should be disabled * added documentation for both mixins
Jan Tluka (8): Recipes.ENRT.PerfTestMixins.SctpFirewallPerfTestMixin: move _get_flow_measurement_from_config() to base class Recipes.ENRT.ConfigMixins: add DisableIdleStatesMixin Recipes.ENRT.ConfigMixins: add DisableTurboboostMixin Recipes.ENRT.PerfTestMixins: add CommonPerfTestTweakMixin Recipes.ENRT.BaseEnrtRecipe: inherit from CommonPerfTestTweakMixin Recipes.ENRT.BaseEnrtRecipe: add DisableTurboboost and DisableIdleStates mixins docs: add DisableTurboboostMixin documentation docs: add DisableIdleStatesMixin documentation
.../disable_idlestates_mixin.rst | 6 ++ .../disable_turboboost_mixin.rst | 6 ++ docs/source/config_mixins.rst | 2 + lnst/Recipes/ENRT/BaseEnrtRecipe.py | 40 ++++++++++- .../ConfigMixins/DisableIdleStatesMixin.py | 57 +++++++++++++++ .../ConfigMixins/DisableTurboboostMixin.py | 71 +++++++++++++++++++ .../PerfTestMixins/BasePerfTestTweakMixin.py | 6 ++ .../CommonPerfTestTweakMixin.py | 6 ++ .../SctpFirewallPerfTestMixin.py | 6 -- lnst/Recipes/ENRT/PerfTestMixins/__init__.py | 1 + 10 files changed, 193 insertions(+), 8 deletions(-) create mode 100644 docs/source/config_mixin_classes/disable_idlestates_mixin.rst create mode 100644 docs/source/config_mixin_classes/disable_turboboost_mixin.rst create mode 100644 lnst/Recipes/ENRT/ConfigMixins/DisableIdleStatesMixin.py create mode 100644 lnst/Recipes/ENRT/ConfigMixins/DisableTurboboostMixin.py create mode 100644 lnst/Recipes/ENRT/PerfTestMixins/CommonPerfTestTweakMixin.py
This method will be reused by other mixin classes.
Signed-off-by: Jan Tluka jtluka@redhat.com --- lnst/Recipes/ENRT/PerfTestMixins/BasePerfTestTweakMixin.py | 6 ++++++ .../ENRT/PerfTestMixins/SctpFirewallPerfTestMixin.py | 6 ------ 2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/lnst/Recipes/ENRT/PerfTestMixins/BasePerfTestTweakMixin.py b/lnst/Recipes/ENRT/PerfTestMixins/BasePerfTestTweakMixin.py index 380fc72e..5e008a68 100644 --- a/lnst/Recipes/ENRT/PerfTestMixins/BasePerfTestTweakMixin.py +++ b/lnst/Recipes/ENRT/PerfTestMixins/BasePerfTestTweakMixin.py @@ -1,3 +1,5 @@ +from lnst.RecipeCommon.Perf.Measurements.BaseFlowMeasurement import BaseFlowMeasurement + class BasePerfTestTweakMixin(object): """ This is a base class that defines common API for specific *perf test* @@ -13,3 +15,7 @@ class BasePerfTestTweakMixin(object): def remove_perf_test_tweak(self, perf_config): # TODO: check if anything left in the perf_config.perf_test_tweak_config pass + + def _get_flow_measurement_from_config(self, perf_config): + flow_measurements = [ m for m in perf_config.measurements if isinstance(m, BaseFlowMeasurement) ] + return flow_measurements[0] diff --git a/lnst/Recipes/ENRT/PerfTestMixins/SctpFirewallPerfTestMixin.py b/lnst/Recipes/ENRT/PerfTestMixins/SctpFirewallPerfTestMixin.py index 6c6cc416..c0520405 100644 --- a/lnst/Recipes/ENRT/PerfTestMixins/SctpFirewallPerfTestMixin.py +++ b/lnst/Recipes/ENRT/PerfTestMixins/SctpFirewallPerfTestMixin.py @@ -1,13 +1,7 @@ from lnst.Controller.RecipeResults import ResultLevel from lnst.Recipes.ENRT.PerfTestMixins import BasePerfTestTweakMixin -from lnst.RecipeCommon.Perf.Measurements.BaseFlowMeasurement import BaseFlowMeasurement
class SctpFirewallPerfTestMixin(BasePerfTestTweakMixin): - - def _get_flow_measurement_from_config(self, perf_config): - flow_measurements = [ m for m in perf_config.measurements if isinstance(m, BaseFlowMeasurement) ] - return flow_measurements[0] - def apply_perf_test_tweak(self, perf_config): super().apply_perf_test_tweak(perf_config)
This mixin class extends BaseEnrtRecipe with ability to control the CPU idle states before running the tests.
The class adds 'minimal_idlestates_latency' parameter that is passed as the latency argument (-D) of the 'cpupower idle-set' that will disable all idle states with an equal or higher latency than the specified value.
If the value is 0 this will effectively disable all CPU idle states.
Signed-off-by: Jan Tluka jtluka@redhat.com --- .../ConfigMixins/DisableIdleStatesMixin.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 lnst/Recipes/ENRT/ConfigMixins/DisableIdleStatesMixin.py
diff --git a/lnst/Recipes/ENRT/ConfigMixins/DisableIdleStatesMixin.py b/lnst/Recipes/ENRT/ConfigMixins/DisableIdleStatesMixin.py new file mode 100644 index 00000000..ca45dfb3 --- /dev/null +++ b/lnst/Recipes/ENRT/ConfigMixins/DisableIdleStatesMixin.py @@ -0,0 +1,42 @@ +from lnst.Common.Parameters import IntParam +from lnst.Recipes.ENRT.ConfigMixins import BaseSubConfigMixin + +class DisableIdleStatesMixin(BaseSubConfigMixin): + minimal_idlestates_latency = IntParam() + + @property + def disable_idlestates_host_list(self): + """ + The value of this property is a list of hosts for which the CPU idle + states should be turned off. Derived class can override this property. + """ + return [] + + def apply_sub_configuration(self, config): + super().apply_sub_configuration(config) + + latency = getattr(self.params, "minimal_idlestates_latency", None) + if latency is not None: + for host in self.disable_idlestates_host_list: + # TODO: save previous state + host.run("cpupower idle-set -D {}".format(latency)) + + def generate_sub_configuration_description(self, config): + description = super().generate_sub_configuration_description(config) + + latency = getattr(self.params, "minimal_idlestates_latency", None) + if latency is not None: + for host in self.disable_idlestates_host_list: + description.append("disabled idle states with latency higher than "\ + "{} on host {}".format(latency, host.hostid) + ) + else: + description.append("configuration of idle states skipped") + + return description + + def remove_sub_configuration(self, config): + for host in self.disable_idlestates_host_list: + host.run("cpupower idle-set -E") + + return super().remove_sub_configuration(config)
This mixin class provides recipe parameter 'disable_turboboost' that can be used to disable CPU turboboost before running the tests.
It uses intel_pstate sysfs interface to disable the CPU feature and so it is usable only by systems with Intel CPUs.
To use it pass 'disable_turboost=True' parameter when creating an instance of BaseEnrtRecipe.
Signed-off-by: Jan Tluka jtluka@redhat.com --- .../ConfigMixins/DisableTurboboostMixin.py | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 lnst/Recipes/ENRT/ConfigMixins/DisableTurboboostMixin.py
diff --git a/lnst/Recipes/ENRT/ConfigMixins/DisableTurboboostMixin.py b/lnst/Recipes/ENRT/ConfigMixins/DisableTurboboostMixin.py new file mode 100644 index 00000000..dc3c0d62 --- /dev/null +++ b/lnst/Recipes/ENRT/ConfigMixins/DisableTurboboostMixin.py @@ -0,0 +1,54 @@ +from lnst.Common.Parameters import BoolParam +from lnst.Controller.RecipeResults import ResultLevel +from lnst.Recipes.ENRT.ConfigMixins import BaseSubConfigMixin + +class DisableTurboboostMixin(BaseSubConfigMixin): + disable_turboboost = BoolParam(default=False) + + @property + def disable_turboboost_host_list(self): + """ + The value of this property is a list of hosts for which the CPU turboboost + should be turned off. Derived class can override this property. + """ + return [] + + def _is_turboboost_supported(self, host): + file_check = host.run( + "ls /sys/devices/system/cpu/intel_pstate/no_turbo", + job_level=ResultLevel.DEBUG) + return file_check.passed + + def apply_sub_configuration(self, config): + super().apply_sub_configuration(config) + + if self.params.disable_turboboost: + for host in self.disable_turboboost_host_list: + if self._is_turboboost_supported(host): + # TODO: save previous state + host.run("echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo") + + def generate_sub_configuration_description(self, config): + description = super().generate_sub_configuration_description(config) + + if self.params.disable_turboboost: + for host in self.disable_turboboost_host_list: + if self._is_turboboost_supported(host): + description.append("turboboost disabled through intel_pstate on {}".format(host.hostid)) + else: + description.append("warning: user requested to disable turboboost "\ + "through intel_pstate but the sysfs file is not available "\ + "on host {}".format(host.hostid)) + else: + description.append("configuration of turboboost through intel_pstate skipped") + + return description + + def remove_sub_configuration(self, config): + if self.params.disable_turboboost: + for host in self.disable_turboboost_host_list: + if self._is_turboboost_supported(host): + # TODO: restore previous state + host.run("echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo") + + return super().remove_sub_configuration(config)
This class currently inherits from SctpFirewallPerfTestMixin only but can be extended in the future with other mixin classes for a user convenience.
Signed-off-by: Jan Tluka jtluka@redhat.com --- .../Recipes/ENRT/PerfTestMixins/CommonPerfTestTweakMixin.py | 6 ++++++ lnst/Recipes/ENRT/PerfTestMixins/__init__.py | 1 + 2 files changed, 7 insertions(+) create mode 100644 lnst/Recipes/ENRT/PerfTestMixins/CommonPerfTestTweakMixin.py
diff --git a/lnst/Recipes/ENRT/PerfTestMixins/CommonPerfTestTweakMixin.py b/lnst/Recipes/ENRT/PerfTestMixins/CommonPerfTestTweakMixin.py new file mode 100644 index 00000000..7606ef90 --- /dev/null +++ b/lnst/Recipes/ENRT/PerfTestMixins/CommonPerfTestTweakMixin.py @@ -0,0 +1,6 @@ +from lnst.Recipes.ENRT.PerfTestMixins import ( + SctpFirewallPerfTestMixin, + ) + +class CommonPerfTestTweakMixin(SctpFirewallPerfTestMixin): + pass diff --git a/lnst/Recipes/ENRT/PerfTestMixins/__init__.py b/lnst/Recipes/ENRT/PerfTestMixins/__init__.py index 9f320118..8a109ad0 100644 --- a/lnst/Recipes/ENRT/PerfTestMixins/__init__.py +++ b/lnst/Recipes/ENRT/PerfTestMixins/__init__.py @@ -1,2 +1,3 @@ from lnst.Recipes.ENRT.PerfTestMixins.BasePerfTestTweakMixin import BasePerfTestTweakMixin from lnst.Recipes.ENRT.PerfTestMixins.SctpFirewallPerfTestMixin import SctpFirewallPerfTestMixin +from lnst.Recipes.ENRT.PerfTestMixins.CommonPerfTestTweakMixin import CommonPerfTestTweakMixin
SctpFirewallPerfTest mixin is replaced with CommonPerfTestTweakMixin to include additional mixins in much simpler way.
Signed-off-by: Jan Tluka jtluka@redhat.com --- lnst/Recipes/ENRT/BaseEnrtRecipe.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lnst/Recipes/ENRT/BaseEnrtRecipe.py b/lnst/Recipes/ENRT/BaseEnrtRecipe.py index 4d0c93c8..a5296e94 100644 --- a/lnst/Recipes/ENRT/BaseEnrtRecipe.py +++ b/lnst/Recipes/ENRT/BaseEnrtRecipe.py @@ -13,7 +13,7 @@ from lnst.Common.Parameters import ( from lnst.Common.IpAddress import AF_INET, AF_INET6
from lnst.Recipes.ENRT.ConfigMixins.BaseSubConfigMixin import BaseSubConfigMixin -from lnst.Recipes.ENRT.PerfTestMixins import SctpFirewallPerfTestMixin +from lnst.Recipes.ENRT.PerfTestMixins import CommonPerfTestTweakMixin
from lnst.RecipeCommon.Ping.Recipe import PingTestAndEvaluate, PingConf from lnst.RecipeCommon.Perf.Recipe import Recipe as PerfRecipe @@ -33,7 +33,7 @@ class EnrtConfiguration(object): """ pass
-class BaseEnrtRecipe(SctpFirewallPerfTestMixin, BaseSubConfigMixin, +class BaseEnrtRecipe(CommonPerfTestTweakMixin, BaseSubConfigMixin, PingTestAndEvaluate, PerfRecipe): """Base Recipe class for the ENRT recipe package
All of the tests that inherit from BaseEnrtRecipe will make use of these mixins so instead of adding them to individual recipes they are included in the base class.
To control the behaviour on a specific recipe level the recipes can override the disable_turboboost_host_list and disable_idlestates_host_list properties and relevant mixin recipe parameters.
Signed-off-by: Jan Tluka jtluka@redhat.com --- lnst/Recipes/ENRT/BaseEnrtRecipe.py | 38 ++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/lnst/Recipes/ENRT/BaseEnrtRecipe.py b/lnst/Recipes/ENRT/BaseEnrtRecipe.py index a5296e94..d629b726 100644 --- a/lnst/Recipes/ENRT/BaseEnrtRecipe.py +++ b/lnst/Recipes/ENRT/BaseEnrtRecipe.py @@ -14,6 +14,10 @@ from lnst.Common.IpAddress import AF_INET, AF_INET6
from lnst.Recipes.ENRT.ConfigMixins.BaseSubConfigMixin import BaseSubConfigMixin from lnst.Recipes.ENRT.PerfTestMixins import CommonPerfTestTweakMixin +from lnst.Recipes.ENRT.ConfigMixins.DisableTurboboostMixin import ( + DisableTurboboostMixin) +from lnst.Recipes.ENRT.ConfigMixins.DisableIdleStatesMixin import ( + DisableIdleStatesMixin)
from lnst.RecipeCommon.Ping.Recipe import PingTestAndEvaluate, PingConf from lnst.RecipeCommon.Perf.Recipe import Recipe as PerfRecipe @@ -33,7 +37,9 @@ class EnrtConfiguration(object): """ pass
-class BaseEnrtRecipe(CommonPerfTestTweakMixin, BaseSubConfigMixin, +class BaseEnrtRecipe(CommonPerfTestTweakMixin, + DisableTurboboostMixin, DisableIdleStatesMixin, + BaseSubConfigMixin, PingTestAndEvaluate, PerfRecipe): """Base Recipe class for the ENRT recipe package
@@ -582,3 +588,33 @@ class BaseEnrtRecipe(CommonPerfTestTweakMixin, BaseSubConfigMixin, interval = pconf.ping_interval, size = pconf.ping_psize, ) + + @property + def disable_turboboost_host_list(self): + """ + The `disable_turboboost_host_list` property value is the list of all + matched hosts for the recipe. If a specific recipe needs to change + this it should override the :any:`baremetal_hosts` property. + + For detailed explanation of this property see + :any:`DisableTurboboostMixin` and + :any:`DisableTurboboostMixin.disable_turboboost_host_list`. + """ + return self.baremetal_hosts + + @property + def disable_idlestates_host_list(self): + """ + The `disable_idlestates_host_list` property value is the list of all + matched hosts for the recipe. If a specific recipe needs to change + this it should override the :any:`baremetal_hosts` property. + + For detailed explanation of this property see + :any:`DisableIdleStatesMixin` and + :any:`DisableIdleStatesMixin.disable_idlestates_host_list`. + """ + return self.baremetal_hosts + + @property + def baremetal_hosts(self): + return self.matched
Signed-off-by: Jan Tluka jtluka@redhat.com --- .../disable_turboboost_mixin.rst | 6 ++++++ docs/source/config_mixins.rst | 1 + .../ENRT/ConfigMixins/DisableTurboboostMixin.py | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 docs/source/config_mixin_classes/disable_turboboost_mixin.rst
diff --git a/docs/source/config_mixin_classes/disable_turboboost_mixin.rst b/docs/source/config_mixin_classes/disable_turboboost_mixin.rst new file mode 100644 index 00000000..4ddfc99f --- /dev/null +++ b/docs/source/config_mixin_classes/disable_turboboost_mixin.rst @@ -0,0 +1,6 @@ +DisableTurboboostMixin +====================== + +.. autoclass:: lnst.Recipes.ENRT.ConfigMixins.DisableTurboboostMixin.DisableTurboboostMixin + :members: + :show-inheritance: diff --git a/docs/source/config_mixins.rst b/docs/source/config_mixins.rst index b766a0cf..53451190 100644 --- a/docs/source/config_mixins.rst +++ b/docs/source/config_mixins.rst @@ -13,3 +13,4 @@ ENRT Config Mixins config_mixin_classes/parallel_stream_qdisc_mixin config_mixin_classes/pause_frames_mixin config_mixin_classes/perf_reverse_mixin.rst + config_mixin_classes/disable_turboboost_mixin.rst diff --git a/lnst/Recipes/ENRT/ConfigMixins/DisableTurboboostMixin.py b/lnst/Recipes/ENRT/ConfigMixins/DisableTurboboostMixin.py index dc3c0d62..ed8cf2cc 100644 --- a/lnst/Recipes/ENRT/ConfigMixins/DisableTurboboostMixin.py +++ b/lnst/Recipes/ENRT/ConfigMixins/DisableTurboboostMixin.py @@ -3,6 +3,23 @@ from lnst.Controller.RecipeResults import ResultLevel from lnst.Recipes.ENRT.ConfigMixins import BaseSubConfigMixin
class DisableTurboboostMixin(BaseSubConfigMixin): + """ + This mixin class is an extension to the :any:`BaseEnrtRecipe` class that can + be used to disable CPU turboboost on hosts before running the tests. + + Any recipe that wants to use the mixin must define the + :attr:`disable_turboboost_host_list` property first. + + Note: The mixin uses intel_pstate sysfs interface to disable the CPU feature + and so it is usable only by systems with Intel CPUs. + + :param disable_turboost: + (optional test parameter) boolean to control the CPU turboboost. When + the parameter is set to **True** the CPU turboboost is disabled on all + hosts defined by :attr:`disable_turboboost_host_list` property. Otherwise + this mixin has no effect. + """ + disable_turboboost = BoolParam(default=False)
@property
Signed-off-by: Jan Tluka jtluka@redhat.com --- .../disable_idlestates_mixin.rst | 6 ++++++ docs/source/config_mixins.rst | 1 + .../ENRT/ConfigMixins/DisableIdleStatesMixin.py | 15 +++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 docs/source/config_mixin_classes/disable_idlestates_mixin.rst
diff --git a/docs/source/config_mixin_classes/disable_idlestates_mixin.rst b/docs/source/config_mixin_classes/disable_idlestates_mixin.rst new file mode 100644 index 00000000..48042da9 --- /dev/null +++ b/docs/source/config_mixin_classes/disable_idlestates_mixin.rst @@ -0,0 +1,6 @@ +DisableIdleStatesMixin +====================== + +.. autoclass:: lnst.Recipes.ENRT.ConfigMixins.DisableIdleStatesMixin.DisableIdleStatesMixin + :members: + :show-inheritance: diff --git a/docs/source/config_mixins.rst b/docs/source/config_mixins.rst index 53451190..240f3f9d 100644 --- a/docs/source/config_mixins.rst +++ b/docs/source/config_mixins.rst @@ -14,3 +14,4 @@ ENRT Config Mixins config_mixin_classes/pause_frames_mixin config_mixin_classes/perf_reverse_mixin.rst config_mixin_classes/disable_turboboost_mixin.rst + config_mixin_classes/disable_idlestates_mixin.rst diff --git a/lnst/Recipes/ENRT/ConfigMixins/DisableIdleStatesMixin.py b/lnst/Recipes/ENRT/ConfigMixins/DisableIdleStatesMixin.py index ca45dfb3..45fc95a8 100644 --- a/lnst/Recipes/ENRT/ConfigMixins/DisableIdleStatesMixin.py +++ b/lnst/Recipes/ENRT/ConfigMixins/DisableIdleStatesMixin.py @@ -2,6 +2,21 @@ from lnst.Common.Parameters import IntParam from lnst.Recipes.ENRT.ConfigMixins import BaseSubConfigMixin
class DisableIdleStatesMixin(BaseSubConfigMixin): + """ + This mixin class is an extension to the :any:`BaseEnrtRecipe` class that can + be used to control the CPU idle states before running the tests. + + Any recipe that wants to use the mixin must define the + :attr:`disable_idlestates_host_list` property first. + + :param minimal_idlestates_latency: + (optional test parameter) an integer, the value is passed as the latency + argument of the **'cpupower idle-set -D'** command that will disable + all idle states with an equal or higher latency than the specified value + on all hosts defined by :attr:`disable_idlestates_host_list` property. + If the value is 0 this will effectively disable all CPU idle states. + """ + minimal_idlestates_latency = IntParam()
@property
On Fri, Oct 23, 2020 at 03:58:42PM +0200, Jan Tluka wrote:
The following patch set is another iteration of the implementation of mixin classes to control CPU features - idle states and turboboost.
Differences to v2:
- since the host_list properties are equivalent for all of the recipes that inherit from BaseEnrtRecipe, the definition of these properties is moved to the BaseEnrtRecipe
Differences to v1:
- mixin classes now inherit from BaseSubConfigMixin instead of PerfTestTweakMixin
- added disable_turboboost_host_list and disable_idlestates properties to specify on which hosts the CPU feature should be disabled
- added documentation for both mixins
Jan Tluka (8): Recipes.ENRT.PerfTestMixins.SctpFirewallPerfTestMixin: move _get_flow_measurement_from_config() to base class Recipes.ENRT.ConfigMixins: add DisableIdleStatesMixin Recipes.ENRT.ConfigMixins: add DisableTurboboostMixin Recipes.ENRT.PerfTestMixins: add CommonPerfTestTweakMixin Recipes.ENRT.BaseEnrtRecipe: inherit from CommonPerfTestTweakMixin Recipes.ENRT.BaseEnrtRecipe: add DisableTurboboost and DisableIdleStates mixins docs: add DisableTurboboostMixin documentation docs: add DisableIdleStatesMixin documentation
.../disable_idlestates_mixin.rst | 6 ++ .../disable_turboboost_mixin.rst | 6 ++ docs/source/config_mixins.rst | 2 + lnst/Recipes/ENRT/BaseEnrtRecipe.py | 40 ++++++++++- .../ConfigMixins/DisableIdleStatesMixin.py | 57 +++++++++++++++ .../ConfigMixins/DisableTurboboostMixin.py | 71 +++++++++++++++++++ .../PerfTestMixins/BasePerfTestTweakMixin.py | 6 ++ .../CommonPerfTestTweakMixin.py | 6 ++ .../SctpFirewallPerfTestMixin.py | 6 -- lnst/Recipes/ENRT/PerfTestMixins/__init__.py | 1 + 10 files changed, 193 insertions(+), 8 deletions(-) create mode 100644 docs/source/config_mixin_classes/disable_idlestates_mixin.rst create mode 100644 docs/source/config_mixin_classes/disable_turboboost_mixin.rst create mode 100644 lnst/Recipes/ENRT/ConfigMixins/DisableIdleStatesMixin.py create mode 100644 lnst/Recipes/ENRT/ConfigMixins/DisableTurboboostMixin.py create mode 100644 lnst/Recipes/ENRT/PerfTestMixins/CommonPerfTestTweakMixin.py
-- 2.21.3 _______________________________________________ LNST-developers mailing list -- lnst-developers@lists.fedorahosted.org To unsubscribe send an email to lnst-developers-leave@lists.fedorahosted.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedorahosted.org/archives/list/lnst-developers@lists.fedorahos...
looks good to me, pushed upstream.
Thanks, -Ondrej
lnst-developers@lists.fedorahosted.org