Message ID | 20210210221053.18050-22-alex.bennee@linaro.org |
---|---|
State | New |
Headers | show |
Series | plugins/next pre-PR (hwprofile, regression fixes, icount count fix) | expand |
On 2/10/21 11:10 PM, Alex Bennée wrote: > The insn plugin has a simple heuristic to detect if an instruction is > detected running twice in a row. Check the plugin log after the run > and pass accordingly. > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > Message-Id: <20210209182749.31323-13-alex.bennee@linaro.org> > --- > tests/acceptance/tcg_plugins.py | 31 +++++++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/tests/acceptance/tcg_plugins.py b/tests/acceptance/tcg_plugins.py > index b512979769..acab599505 100644 > --- a/tests/acceptance/tcg_plugins.py > +++ b/tests/acceptance/tcg_plugins.py > @@ -101,3 +101,34 @@ class PluginKernelNormal(PluginKernelBase): > else: > logger.debug("Failed to find instruction count") > self.fail > + > + def test_aarch64_virt_insn_icount(self): > + """ > + :avocado: tags=accel:tcg > + :avocado: tags=arch:aarch64 > + :avocado: tags=machine:virt > + :avocado: tags=cpu:cortex-a57 > + """ > + kernel_path = self._grab_aarch64_kernel() > + kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + > + 'console=ttyAMA0') > + console_pattern = 'Kernel panic - not syncing: VFS:' > + > + plugin_log = tempfile.NamedTemporaryFile(mode="r+t", prefix="plugin", > + suffix=".log", delete=False) > + > + self.run_vm(kernel_path, kernel_command_line, > + "tests/plugin/libinsn.so", plugin_log.name, > + console_pattern, > + args=('-cpu', 'cortex-a53', '-icount', 'shift=1')) > + > + logger = logging.getLogger() > + > + with plugin_log as lf, \ > + mmap.mmap(lf.fileno(), 0, access=mmap.ACCESS_READ) as s: > + m = re.search(br"detected repeat execution @ (?P<addr>0x[0-9A-Fa-f]+)", s) > + if m is not None and "addr" in m.groupdict(): > + logger.debug("detected repeat instructions") I suppose this is debug left-over and we can remove this line now. Otherwise: Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > + self.fail("detected repeated instructions") > + else: > + logger.debug("no repeats detected: %s", m) >
On 2/10/21 7:10 PM, Alex Bennée wrote: > The insn plugin has a simple heuristic to detect if an instruction is > detected running twice in a row. Check the plugin log after the run > and pass accordingly. > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > Message-Id: <20210209182749.31323-13-alex.bennee@linaro.org> > --- > tests/acceptance/tcg_plugins.py | 31 +++++++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) Likewise, Tested-by: Wainer dos Santos Moschetta <wainersm@redhat.com> > > diff --git a/tests/acceptance/tcg_plugins.py b/tests/acceptance/tcg_plugins.py > index b512979769..acab599505 100644 > --- a/tests/acceptance/tcg_plugins.py > +++ b/tests/acceptance/tcg_plugins.py > @@ -101,3 +101,34 @@ class PluginKernelNormal(PluginKernelBase): > else: > logger.debug("Failed to find instruction count") > self.fail > + > + def test_aarch64_virt_insn_icount(self): > + """ > + :avocado: tags=accel:tcg > + :avocado: tags=arch:aarch64 > + :avocado: tags=machine:virt > + :avocado: tags=cpu:cortex-a57 > + """ > + kernel_path = self._grab_aarch64_kernel() > + kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + > + 'console=ttyAMA0') > + console_pattern = 'Kernel panic - not syncing: VFS:' > + > + plugin_log = tempfile.NamedTemporaryFile(mode="r+t", prefix="plugin", > + suffix=".log", delete=False) In case you find it useful to save the file in the Avocado's tests logs directory for debugging, just use the `self.outputdir` property: diff --git a/tests/acceptance/tcg_plugins.py b/tests/acceptance/tcg_plugins.py index acab599505..da5c8ae267 100644 --- a/tests/acceptance/tcg_plugins.py +++ b/tests/acceptance/tcg_plugins.py @@ -13,6 +13,7 @@ import logging import time diff --git a/tests/acceptance/tcg_plugins.py b/tests/acceptance/tcg_plugins.py index acab599505..da5c8ae267 100644 --- a/tests/acceptance/tcg_plugins.py +++ b/tests/acceptance/tcg_plugins.py @@ -13,6 +13,7 @@ import logging import time import tempfile import mmap +import os import re from boot_linux_console import LinuxKernelTest @@ -114,17 +115,16 @@ class PluginKernelNormal(PluginKernelBase): 'console=ttyAMA0') console_pattern = 'Kernel panic - not syncing: VFS:' - plugin_log = tempfile.NamedTemporaryFile(mode="r+t", prefix="plugin", - suffix=".log", delete=False) + plugin_log = os.path.join(self.outputdir, "plugin.log") self.run_vm(kernel_path, kernel_command_line, - "tests/plugin/libinsn.so", plugin_log.name, + "tests/plugin/libinsn.so", plugin_log, console_pattern, args=('-cpu', 'cortex-a53', '-icount', 'shift=1')) logger = logging.getLogger() - with plugin_log as lf, \ + with open(plugin_log, 'rt') as lf, \ mmap.mmap(lf.fileno(), 0, access=mmap.ACCESS_READ) as s: m = re.search(br"detected repeat execution @ (?P<addr>0x[0-9A-Fa-f]+)", s) if m is not None and "addr" in m.groupdict(): --- > + > + self.run_vm(kernel_path, kernel_command_line, > + "tests/plugin/libinsn.so", plugin_log.name, > + console_pattern, > + args=('-cpu', 'cortex-a53', '-icount', 'shift=1')) > + > + logger = logging.getLogger() > + > + with plugin_log as lf, \ > + mmap.mmap(lf.fileno(), 0, access=mmap.ACCESS_READ) as s: > + m = re.search(br"detected repeat execution @ (?P<addr>0x[0-9A-Fa-f]+)", s) > + if m is not None and "addr" in m.groupdict(): > + logger.debug("detected repeat instructions") > + self.fail("detected repeated instructions") > + else: > + logger.debug("no repeats detected: %s", m)
diff --git a/tests/acceptance/tcg_plugins.py b/tests/acceptance/tcg_plugins.py index b512979769..acab599505 100644 --- a/tests/acceptance/tcg_plugins.py +++ b/tests/acceptance/tcg_plugins.py @@ -101,3 +101,34 @@ class PluginKernelNormal(PluginKernelBase): else: logger.debug("Failed to find instruction count") self.fail + + def test_aarch64_virt_insn_icount(self): + """ + :avocado: tags=accel:tcg + :avocado: tags=arch:aarch64 + :avocado: tags=machine:virt + :avocado: tags=cpu:cortex-a57 + """ + kernel_path = self._grab_aarch64_kernel() + kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + + 'console=ttyAMA0') + console_pattern = 'Kernel panic - not syncing: VFS:' + + plugin_log = tempfile.NamedTemporaryFile(mode="r+t", prefix="plugin", + suffix=".log", delete=False) + + self.run_vm(kernel_path, kernel_command_line, + "tests/plugin/libinsn.so", plugin_log.name, + console_pattern, + args=('-cpu', 'cortex-a53', '-icount', 'shift=1')) + + logger = logging.getLogger() + + with plugin_log as lf, \ + mmap.mmap(lf.fileno(), 0, access=mmap.ACCESS_READ) as s: + m = re.search(br"detected repeat execution @ (?P<addr>0x[0-9A-Fa-f]+)", s) + if m is not None and "addr" in m.groupdict(): + logger.debug("detected repeat instructions") + self.fail("detected repeated instructions") + else: + logger.debug("no repeats detected: %s", m)
The insn plugin has a simple heuristic to detect if an instruction is detected running twice in a row. Check the plugin log after the run and pass accordingly. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20210209182749.31323-13-alex.bennee@linaro.org> --- tests/acceptance/tcg_plugins.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) -- 2.20.1