* [PATCH 1/2] python3-kirk: Add version 4.0.0
@ 2026-03-25 8:40 daniel.turull
2026-03-25 8:40 ` [PATCH 2/2] oeqa: replace runltp with kirk daniel.turull
2026-03-25 12:34 ` [OE-core] [PATCH 1/2] python3-kirk: Add version 4.0.0 Alexander Kanavin
0 siblings, 2 replies; 19+ messages in thread
From: daniel.turull @ 2026-03-25 8:40 UTC (permalink / raw)
To: openembedded-core; +Cc: pratik.farkase, richard.purdie, Daniel Turull
From: Daniel Turull <daniel.turull@ericsson.com>
Kirk application is a fork of runltp-ng and it’s the official LTP
tests executor.
Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
---
meta/conf/distro/include/maintainers.inc | 1 +
.../python3-kirk/python3-kirk_4.0.0.bb | 18 ++++++++++++++++++
2 files changed, 19 insertions(+)
create mode 100644 meta/recipes-extended/python3-kirk/python3-kirk_4.0.0.bb
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index f9a600ff11..9cd58dbac0 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -665,6 +665,7 @@ RECIPE_MAINTAINER:pn-python3-jinja2 = "Richard Purdie <richard.purdie@linuxfound
RECIPE_MAINTAINER:pn-python3-jsonpointer = "Bruce Ashfield <bruce.ashfield@gmail.com>"
RECIPE_MAINTAINER:pn-python3-jsonschema = "Bruce Ashfield <bruce.ashfield@gmail.com>"
RECIPE_MAINTAINER:pn-python3-jsonschema-specifications = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-kirk = "Daniel Turull <daniel.turull@ericsson.com>"
RECIPE_MAINTAINER:pn-python3-libarchive-c = "Joshua Watt <JPEWhacker@gmail.com>"
RECIPE_MAINTAINER:pn-python3-license-expression = "Wang Mingyu <wangmy@fujitsu.com>"
RECIPE_MAINTAINER:pn-python3-lxml = "Khem Raj <raj.khem@gmail.com>"
diff --git a/meta/recipes-extended/python3-kirk/python3-kirk_4.0.0.bb b/meta/recipes-extended/python3-kirk/python3-kirk_4.0.0.bb
new file mode 100644
index 0000000000..75edfc2fe4
--- /dev/null
+++ b/meta/recipes-extended/python3-kirk/python3-kirk_4.0.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Linux Test Project tests executor"
+HOMEPAGE = "https://github.com/linux-test-project/kirk"
+DESCRIPTION = "Kirk application is a fork of runltp-ng and it’s the official \
+LTP tests executor. It provides support for remote testing via Qemu, SSH, \
+LTX, parallel execution and much more."
+SECTION = "console/utils"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=39bba7d2cf0ba1036f2a6e2be52fe3f0"
+
+SRC_URI = "git://github.com/linux-test-project/kirk;protocol=https;branch=master"
+
+PV = "4.0.0"
+SRCREV = "32b224021b9c657953f5b2f61ca4744b9b3c5961"
+
+RDEPENDS:${PN} += "python3-asyncio python3-json"
+
+inherit python_setuptools_build_meta
+
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 8:40 [PATCH 1/2] python3-kirk: Add version 4.0.0 daniel.turull
@ 2026-03-25 8:40 ` daniel.turull
2026-03-25 12:38 ` [OE-core] " Alexander Kanavin
` (2 more replies)
2026-03-25 12:34 ` [OE-core] [PATCH 1/2] python3-kirk: Add version 4.0.0 Alexander Kanavin
1 sibling, 3 replies; 19+ messages in thread
From: daniel.turull @ 2026-03-25 8:40 UTC (permalink / raw)
To: openembedded-core; +Cc: pratik.farkase, richard.purdie, Daniel Turull
From: Daniel Turull <daniel.turull@ericsson.com>
runltp has been removed from ltp and kirk is the official tool to
invoke linux ltp tests.
See:
https://github.com/linux-test-project/ltp/commit/6efd3605dc005c3ed135b463f182174e24bdce1b
Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
Assisted-by: Claude, Anthropic
---
meta/lib/oeqa/runtime/cases/ltp.py | 16 ++++++-------
meta/lib/oeqa/runtime/cases/ltp_stress.py | 16 +++++++++----
meta/lib/oeqa/utils/logparser.py | 29 +++++++++++++++++++++++
meta/recipes-extended/ltp/ltp_20260130.bb | 1 +
4 files changed, 50 insertions(+), 12 deletions(-)
diff --git a/meta/lib/oeqa/runtime/cases/ltp.py b/meta/lib/oeqa/runtime/cases/ltp.py
index 0ffdbe23e4..11c4814090 100644
--- a/meta/lib/oeqa/runtime/cases/ltp.py
+++ b/meta/lib/oeqa/runtime/cases/ltp.py
@@ -12,7 +12,7 @@ import pprint
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
from oeqa.runtime.decorator.package import OEHasPackage
-from oeqa.utils.logparser import LtpParser
+from oeqa.utils.logparser import LtpKirkParser
class LtpTestBase(OERuntimeTestCase):
@@ -66,9 +66,9 @@ class LtpTest(LtpTestBase):
def runltp(self, ltp_group):
# LTP appends to log files, so ensure we start with a clean log
- self.target.deleteFiles("/opt/ltp/results/", ltp_group)
+ self.target.deleteFiles("/opt/ltp/results/", "%s.json" % ltp_group)
- cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
+ cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (ltp_group, ltp_group)
starttime = time.time()
(status, output) = self.target.run(cmd, timeout=1200)
@@ -87,14 +87,14 @@ class LtpTest(LtpTestBase):
self.extras['ltpresult.rawlogs']['log'] = self.extras['ltpresult.rawlogs']['log'] + output
# Copy the machine-readable test results locally so we can parse it
- dst = os.path.join(self.ltptest_log_dir, ltp_group)
- remote_src = "/opt/ltp/results/%s" % ltp_group
+ dst = os.path.join(self.ltptest_log_dir, "%s.json" % ltp_group)
+ remote_src = "/opt/ltp/results/%s.json" % ltp_group
(status, output) = self.target.copyFrom(remote_src, dst, True)
if status:
msg = 'File could not be copied. Output: %s' % output
self.target.logger.warning(msg)
- parser = LtpParser()
+ parser = LtpKirkParser()
results, sections = parser.parse(dst)
sections['duration'] = int(endtime-starttime)
@@ -113,9 +113,9 @@ class LtpTest(LtpTestBase):
# LTP runtime tests
@OETestDepends(['ssh.SSHTest.test_ssh'])
- @OEHasPackage(["ltp"])
+ @OEHasPackage(["ltp", "python3-kirk"])
def test_ltp_help(self):
- (status, output) = self.target.run('/opt/ltp/runltp --help')
+ (status, output) = self.target.run('kirk --help')
msg = 'Failed to get ltp help. Output: %s' % output
self.assertEqual(status, 0, msg=msg)
diff --git a/meta/lib/oeqa/runtime/cases/ltp_stress.py b/meta/lib/oeqa/runtime/cases/ltp_stress.py
index ce6f4bf59d..cf84ec1182 100644
--- a/meta/lib/oeqa/runtime/cases/ltp_stress.py
+++ b/meta/lib/oeqa/runtime/cases/ltp_stress.py
@@ -13,7 +13,7 @@ from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
from oeqa.runtime.decorator.package import OEHasPackage
from oeqa.core.decorator.data import skipIfQemu
-from oeqa.utils.logparser import LtpParser
+from oeqa.utils.logparser import LtpKirkParser
class LtpStressBase(OERuntimeTestCase):
@@ -60,7 +60,7 @@ class LtpStressBase(OERuntimeTestCase):
class LtpStressTest(LtpStressBase):
def runltp(self, stress_group):
- cmd = '/opt/ltp/runltp -f %s -p -q 2>@1 | tee /opt/ltp/results/%s' % (stress_group, stress_group)
+ cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (stress_group, stress_group)
starttime = time.time()
(status, output) = self.target.run(cmd)
endtime = time.time()
@@ -69,8 +69,16 @@ class LtpStressTest(LtpStressBase):
self.extras['ltpstressresult.rawlogs']['log'] = self.extras['ltpstressresult.rawlogs']['log'] + output
- parser = LtpParser()
- results, sections = parser.parse(os.path.join(self.ltptest_log_dir, "%s" % stress_group))
+ # Copy kirk JSON report from target
+ dst = os.path.join(self.ltptest_log_dir, "%s.json" % stress_group)
+ remote_src = "/opt/ltp/results/%s.json" % stress_group
+ (status, output) = self.target.copyFrom(remote_src, dst, True)
+ if status:
+ msg = 'File could not be copied. Output: %s' % output
+ self.target.logger.warning(msg)
+
+ parser = LtpKirkParser()
+ results, sections = parser.parse(dst)
runtime = int(endtime-starttime)
sections['duration'] = runtime
diff --git a/meta/lib/oeqa/utils/logparser.py b/meta/lib/oeqa/utils/logparser.py
index c479864162..a907421fab 100644
--- a/meta/lib/oeqa/utils/logparser.py
+++ b/meta/lib/oeqa/utils/logparser.py
@@ -5,6 +5,7 @@
#
import enum
+import json
import os
import re
@@ -158,6 +159,34 @@ class LtpParser:
return results, section
+class LtpKirkParser:
+ """Parse kirk JSON report into the same format as LtpParser."""
+
+ STATUS_MAP = {
+ "pass": "PASSED",
+ "fail": "FAILED",
+ "brok": "FAILED",
+ "conf": "SKIPPED",
+ "warn": "PASSED",
+ }
+
+ def parse(self, jsonfile):
+ with open(jsonfile, errors="replace") as f:
+ report = json.load(f)
+
+ results = {}
+ section = {"duration": 0, "log": ""}
+
+ for entry in report.get("results", []):
+ results[entry["test_fqn"]] = self.STATUS_MAP.get(entry.get("status", ""), "FAILED")
+ test = entry.get("test", {})
+ section["log"] += test.get("log", "")
+
+ section["duration"] = int(report.get("stats", {}).get("runtime", 0))
+
+ return results, section
+
+
# ltp Compliance log parsing
class LtpComplianceParser(object):
def __init__(self):
diff --git a/meta/recipes-extended/ltp/ltp_20260130.bb b/meta/recipes-extended/ltp/ltp_20260130.bb
index dcd1e81398..1ff20a7898 100644
--- a/meta/recipes-extended/ltp/ltp_20260130.bb
+++ b/meta/recipes-extended/ltp/ltp_20260130.bb
@@ -104,6 +104,7 @@ RDEPENDS:${PN} = "\
net-tools \
perl \
python3-core \
+ python3-kirk \
procps \
quota \
unzip \
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 1/2] python3-kirk: Add version 4.0.0
@ 2026-03-25 11:51 daniel.turull
0 siblings, 0 replies; 19+ messages in thread
From: daniel.turull @ 2026-03-25 11:51 UTC (permalink / raw)
To: openembedded-core; +Cc: pratik.farkase, richard.purdie, Daniel Turull
From: Daniel Turull <daniel.turull@ericsson.com>
Kirk application is a fork of runltp-ng and it’s the official LTP
tests executor.
Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
---
meta/conf/distro/include/maintainers.inc | 1 +
.../python3-kirk/python3-kirk_4.0.0.bb | 18 ++++++++++++++++++
2 files changed, 19 insertions(+)
create mode 100644 meta/recipes-extended/python3-kirk/python3-kirk_4.0.0.bb
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index f9a600ff11..9cd58dbac0 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -665,6 +665,7 @@ RECIPE_MAINTAINER:pn-python3-jinja2 = "Richard Purdie <richard.purdie@linuxfound
RECIPE_MAINTAINER:pn-python3-jsonpointer = "Bruce Ashfield <bruce.ashfield@gmail.com>"
RECIPE_MAINTAINER:pn-python3-jsonschema = "Bruce Ashfield <bruce.ashfield@gmail.com>"
RECIPE_MAINTAINER:pn-python3-jsonschema-specifications = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-kirk = "Daniel Turull <daniel.turull@ericsson.com>"
RECIPE_MAINTAINER:pn-python3-libarchive-c = "Joshua Watt <JPEWhacker@gmail.com>"
RECIPE_MAINTAINER:pn-python3-license-expression = "Wang Mingyu <wangmy@fujitsu.com>"
RECIPE_MAINTAINER:pn-python3-lxml = "Khem Raj <raj.khem@gmail.com>"
diff --git a/meta/recipes-extended/python3-kirk/python3-kirk_4.0.0.bb b/meta/recipes-extended/python3-kirk/python3-kirk_4.0.0.bb
new file mode 100644
index 0000000000..75edfc2fe4
--- /dev/null
+++ b/meta/recipes-extended/python3-kirk/python3-kirk_4.0.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Linux Test Project tests executor"
+HOMEPAGE = "https://github.com/linux-test-project/kirk"
+DESCRIPTION = "Kirk application is a fork of runltp-ng and it’s the official \
+LTP tests executor. It provides support for remote testing via Qemu, SSH, \
+LTX, parallel execution and much more."
+SECTION = "console/utils"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=39bba7d2cf0ba1036f2a6e2be52fe3f0"
+
+SRC_URI = "git://github.com/linux-test-project/kirk;protocol=https;branch=master"
+
+PV = "4.0.0"
+SRCREV = "32b224021b9c657953f5b2f61ca4744b9b3c5961"
+
+RDEPENDS:${PN} += "python3-asyncio python3-json"
+
+inherit python_setuptools_build_meta
+
--
2.34.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [OE-core] [PATCH 1/2] python3-kirk: Add version 4.0.0
2026-03-25 8:40 [PATCH 1/2] python3-kirk: Add version 4.0.0 daniel.turull
2026-03-25 8:40 ` [PATCH 2/2] oeqa: replace runltp with kirk daniel.turull
@ 2026-03-25 12:34 ` Alexander Kanavin
2026-03-25 13:26 ` Daniel Turull
1 sibling, 1 reply; 19+ messages in thread
From: Alexander Kanavin @ 2026-03-25 12:34 UTC (permalink / raw)
To: daniel.turull; +Cc: openembedded-core, pratik.farkase, richard.purdie
On Wed, 25 Mar 2026 at 13:10, Daniel Turull via lists.openembedded.org
<daniel.turull=ericsson.com@lists.openembedded.org> wrote:
> +SRC_URI = "git://github.com/linux-test-project/kirk;protocol=https;branch=master"
We probably should take kirk from pypi via pypi.bbclass?
https://pypi.org/project/kirk/
Alex
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 8:40 ` [PATCH 2/2] oeqa: replace runltp with kirk daniel.turull
@ 2026-03-25 12:38 ` Alexander Kanavin
2026-03-25 13:37 ` Daniel Turull
2026-03-25 12:58 ` Bruce Ashfield
2026-03-25 16:35 ` Richard Purdie
2 siblings, 1 reply; 19+ messages in thread
From: Alexander Kanavin @ 2026-03-25 12:38 UTC (permalink / raw)
To: daniel.turull; +Cc: openembedded-core, pratik.farkase, richard.purdie
On Wed, 25 Mar 2026 at 12:07, Daniel Turull via lists.openembedded.org
<daniel.turull=ericsson.com@lists.openembedded.org> wrote:
> - parser = LtpParser()
> - results, sections = parser.parse(os.path.join(self.ltptest_log_dir, "%s" % stress_group))
> + # Copy kirk JSON report from target
> + dst = os.path.join(self.ltptest_log_dir, "%s.json" % stress_group)
> + remote_src = "/opt/ltp/results/%s.json" % stress_group
> + (status, output) = self.target.copyFrom(remote_src, dst, True)
> + if status:
> + msg = 'File could not be copied. Output: %s' % output
> + self.target.logger.warning(msg)
> +
> + parser = LtpKirkParser()
> + results, sections = parser.parse(dst)
Why is an extra copying step added?
Alex
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 8:40 ` [PATCH 2/2] oeqa: replace runltp with kirk daniel.turull
2026-03-25 12:38 ` [OE-core] " Alexander Kanavin
@ 2026-03-25 12:58 ` Bruce Ashfield
2026-03-25 13:02 ` Alexander Kanavin
2026-03-25 13:44 ` Daniel Turull
2026-03-25 16:35 ` Richard Purdie
2 siblings, 2 replies; 19+ messages in thread
From: Bruce Ashfield @ 2026-03-25 12:58 UTC (permalink / raw)
To: daniel.turull; +Cc: openembedded-core, pratik.farkase, richard.purdie
[-- Attachment #1: Type: text/plain, Size: 8470 bytes --]
On Wed, Mar 25, 2026 at 7:07 AM Daniel Turull via lists.openembedded.org
<daniel.turull=ericsson.com@lists.openembedded.org> wrote:
> From: Daniel Turull <daniel.turull@ericsson.com>
>
> runltp has been removed from ltp and kirk is the official tool to
> invoke linux ltp tests.
For something like this to be considered for merging, I'd have expected
a lot more information.
Is the test coverage the same as before ?
What are the results of the tests versus the previous harness ?
Is it truly a drop in replacement for the previous runner ?
.. etc
Switching the executable is the easy part, ensuring that it actually works
a replacement is the hard part.
Bruce
>
>
> See:
>
> https://github.com/linux-test-project/ltp/commit/6efd3605dc005c3ed135b463f182174e24bdce1b
>
> Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
> Assisted-by: Claude, Anthropic
> ---
> meta/lib/oeqa/runtime/cases/ltp.py | 16 ++++++-------
> meta/lib/oeqa/runtime/cases/ltp_stress.py | 16 +++++++++----
> meta/lib/oeqa/utils/logparser.py | 29 +++++++++++++++++++++++
> meta/recipes-extended/ltp/ltp_20260130.bb | 1 +
> 4 files changed, 50 insertions(+), 12 deletions(-)
>
> diff --git a/meta/lib/oeqa/runtime/cases/ltp.py
> b/meta/lib/oeqa/runtime/cases/ltp.py
> index 0ffdbe23e4..11c4814090 100644
> --- a/meta/lib/oeqa/runtime/cases/ltp.py
> +++ b/meta/lib/oeqa/runtime/cases/ltp.py
> @@ -12,7 +12,7 @@ import pprint
> from oeqa.runtime.case import OERuntimeTestCase
> from oeqa.core.decorator.depends import OETestDepends
> from oeqa.runtime.decorator.package import OEHasPackage
> -from oeqa.utils.logparser import LtpParser
> +from oeqa.utils.logparser import LtpKirkParser
>
> class LtpTestBase(OERuntimeTestCase):
>
> @@ -66,9 +66,9 @@ class LtpTest(LtpTestBase):
>
> def runltp(self, ltp_group):
> # LTP appends to log files, so ensure we start with a clean
> log
> - self.target.deleteFiles("/opt/ltp/results/", ltp_group)
> + self.target.deleteFiles("/opt/ltp/results/", "%s.json" %
> ltp_group)
>
> - cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l
> /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
> + cmd = 'kirk --run-suite %s --json-report
> /opt/ltp/results/%s.json -n' % (ltp_group, ltp_group)
>
> starttime = time.time()
> (status, output) = self.target.run(cmd, timeout=1200)
> @@ -87,14 +87,14 @@ class LtpTest(LtpTestBase):
> self.extras['ltpresult.rawlogs']['log'] =
> self.extras['ltpresult.rawlogs']['log'] + output
>
> # Copy the machine-readable test results locally so we can
> parse it
> - dst = os.path.join(self.ltptest_log_dir, ltp_group)
> - remote_src = "/opt/ltp/results/%s" % ltp_group
> + dst = os.path.join(self.ltptest_log_dir, "%s.json" %
> ltp_group)
> + remote_src = "/opt/ltp/results/%s.json" % ltp_group
> (status, output) = self.target.copyFrom(remote_src, dst, True)
> if status:
> msg = 'File could not be copied. Output: %s' % output
> self.target.logger.warning(msg)
>
> - parser = LtpParser()
> + parser = LtpKirkParser()
> results, sections = parser.parse(dst)
>
> sections['duration'] = int(endtime-starttime)
> @@ -113,9 +113,9 @@ class LtpTest(LtpTestBase):
>
> # LTP runtime tests
> @OETestDepends(['ssh.SSHTest.test_ssh'])
> - @OEHasPackage(["ltp"])
> + @OEHasPackage(["ltp", "python3-kirk"])
> def test_ltp_help(self):
> - (status, output) = self.target.run('/opt/ltp/runltp --help')
> + (status, output) = self.target.run('kirk --help')
> msg = 'Failed to get ltp help. Output: %s' % output
> self.assertEqual(status, 0, msg=msg)
>
> diff --git a/meta/lib/oeqa/runtime/cases/ltp_stress.py
> b/meta/lib/oeqa/runtime/cases/ltp_stress.py
> index ce6f4bf59d..cf84ec1182 100644
> --- a/meta/lib/oeqa/runtime/cases/ltp_stress.py
> +++ b/meta/lib/oeqa/runtime/cases/ltp_stress.py
> @@ -13,7 +13,7 @@ from oeqa.runtime.case import OERuntimeTestCase
> from oeqa.core.decorator.depends import OETestDepends
> from oeqa.runtime.decorator.package import OEHasPackage
> from oeqa.core.decorator.data import skipIfQemu
> -from oeqa.utils.logparser import LtpParser
> +from oeqa.utils.logparser import LtpKirkParser
>
> class LtpStressBase(OERuntimeTestCase):
>
> @@ -60,7 +60,7 @@ class LtpStressBase(OERuntimeTestCase):
> class LtpStressTest(LtpStressBase):
>
> def runltp(self, stress_group):
> - cmd = '/opt/ltp/runltp -f %s -p -q 2>@1 | tee
> /opt/ltp/results/%s' % (stress_group, stress_group)
> + cmd = 'kirk --run-suite %s --json-report
> /opt/ltp/results/%s.json -n' % (stress_group, stress_group)
> starttime = time.time()
> (status, output) = self.target.run(cmd)
> endtime = time.time()
> @@ -69,8 +69,16 @@ class LtpStressTest(LtpStressBase):
>
> self.extras['ltpstressresult.rawlogs']['log'] =
> self.extras['ltpstressresult.rawlogs']['log'] + output
>
> - parser = LtpParser()
> - results, sections =
> parser.parse(os.path.join(self.ltptest_log_dir, "%s" % stress_group))
> + # Copy kirk JSON report from target
> + dst = os.path.join(self.ltptest_log_dir, "%s.json" %
> stress_group)
> + remote_src = "/opt/ltp/results/%s.json" % stress_group
> + (status, output) = self.target.copyFrom(remote_src, dst, True)
> + if status:
> + msg = 'File could not be copied. Output: %s' % output
> + self.target.logger.warning(msg)
> +
> + parser = LtpKirkParser()
> + results, sections = parser.parse(dst)
>
> runtime = int(endtime-starttime)
> sections['duration'] = runtime
> diff --git a/meta/lib/oeqa/utils/logparser.py
> b/meta/lib/oeqa/utils/logparser.py
> index c479864162..a907421fab 100644
> --- a/meta/lib/oeqa/utils/logparser.py
> +++ b/meta/lib/oeqa/utils/logparser.py
> @@ -5,6 +5,7 @@
> #
>
> import enum
> +import json
> import os
> import re
>
> @@ -158,6 +159,34 @@ class LtpParser:
> return results, section
>
>
> +class LtpKirkParser:
> + """Parse kirk JSON report into the same format as LtpParser."""
> +
> + STATUS_MAP = {
> + "pass": "PASSED",
> + "fail": "FAILED",
> + "brok": "FAILED",
> + "conf": "SKIPPED",
> + "warn": "PASSED",
> + }
> +
> + def parse(self, jsonfile):
> + with open(jsonfile, errors="replace") as f:
> + report = json.load(f)
> +
> + results = {}
> + section = {"duration": 0, "log": ""}
> +
> + for entry in report.get("results", []):
> + results[entry["test_fqn"]] =
> self.STATUS_MAP.get(entry.get("status", ""), "FAILED")
> + test = entry.get("test", {})
> + section["log"] += test.get("log", "")
> +
> + section["duration"] = int(report.get("stats", {}).get("runtime",
> 0))
> +
> + return results, section
> +
> +
> # ltp Compliance log parsing
> class LtpComplianceParser(object):
> def __init__(self):
> diff --git a/meta/recipes-extended/ltp/ltp_20260130.bb
> b/meta/recipes-extended/ltp/ltp_20260130.bb
> index dcd1e81398..1ff20a7898 100644
> --- a/meta/recipes-extended/ltp/ltp_20260130.bb
> +++ b/meta/recipes-extended/ltp/ltp_20260130.bb
> @@ -104,6 +104,7 @@ RDEPENDS:${PN} = "\
> net-tools \
> perl \
> python3-core \
> + python3-kirk \
> procps \
> quota \
> unzip \
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#233871):
> https://lists.openembedded.org/g/openembedded-core/message/233871
> Mute This Topic: https://lists.openembedded.org/mt/118498904/1050810
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> bruce.ashfield@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
--
- Thou shalt not follow the NULL pointer, for chaos and madness await thee
at its end
- "Use the force Harry" - Gandalf, Star Trek II
[-- Attachment #2: Type: text/html, Size: 12392 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 12:58 ` Bruce Ashfield
@ 2026-03-25 13:02 ` Alexander Kanavin
2026-03-25 13:45 ` Daniel Turull
2026-03-25 13:44 ` Daniel Turull
1 sibling, 1 reply; 19+ messages in thread
From: Alexander Kanavin @ 2026-03-25 13:02 UTC (permalink / raw)
To: bruce.ashfield
Cc: daniel.turull, openembedded-core, pratik.farkase, richard.purdie
On Wed, 25 Mar 2026 at 13:58, Bruce Ashfield via
lists.openembedded.org
<bruce.ashfield=gmail.com@lists.openembedded.org> wrote:
> For something like this to be considered for merging, I'd have expected
> a lot more information.
>
> Is the test coverage the same as before ?
> What are the results of the tests versus the previous harness ?
> Is it truly a drop in replacement for the previous runner ?
> .. etc
>
> Switching the executable is the easy part, ensuring that it actually works
> a replacement is the hard part.
>> Assisted-by: Claude, Anthropic
I have to add that this line ^^^ doesn't inspire confidence in the
patch either. On the contrary, it raises suspicions that the code was
written quickly after the issue was raised yesterday in the tech
meeting, and wasn't actually tested well or at all. The commit message
*must* reassure that it was.
Alex
^ permalink raw reply [flat|nested] 19+ messages in thread
* RE: [OE-core] [PATCH 1/2] python3-kirk: Add version 4.0.0
2026-03-25 12:34 ` [OE-core] [PATCH 1/2] python3-kirk: Add version 4.0.0 Alexander Kanavin
@ 2026-03-25 13:26 ` Daniel Turull
0 siblings, 0 replies; 19+ messages in thread
From: Daniel Turull @ 2026-03-25 13:26 UTC (permalink / raw)
To: Alexander Kanavin
Cc: openembedded-core@lists.openembedded.org, pratik.farkase@est.tech,
richard.purdie@linuxfoundation.org
Hi,
I'll update the recipe to use pypi instead.
Daniel
> -----Original Message-----
> From: Alexander Kanavin <alex.kanavin@gmail.com>
> Sent: Wednesday, 25 March 2026 13:35
> To: Daniel Turull <daniel.turull@ericsson.com>
> Cc: openembedded-core@lists.openembedded.org; pratik.farkase@est.tech;
> richard.purdie@linuxfoundation.org
> Subject: Re: [OE-core] [PATCH 1/2] python3-kirk: Add version 4.0.0
>
> [You don't often get email from alex.kanavin@gmail.com. Learn why this is
> important at https://aka.ms/LearnAboutSenderIdentification ]
>
> On Wed, 25 Mar 2026 at 13:10, Daniel Turull via lists.openembedded.org
> <daniel.turull=ericsson.com@lists.openembedded.org> wrote:
> > +SRC_URI = "git://github.com/linux-test-
> project/kirk;protocol=https;branch=master"
>
> We probably should take kirk from pypi via pypi.bbclass?
>
> https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpypi.org%
> 2Fproject%2Fkirk%2F&data=05%7C02%7Cdaniel.turull%40ericsson.com%7C498a
> 872696cc4f8be26a08de8a6aeb53%7C92e84cebfbfd47abbe52080c6b87953f%7C
> 0%7C0%7C639100388978726482%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1
> hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIj
> oyfQ%3D%3D%7C60000%7C%7C%7C&sdata=lXs9Cx0YxirCnYstgQRJUJ3j%2FrYvgz
> C2LkZ0OgTbsao%3D&reserved=0
>
> Alex
^ permalink raw reply [flat|nested] 19+ messages in thread
* RE: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 12:38 ` [OE-core] " Alexander Kanavin
@ 2026-03-25 13:37 ` Daniel Turull
0 siblings, 0 replies; 19+ messages in thread
From: Daniel Turull @ 2026-03-25 13:37 UTC (permalink / raw)
To: Alexander Kanavin
Cc: openembedded-core@lists.openembedded.org, pratik.farkase@est.tech,
richard.purdie@linuxfoundation.org
> -----Original Message-----
> From: Alexander Kanavin <alex.kanavin@gmail.com>
> Sent: Wednesday, 25 March 2026 13:39
> To: Daniel Turull <daniel.turull@ericsson.com>
> Cc: openembedded-core@lists.openembedded.org; pratik.farkase@est.tech;
> richard.purdie@linuxfoundation.org
> Subject: Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
>
> [You don't often get email from alex.kanavin@gmail.com. Learn why this is
> important at https://aka.ms/LearnAboutSenderIdentification ]
>
> On Wed, 25 Mar 2026 at 12:07, Daniel Turull via lists.openembedded.org
> <daniel.turull=ericsson.com@lists.openembedded.org> wrote:
> > - parser = LtpParser()
> > - results, sections = parser.parse(os.path.join(self.ltptest_log_dir, "%s" %
> stress_group))
> > + # Copy kirk JSON report from target
> > + dst = os.path.join(self.ltptest_log_dir, "%s.json" % stress_group)
> > + remote_src = "/opt/ltp/results/%s.json" % stress_group
> > + (status, output) = self.target.copyFrom(remote_src, dst, True)
> > + if status:
> > + msg = 'File could not be copied. Output: %s' % output
> > + self.target.logger.warning(msg)
> > +
> > + parser = LtpKirkParser()
> > + results, sections = parser.parse(dst)
>
> Why is an extra copying step added?
Kirk creates a json file with the results that it is more machine readable friendly and needs to be copied over from the target. The old code was having the output results in the log.
>
> Alex
^ permalink raw reply [flat|nested] 19+ messages in thread
* RE: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 12:58 ` Bruce Ashfield
2026-03-25 13:02 ` Alexander Kanavin
@ 2026-03-25 13:44 ` Daniel Turull
2026-03-25 14:22 ` Bruce Ashfield
1 sibling, 1 reply; 19+ messages in thread
From: Daniel Turull @ 2026-03-25 13:44 UTC (permalink / raw)
To: Bruce Ashfield
Cc: openembedded-core@lists.openembedded.org, pratik.farkase@est.tech,
richard.purdie@linuxfoundation.org
[-- Attachment #1.1: Type: text/plain, Size: 9606 bytes --]
Hi,
Kirk is official way to run ltp since runltp has been dropped. Richard mentioned yesterday in the Weekly Project Engineering Sync if no one was fixing the runltp issue, he will drop ltp from oe-core.
The test coverage is the same since the logic there is not touched but the output is different. Now it is a json file with the results, which is machine readable without any extra parsing. Do we need a conversion from the new to the old to keep compatibility?
I’m attaching the old test output with the new one for the math test suite.
New: math-raw.log and math.json
Old: math.old math-raw.log.old.
You can see at the end of the old output:
-------------------------------------------
INFO: runltp script is deprecated, try kirk
https://github.com/linux-test-project/kirk
-------------------------------------------
Best regards,
Daniel
From: Bruce Ashfield <bruce.ashfield@gmail.com>
Sent: Wednesday, 25 March 2026 13:59
To: Daniel Turull <daniel.turull@ericsson.com>
Cc: openembedded-core@lists.openembedded.org; pratik.farkase@est.tech; richard.purdie@linuxfoundation.org
Subject: Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
On Wed, Mar 25, 2026 at 7:07 AM Daniel Turull via lists.openembedded.org<http://lists.openembedded.org/> <daniel.turull=ericsson.com@lists.openembedded.org<mailto:ericsson.com@lists.openembedded.org>> wrote:
From: Daniel Turull <daniel.turull@ericsson.com<mailto:daniel.turull@ericsson.com>>
runltp has been removed from ltp and kirk is the official tool to
invoke linux ltp tests.
For something like this to be considered for merging, I'd have expected
a lot more information.
Is the test coverage the same as before ?
What are the results of the tests versus the previous harness ?
Is it truly a drop in replacement for the previous runner ?
.. etc
Switching the executable is the easy part, ensuring that it actually works
a replacement is the hard part.
Bruce
See:
https://github.com/linux-test-project/ltp/commit/6efd3605dc005c3ed135b463f182174e24bdce1b
Signed-off-by: Daniel Turull <daniel.turull@ericsson.com<mailto:daniel.turull@ericsson.com>>
Assisted-by: Claude, Anthropic
---
meta/lib/oeqa/runtime/cases/ltp.py | 16 ++++++-------
meta/lib/oeqa/runtime/cases/ltp_stress.py | 16 +++++++++----
meta/lib/oeqa/utils/logparser.py | 29 +++++++++++++++++++++++
meta/recipes-extended/ltp/ltp_20260130.bb<http://ltp_20260130.bb/> | 1 +
4 files changed, 50 insertions(+), 12 deletions(-)
diff --git a/meta/lib/oeqa/runtime/cases/ltp.py b/meta/lib/oeqa/runtime/cases/ltp.py
index 0ffdbe23e4..11c4814090 100644
--- a/meta/lib/oeqa/runtime/cases/ltp.py
+++ b/meta/lib/oeqa/runtime/cases/ltp.py
@@ -12,7 +12,7 @@ import pprint
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
from oeqa.runtime.decorator.package import OEHasPackage
-from oeqa.utils.logparser import LtpParser
+from oeqa.utils.logparser import LtpKirkParser
class LtpTestBase(OERuntimeTestCase):
@@ -66,9 +66,9 @@ class LtpTest(LtpTestBase):
def runltp(self, ltp_group):
# LTP appends to log files, so ensure we start with a clean log
- self.target.deleteFiles("/opt/ltp/results/", ltp_group)
+ self.target.deleteFiles("/opt/ltp/results/", "%s.json" % ltp_group)
- cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
+ cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (ltp_group, ltp_group)
starttime = time.time()
(status, output) = self.target.run(cmd, timeout=1200)
@@ -87,14 +87,14 @@ class LtpTest(LtpTestBase):
self.extras['ltpresult.rawlogs']['log'] = self.extras['ltpresult.rawlogs']['log'] + output
# Copy the machine-readable test results locally so we can parse it
- dst = os.path.join(self.ltptest_log_dir, ltp_group)
- remote_src = "/opt/ltp/results/%s" % ltp_group
+ dst = os.path.join(self.ltptest_log_dir, "%s.json" % ltp_group)
+ remote_src = "/opt/ltp/results/%s.json" % ltp_group
(status, output) = self.target.copyFrom(remote_src, dst, True)
if status:
msg = 'File could not be copied. Output: %s' % output
self.target.logger.warning(msg)
- parser = LtpParser()
+ parser = LtpKirkParser()
results, sections = parser.parse(dst)
sections['duration'] = int(endtime-starttime)
@@ -113,9 +113,9 @@ class LtpTest(LtpTestBase):
# LTP runtime tests
@OETestDepends(['ssh.SSHTest.test_ssh'])
- @OEHasPackage(["ltp"])
+ @OEHasPackage(["ltp", "python3-kirk"])
def test_ltp_help(self):
- (status, output) = self.target.run('/opt/ltp/runltp --help')
+ (status, output) = self.target.run('kirk --help')
msg = 'Failed to get ltp help. Output: %s' % output
self.assertEqual(status, 0, msg=msg)
diff --git a/meta/lib/oeqa/runtime/cases/ltp_stress.py b/meta/lib/oeqa/runtime/cases/ltp_stress.py
index ce6f4bf59d..cf84ec1182 100644
--- a/meta/lib/oeqa/runtime/cases/ltp_stress.py
+++ b/meta/lib/oeqa/runtime/cases/ltp_stress.py
@@ -13,7 +13,7 @@ from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
from oeqa.runtime.decorator.package import OEHasPackage
from oeqa.core.decorator.data import skipIfQemu
-from oeqa.utils.logparser import LtpParser
+from oeqa.utils.logparser import LtpKirkParser
class LtpStressBase(OERuntimeTestCase):
@@ -60,7 +60,7 @@ class LtpStressBase(OERuntimeTestCase):
class LtpStressTest(LtpStressBase):
def runltp(self, stress_group):
- cmd = '/opt/ltp/runltp -f %s -p -q 2>@1 | tee /opt/ltp/results/%s' % (stress_group, stress_group)
+ cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (stress_group, stress_group)
starttime = time.time()
(status, output) = self.target.run(cmd)
endtime = time.time()
@@ -69,8 +69,16 @@ class LtpStressTest(LtpStressBase):
self.extras['ltpstressresult.rawlogs']['log'] = self.extras['ltpstressresult.rawlogs']['log'] + output
- parser = LtpParser()
- results, sections = parser.parse(os.path.join(self.ltptest_log_dir, "%s" % stress_group))
+ # Copy kirk JSON report from target
+ dst = os.path.join(self.ltptest_log_dir, "%s.json" % stress_group)
+ remote_src = "/opt/ltp/results/%s.json" % stress_group
+ (status, output) = self.target.copyFrom(remote_src, dst, True)
+ if status:
+ msg = 'File could not be copied. Output: %s' % output
+ self.target.logger.warning(msg)
+
+ parser = LtpKirkParser()
+ results, sections = parser.parse(dst)
runtime = int(endtime-starttime)
sections['duration'] = runtime
diff --git a/meta/lib/oeqa/utils/logparser.py b/meta/lib/oeqa/utils/logparser.py
index c479864162..a907421fab 100644
--- a/meta/lib/oeqa/utils/logparser.py
+++ b/meta/lib/oeqa/utils/logparser.py
@@ -5,6 +5,7 @@
#
import enum
+import json
import os
import re
@@ -158,6 +159,34 @@ class LtpParser:
return results, section
+class LtpKirkParser:
+ """Parse kirk JSON report into the same format as LtpParser."""
+
+ STATUS_MAP = {
+ "pass": "PASSED",
+ "fail": "FAILED",
+ "brok": "FAILED",
+ "conf": "SKIPPED",
+ "warn": "PASSED",
+ }
+
+ def parse(self, jsonfile):
+ with open(jsonfile, errors="replace") as f:
+ report = json.load(f)
+
+ results = {}
+ section = {"duration": 0, "log": ""}
+
+ for entry in report.get("results", []):
+ results[entry["test_fqn"]] = self.STATUS_MAP.get(entry.get("status", ""), "FAILED")
+ test = entry.get("test", {})
+ section["log"] += test.get("log", "")
+
+ section["duration"] = int(report.get("stats", {}).get("runtime", 0))
+
+ return results, section
+
+
# ltp Compliance log parsing
class LtpComplianceParser(object):
def __init__(self):
diff --git a/meta/recipes-extended/ltp/ltp_20260130.bb<http://ltp_20260130.bb/> b/meta/recipes-extended/ltp/ltp_20260130.bb<http://ltp_20260130.bb/>
index dcd1e81398..1ff20a7898 100644
--- a/meta/recipes-extended/ltp/ltp_20260130.bb<http://ltp_20260130.bb/>
+++ b/meta/recipes-extended/ltp/ltp_20260130.bb<http://ltp_20260130.bb/>
@@ -104,6 +104,7 @@ RDEPENDS:${PN} = "\
net-tools \
perl \
python3-core \
+ python3-kirk \
procps \
quota \
unzip \
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#233871): https://lists.openembedded.org/g/openembedded-core/message/233871
Mute This Topic: https://lists.openembedded.org/mt/118498904/1050810
Group Owner: openembedded-core+owner@lists.openembedded.org<mailto:openembedded-core%2Bowner@lists.openembedded.org>
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [bruce.ashfield@gmail.com<mailto:bruce.ashfield@gmail.com>]
-=-=-=-=-=-=-=-=-=-=-=-
--
- Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end
- "Use the force Harry" - Gandalf, Star Trek II
[-- Attachment #1.2: Type: text/html, Size: 20853 bytes --]
[-- Attachment #2: math-raw.log --]
[-- Type: application/octet-stream, Size: 1456 bytes --]
Host information
Hostname: qemux86-64
Python: 3.14.3 (main, Feb 3 2026, 15:32:20) [GCC 15.2.0]
Directory: /tmp/kirk.root/tmp02mw5o2n
Connecting to SUT: default
Suite: math
───────────
abs01: pass (0.003s)
atof01: pass (0.003s)
float_bessel: pass (0.504s)
float_exp_log: pass (0.304s)
float_iperb: pass (0.129s)
float_power: pass (0.246s)
float_trigo: pass (0.295s)
fptest01: pass (0.002s)
fptest02: pass (0.002s)
nextafter01: pass (0.002s)
Execution time: 1.615s
Disconnecting from SUT: default
Target information
──────────────────
Kernel: Linux 6.18.13-yocto-standard #1 SMP PREEMPT_DYNAMIC Tue Mar 3 16:48:55 UTC 2026
Cmdline: root=/dev/vda
rw
ip=192.168.7.2::192.168.7.1:255.255.255.0::eth0:off:8.8.8.8
net.ifnames=0
console=ttyS0
console=ttyS1
oprofile.timer=1
tsc=reliable
no_timer_check
rcupdate.rcu_expedited=1
swiotlb=0
printk.time=1
Machine: unknown
Arch: x86_64
RAM: 222368 kB
Swap: 0 kB
Distro: nodistro nodistro.0
────────────────────────
TEST SUMMARY
────────────────────────
Suite: math
Runtime: 1.489s
Runs: 10
Results:
Passed: 22
Failed: 0
Broken: 0
Skipped: 0
Warnings: 0
Session stopped
[-- Attachment #3: math.old --]
[-- Type: application/octet-stream, Size: 788 bytes --]
startup='Wed Mar 25 13:27:57 2026'
tag=abs01 stime=1774445277 dur=0 exit=exited stat=0 core=no cu=0 cs=0
tag=atof01 stime=1774445277 dur=0 exit=exited stat=0 core=no cu=0 cs=0
tag=float_bessel stime=1774445277 dur=0 exit=exited stat=0 core=no cu=170 cs=12
tag=float_exp_log stime=1774445277 dur=0 exit=exited stat=0 core=no cu=79 cs=8
tag=float_iperb stime=1774445277 dur=1 exit=exited stat=0 core=no cu=31 cs=3
tag=float_power stime=1774445278 dur=0 exit=exited stat=0 core=no cu=49 cs=7
tag=float_trigo stime=1774445278 dur=0 exit=exited stat=0 core=no cu=87 cs=7
tag=fptest01 stime=1774445278 dur=0 exit=exited stat=0 core=no cu=0 cs=0
tag=fptest02 stime=1774445278 dur=0 exit=exited stat=0 core=no cu=0 cs=0
tag=nextafter01 stime=1774445278 dur=0 exit=exited stat=0 core=no cu=0 cs=0
[-- Attachment #4: math.json --]
[-- Type: application/octet-stream, Size: 54591 bytes --]
{
"results": [
{
"test_fqn": "abs01",
"status": "pass",
"test": {
"command": "abs01",
"arguments": [],
"log": "abs01 1 TPASS : Test passed\nabs01 2 TPASS : Test passed\nabs01 3 TPASS : Test passed\n",
"retval": [
"0"
],
"duration": 0.002702474594116211,
"failed": 0,
"passed": 3,
"broken": 0,
"skipped": 0,
"warnings": 0,
"result": "pass"
}
},
{
"test_fqn": "atof01",
"status": "pass",
"test": {
"command": "atof01",
"arguments": [],
"log": "atof01 1 TPASS : Test passed\natof01 2 TPASS : Test passed\natof01 3 TPASS : Test passed\natof01 4 TPASS : Test passed\n",
"retval": [
"0"
],
"duration": 0.003118753433227539,
"failed": 0,
"passed": 4,
"broken": 0,
"skipped": 0,
"warnings": 0,
"result": "pass"
}
},
{
"test_fqn": "float_bessel",
"status": "pass",
"test": {
"command": "float_bessel",
"arguments": [
"-v"
],
"log": "float_bessel 0 TINFO : Using /tmp/LTP_flotqCEd8 as tmpdir (tmpfs filesystem)\nfloat_bessel 1 TPASS : Test passed\nfloat_bessel 0 TINFO : float_bessel: will run for 500 loops; using . as a data directory\nfloat_bessel 0 TINFO : float_bessel: will run 5 functions, 20 threads per function\nfloat_bessel 0 TINFO : signal handler 140235838535360 started\nfloat_bessel 0 TINFO : Signal handler starts waiting...\nfloat_bessel 0 TINFO : initial thread: Waiting for 100 threads to finish\nfloat_bessel 0 TINFO : thread 0 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 1 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 2 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 3 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 4 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 5 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 6 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 7 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 8 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 9 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 10 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 11 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 12 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 13 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 14 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 15 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 16 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 17 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 18 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 19 (j0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 20 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 21 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 22 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 23 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 24 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 25 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 26 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 27 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 28 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 29 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 30 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 31 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 32 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 33 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 34 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 35 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 36 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 37 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 38 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 39 (j1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 40 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 41 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 42 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 43 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 44 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 45 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 46 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 47 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 48 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 49 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 50 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 51 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 52 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 53 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 54 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 55 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 56 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 57 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 58 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 59 (y0) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 60 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 61 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 62 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 63 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 64 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 65 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 66 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 67 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 68 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 69 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 70 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 71 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 72 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 73 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 74 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 75 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 76 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 77 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 78 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 79 (y1) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 80 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 81 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 82 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 83 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 84 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 85 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 86 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 87 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 88 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 89 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 90 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 91 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 92 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 93 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 94 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 95 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 96 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 97 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 98 (lgamma) terminated successfully 500 loops\nfloat_bessel 0 TINFO : thread 99 (lgamma) terminated successfully 500 loops\nfloat_bessel 1 TPASS : Test passed\n",
"retval": [
"0"
],
"duration": 0.50392746925354,
"failed": 0,
"passed": 2,
"broken": 0,
"skipped": 0,
"warnings": 0,
"result": "pass"
}
},
{
"test_fqn": "float_exp_log",
"status": "pass",
"test": {
"command": "float_exp_log",
"arguments": [
"-v"
],
"log": "float_exp_log 0 TINFO : Using /tmp/LTP_floHkFW54 as tmpdir (tmpfs filesystem)\nfloat_exp_log 1 TPASS : Test passed\nfloat_exp_log 0 TINFO : float_exp_log: will run for 500 loops; using . as a data directory\nfloat_exp_log 0 TINFO : float_exp_log: will run 7 functions, 20 threads per function\nfloat_exp_log 0 TINFO : signal handler 140533486483136 started\nfloat_exp_log 0 TINFO : Signal handler starts waiting...\nfloat_exp_log 0 TINFO : initial thread: Waiting for 140 threads to finish\nfloat_exp_log 0 TINFO : thread 0 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 1 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 2 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 3 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 4 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 5 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 6 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 7 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 8 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 9 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 10 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 11 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 12 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 13 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 14 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 15 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 16 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 17 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 18 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 19 (exp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 20 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 21 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 22 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 23 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 24 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 25 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 26 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 27 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 28 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 29 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 30 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 31 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 32 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 33 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 34 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 35 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 36 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 37 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 38 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 39 (log) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 40 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 41 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 42 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 43 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 44 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 45 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 46 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 47 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 48 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 49 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 50 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 51 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 52 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 53 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 54 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 55 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 56 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 57 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 58 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 59 (log10) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 60 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 61 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 62 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 63 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 64 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 65 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 66 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 67 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 68 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 69 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 70 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 71 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 72 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 73 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 74 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 75 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 76 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 77 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 78 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 79 (frexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 80 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 81 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 82 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 83 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 84 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 85 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 86 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 87 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 88 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 89 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 90 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 91 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 92 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 93 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 94 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 95 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 96 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 97 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 98 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 99 (hypot) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 100 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 101 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 102 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 103 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 104 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 105 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 106 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 107 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 108 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 109 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 110 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 111 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 112 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 113 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 114 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 115 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 116 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 117 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 118 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 119 (ldexp) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 120 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 121 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 122 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 123 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 124 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 125 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 126 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 127 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 128 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 129 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 130 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 131 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 132 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 133 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 134 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 135 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 136 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 137 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 138 (modf) terminated successfully 500 loops\nfloat_exp_log 0 TINFO : thread 139 (modf) terminated successfully 500 loops\nfloat_exp_log 1 TPASS : Test passed\n",
"retval": [
"0"
],
"duration": 0.30411815643310547,
"failed": 0,
"passed": 2,
"broken": 0,
"skipped": 0,
"warnings": 0,
"result": "pass"
}
},
{
"test_fqn": "float_iperb",
"status": "pass",
"test": {
"command": "float_iperb",
"arguments": [
"-v"
],
"log": "float_iperb 0 TINFO : Using /tmp/LTP_floU8iaXy as tmpdir (tmpfs filesystem)\nfloat_iperb 1 TPASS : Test passed\nfloat_iperb 0 TINFO : float_iperb: will run for 500 loops; using . as a data directory\nfloat_iperb 0 TINFO : float_iperb: will run 3 functions, 20 threads per function\nfloat_iperb 0 TINFO : signal handler 140145350715072 started\nfloat_iperb 0 TINFO : Signal handler starts waiting...\nfloat_iperb 0 TINFO : initial thread: Waiting for 60 threads to finish\nfloat_iperb 0 TINFO : thread 0 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 1 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 2 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 3 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 4 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 5 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 6 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 7 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 8 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 9 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 10 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 11 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 12 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 13 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 14 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 15 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 16 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 17 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 18 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 19 (cosh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 20 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 21 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 22 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 23 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 24 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 25 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 26 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 27 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 28 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 29 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 30 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 31 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 32 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 33 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 34 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 35 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 36 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 37 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 38 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 39 (sinh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 40 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 41 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 42 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 43 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 44 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 45 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 46 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 47 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 48 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 49 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 50 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 51 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 52 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 53 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 54 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 55 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 56 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 57 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 58 (tanh) terminated successfully 500 loops\nfloat_iperb 0 TINFO : thread 59 (tanh) terminated successfully 500 loops\nfloat_iperb 1 TPASS : Test passed\n",
"retval": [
"0"
],
"duration": 0.1285076141357422,
"failed": 0,
"passed": 2,
"broken": 0,
"skipped": 0,
"warnings": 0,
"result": "pass"
}
},
{
"test_fqn": "float_power",
"status": "pass",
"test": {
"command": "float_power",
"arguments": [
"-v"
],
"log": "float_power 0 TINFO : Using /tmp/LTP_floxqpeVZ as tmpdir (tmpfs filesystem)\nfloat_power 1 TPASS : Test passed\nfloat_power 0 TINFO : float_power: will run for 500 loops; using . as a data directory\nfloat_power 0 TINFO : float_power: will run 6 functions, 20 threads per function\nfloat_power 0 TINFO : signal handler 139673779201728 started\nfloat_power 0 TINFO : Signal handler starts waiting...\nfloat_power 0 TINFO : initial thread: Waiting for 120 threads to finish\nfloat_power 0 TINFO : thread 0 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 1 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 2 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 3 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 4 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 5 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 6 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 7 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 8 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 9 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 10 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 11 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 12 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 13 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 14 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 15 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 16 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 17 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 18 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 19 (ceil) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 20 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 21 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 22 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 23 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 24 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 25 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 26 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 27 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 28 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 29 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 30 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 31 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 32 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 33 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 34 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 35 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 36 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 37 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 38 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 39 (fabs) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 40 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 41 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 42 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 43 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 44 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 45 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 46 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 47 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 48 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 49 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 50 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 51 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 52 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 53 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 54 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 55 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 56 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 57 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 58 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 59 (floor) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 60 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 61 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 62 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 63 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 64 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 65 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 66 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 67 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 68 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 69 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 70 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 71 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 72 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 73 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 74 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 75 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 76 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 77 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 78 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 79 (fmod) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 80 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 81 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 82 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 83 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 84 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 85 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 86 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 87 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 88 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 89 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 90 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 91 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 92 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 93 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 94 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 95 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 96 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 97 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 98 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 99 (pow) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 100 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 101 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 102 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 103 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 104 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 105 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 106 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 107 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 108 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 109 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 110 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 111 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 112 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 113 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 114 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 115 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 116 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 117 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 118 (sqrt) terminated successfully 500 loops\nfloat_power 0 TINFO : thread 119 (sqrt) terminated successfully 500 loops\nfloat_power 1 TPASS : Test passed\n",
"retval": [
"0"
],
"duration": 0.24572324752807617,
"failed": 0,
"passed": 2,
"broken": 0,
"skipped": 0,
"warnings": 0,
"result": "pass"
}
},
{
"test_fqn": "float_trigo",
"status": "pass",
"test": {
"command": "float_trigo",
"arguments": [
"-v"
],
"log": "float_trigo 0 TINFO : Using /tmp/LTP_floLuy12y as tmpdir (tmpfs filesystem)\nfloat_trigo 1 TPASS : Test passed\nfloat_trigo 0 TINFO : float_trigo: will run for 500 loops; using . as a data directory\nfloat_trigo 0 TINFO : float_trigo: will run 7 functions, 20 threads per function\nfloat_trigo 0 TINFO : signal handler 140034307655360 started\nfloat_trigo 0 TINFO : Signal handler starts waiting...\nfloat_trigo 0 TINFO : initial thread: Waiting for 140 threads to finish\nfloat_trigo 0 TINFO : thread 0 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 1 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 2 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 3 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 4 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 5 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 6 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 7 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 8 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 9 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 10 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 11 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 12 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 13 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 14 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 15 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 16 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 17 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 18 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 19 (acos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 20 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 21 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 22 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 23 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 24 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 25 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 26 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 27 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 28 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 29 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 30 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 31 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 32 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 33 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 34 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 35 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 36 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 37 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 38 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 39 (asin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 40 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 41 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 42 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 43 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 44 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 45 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 46 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 47 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 48 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 49 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 50 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 51 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 52 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 53 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 54 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 55 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 56 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 57 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 58 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 59 (atan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 60 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 61 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 62 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 63 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 64 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 65 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 66 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 67 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 68 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 69 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 70 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 71 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 72 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 73 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 74 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 75 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 76 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 77 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 78 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 79 (atan2) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 80 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 81 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 82 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 83 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 84 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 85 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 86 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 87 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 88 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 89 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 90 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 91 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 92 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 93 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 94 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 95 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 96 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 97 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 98 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 99 (cos) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 100 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 101 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 102 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 103 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 104 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 105 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 106 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 107 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 108 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 109 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 110 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 111 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 112 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 113 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 114 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 115 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 116 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 117 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 118 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 119 (sin) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 120 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 121 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 122 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 123 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 124 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 125 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 126 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 127 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 128 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 129 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 130 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 131 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 132 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 133 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 134 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 135 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 136 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 137 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 138 (tan) terminated successfully 500 loops\nfloat_trigo 0 TINFO : thread 139 (tan) terminated successfully 500 loops\nfloat_trigo 1 TPASS : Test passed\n",
"retval": [
"0"
],
"duration": 0.29506659507751465,
"failed": 0,
"passed": 2,
"broken": 0,
"skipped": 0,
"warnings": 0,
"result": "pass"
}
},
{
"test_fqn": "fptest01",
"status": "pass",
"test": {
"command": "fptest01",
"arguments": [],
"log": "fptest01 1 TPASS : PASS\n",
"retval": [
"0"
],
"duration": 0.002103090286254883,
"failed": 0,
"passed": 1,
"broken": 0,
"skipped": 0,
"warnings": 0,
"result": "pass"
}
},
{
"test_fqn": "fptest02",
"status": "pass",
"test": {
"command": "fptest02",
"arguments": [],
"log": "fptest02 1 TPASS : PASS\n",
"retval": [
"0"
],
"duration": 0.0020384788513183594,
"failed": 0,
"passed": 1,
"broken": 0,
"skipped": 0,
"warnings": 0,
"result": "pass"
}
},
{
"test_fqn": "nextafter01",
"status": "pass",
"test": {
"command": "nextafter01",
"arguments": [],
"log": "nextafter01 1 TPASS : Test passed\nnextafter01 2 TPASS : Test passed\nnextafter01 3 TPASS : Test passed\n",
"retval": [
"0"
],
"duration": 0.0015633106231689453,
"failed": 0,
"passed": 3,
"broken": 0,
"skipped": 0,
"warnings": 0,
"result": "pass"
}
}
],
"stats": {
"runtime": 1.4888691902160645,
"passed": 22,
"failed": 0,
"broken": 0,
"skipped": 0,
"warnings": 0
},
"environment": {
"distribution": "nodistro",
"distribution_version": "nodistro.0",
"kernel": "Linux 6.18.13-yocto-standard #1 SMP PREEMPT_DYNAMIC Tue Mar 3 16:48:55 UTC 2026",
"cmdline": "root=/dev/vda rw ip=192.168.7.2::192.168.7.1:255.255.255.0::eth0:off:8.8.8.8 net.ifnames=0 console=ttyS0 console=ttyS1 oprofile.timer=1 tsc=reliable no_timer_check rcupdate.rcu_expedited=1 swiotlb=0 printk.time=1",
"arch": "x86_64",
"cpu": "unknown",
"swap": "0 kB",
"RAM": "222368 kB"
}
}
[-- Attachment #5: math-raw.log.old --]
[-- Type: application/octet-stream, Size: 49419 bytes --]
-------------------------------------------
INFO: runltp script is deprecated, try kirk
https://github.com/linux-test-project/kirk
-------------------------------------------
INFO: creating /opt/ltp/output directory
Checking for required user/group ids
'root' user id and group found.
'nobody' user id and group found.
'bin' user id and group found.
'daemon' user id and group found.
Users group found.
Sys group found.
Required users/groups exist.
no big block device was specified on commandline.
Tests which require a big block device are disabled.
You can specify it with option -z
INFO: Test start time: Wed Mar 25 13:27:57 UTC 2026
COMMAND: /opt/ltp/bin/ltp-pan -q -e -S -a 297 -n 297 -f /opt/ltp/ltp-gQGXQbno7N/alltests -l /opt/ltp/results/math -C /opt/ltp/output/LTP_RUN_ON-math.failed -T /opt/ltp/output/LTP_RUN_ON-math.tconf
LOG File: /opt/ltp/results/math
FAILED COMMAND File: /opt/ltp/output/LTP_RUN_ON-math.failed
TCONF COMMAND File: /opt/ltp/output/LTP_RUN_ON-math.tconf
Running tests.......
abs01 1 TPASS : Test passed
abs01 2 TPASS : Test passed
abs01 3 TPASS : Test passed
atof01 1 TPASS : Test passed
atof01 2 TPASS : Test passed
atof01 3 TPASS : Test passed
atof01 4 TPASS : Test passed
float_bessel 0 TINFO : Using /opt/ltp/ltp-gQGXQbno7N/LTP_floLcoEGA as tmpdir (ext2/ext3/ext4 filesystem)
float_bessel 1 TPASS : Test passed
float_bessel 0 TINFO : float_bessel: will run for 500 loops; using . as a data directory
float_bessel 0 TINFO : float_bessel: will run 5 functions, 20 threads per function
float_bessel 0 TINFO : signal handler 140250200012480 started
float_bessel 0 TINFO : Signal handler starts waiting...
float_bessel 0 TINFO : initial thread: Waiting for 100 threads to finish
float_bessel 0 TINFO : thread 0 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 1 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 2 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 3 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 4 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 5 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 6 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 7 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 8 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 9 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 10 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 11 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 12 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 13 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 14 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 15 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 16 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 17 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 18 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 19 (j0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 20 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 21 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 22 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 23 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 24 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 25 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 26 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 27 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 28 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 29 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 30 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 31 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 32 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 33 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 34 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 35 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 36 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 37 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 38 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 39 (j1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 40 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 41 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 42 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 43 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 44 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 45 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 46 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 47 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 48 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 49 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 50 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 51 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 52 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 53 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 54 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 55 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 56 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 57 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 58 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 59 (y0) terminated successfully 500 loops
float_bessel 0 TINFO : thread 60 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 61 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 62 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 63 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 64 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 65 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 66 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 67 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 68 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 69 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 70 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 71 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 72 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 73 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 74 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 75 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 76 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 77 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 78 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 79 (y1) terminated successfully 500 loops
float_bessel 0 TINFO : thread 80 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 81 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 82 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 83 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 84 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 85 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 86 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 87 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 88 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 89 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 90 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 91 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 92 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 93 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 94 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 95 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 96 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 97 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 98 (lgamma) terminated successfully 500 loops
float_bessel 0 TINFO : thread 99 (lgamma) terminated successfully 500 loops
float_bessel 1 TPASS : Test passed
float_exp_log 0 TINFO : Using /opt/ltp/ltp-gQGXQbno7N/LTP_floOlpHE5 as tmpdir (ext2/ext3/ext4 filesystem)
float_exp_log 1 TPASS : Test passed
float_exp_log 0 TINFO : float_exp_log: will run for 500 loops; using . as a data directory
float_exp_log 0 TINFO : float_exp_log: will run 7 functions, 20 threads per function
float_exp_log 0 TINFO : signal handler 140433383937728 started
float_exp_log 0 TINFO : Signal handler starts waiting...
float_exp_log 0 TINFO : initial thread: Waiting for 140 threads to finish
float_exp_log 0 TINFO : thread 0 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 1 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 2 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 3 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 4 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 5 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 6 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 7 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 8 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 9 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 10 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 11 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 12 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 13 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 14 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 15 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 16 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 17 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 18 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 19 (exp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 20 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 21 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 22 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 23 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 24 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 25 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 26 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 27 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 28 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 29 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 30 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 31 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 32 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 33 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 34 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 35 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 36 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 37 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 38 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 39 (log) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 40 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 41 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 42 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 43 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 44 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 45 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 46 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 47 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 48 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 49 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 50 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 51 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 52 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 53 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 54 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 55 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 56 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 57 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 58 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 59 (log10) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 60 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 61 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 62 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 63 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 64 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 65 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 66 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 67 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 68 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 69 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 70 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 71 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 72 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 73 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 74 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 75 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 76 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 77 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 78 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 79 (frexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 80 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 81 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 82 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 83 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 84 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 85 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 86 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 87 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 88 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 89 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 90 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 91 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 92 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 93 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 94 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 95 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 96 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 97 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 98 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 99 (hypot) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 100 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 101 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 102 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 103 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 104 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 105 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 106 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 107 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 108 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 109 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 110 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 111 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 112 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 113 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 114 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 115 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 116 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 117 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 118 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 119 (ldexp) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 120 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 121 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 122 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 123 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 124 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 125 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 126 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 127 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 128 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 129 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 130 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 131 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 132 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 133 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 134 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 135 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 136 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 137 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 138 (modf) terminated successfully 500 loops
float_exp_log 0 TINFO : thread 139 (modf) terminated successfully 500 loops
float_exp_log 1 TPASS : Test passed
float_iperb 0 TINFO : Using /opt/ltp/ltp-gQGXQbno7N/LTP_flonjrQPi as tmpdir (ext2/ext3/ext4 filesystem)
float_iperb 1 TPASS : Test passed
float_iperb 0 TINFO : float_iperb: will run for 500 loops; using . as a data directory
float_iperb 0 TINFO : float_iperb: will run 3 functions, 20 threads per function
float_iperb 0 TINFO : signal handler 139884345116352 started
float_iperb 0 TINFO : Signal handler starts waiting...
float_iperb 0 TINFO : initial thread: Waiting for 60 threads to finish
float_iperb 0 TINFO : thread 0 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 1 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 2 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 3 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 4 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 5 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 6 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 7 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 8 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 9 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 10 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 11 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 12 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 13 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 14 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 15 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 16 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 17 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 18 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 19 (cosh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 20 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 21 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 22 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 23 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 24 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 25 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 26 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 27 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 28 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 29 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 30 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 31 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 32 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 33 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 34 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 35 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 36 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 37 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 38 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 39 (sinh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 40 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 41 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 42 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 43 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 44 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 45 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 46 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 47 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 48 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 49 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 50 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 51 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 52 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 53 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 54 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 55 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 56 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 57 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 58 (tanh) terminated successfully 500 loops
float_iperb 0 TINFO : thread 59 (tanh) terminated successfully 500 loops
float_iperb 1 TPASS : Test passed
float_power 0 TINFO : Using /opt/ltp/ltp-gQGXQbno7N/LTP_flovDjPAv as tmpdir (ext2/ext3/ext4 filesystem)
float_power 1 TPASS : Test passed
float_power 0 TINFO : float_power: will run for 500 loops; using . as a data directory
float_power 0 TINFO : float_power: will run 6 functions, 20 threads per function
float_power 0 TINFO : signal handler 140651130738368 started
float_power 0 TINFO : Signal handler starts waiting...
float_power 0 TINFO : initial thread: Waiting for 120 threads to finish
float_power 0 TINFO : thread 0 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 1 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 2 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 3 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 4 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 5 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 6 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 7 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 8 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 9 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 10 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 11 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 12 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 13 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 14 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 15 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 16 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 17 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 18 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 19 (ceil) terminated successfully 500 loops
float_power 0 TINFO : thread 20 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 21 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 22 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 23 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 24 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 25 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 26 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 27 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 28 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 29 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 30 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 31 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 32 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 33 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 34 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 35 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 36 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 37 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 38 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 39 (fabs) terminated successfully 500 loops
float_power 0 TINFO : thread 40 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 41 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 42 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 43 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 44 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 45 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 46 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 47 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 48 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 49 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 50 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 51 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 52 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 53 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 54 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 55 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 56 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 57 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 58 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 59 (floor) terminated successfully 500 loops
float_power 0 TINFO : thread 60 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 61 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 62 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 63 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 64 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 65 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 66 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 67 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 68 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 69 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 70 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 71 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 72 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 73 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 74 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 75 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 76 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 77 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 78 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 79 (fmod) terminated successfully 500 loops
float_power 0 TINFO : thread 80 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 81 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 82 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 83 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 84 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 85 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 86 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 87 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 88 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 89 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 90 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 91 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 92 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 93 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 94 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 95 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 96 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 97 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 98 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 99 (pow) terminated successfully 500 loops
float_power 0 TINFO : thread 100 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 101 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 102 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 103 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 104 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 105 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 106 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 107 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 108 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 109 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 110 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 111 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 112 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 113 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 114 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 115 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 116 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 117 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 118 (sqrt) terminated successfully 500 loops
float_power 0 TINFO : thread 119 (sqrt) terminated successfully 500 loops
float_power 1 TPASS : Test passed
float_trigo 0 TINFO : Using /opt/ltp/ltp-gQGXQbno7N/LTP_floEeeHNL as tmpdir (ext2/ext3/ext4 filesystem)
float_trigo 1 TPASS : Test passed
float_trigo 0 TINFO : float_trigo: will run for 500 loops; using . as a data directory
float_trigo 0 TINFO : float_trigo: will run 7 functions, 20 threads per function
float_trigo 0 TINFO : signal handler 139824859399872 started
float_trigo 0 TINFO : Signal handler starts waiting...
float_trigo 0 TINFO : initial thread: Waiting for 140 threads to finish
float_trigo 0 TINFO : thread 0 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 1 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 2 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 3 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 4 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 5 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 6 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 7 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 8 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 9 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 10 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 11 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 12 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 13 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 14 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 15 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 16 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 17 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 18 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 19 (acos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 20 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 21 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 22 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 23 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 24 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 25 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 26 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 27 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 28 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 29 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 30 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 31 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 32 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 33 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 34 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 35 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 36 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 37 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 38 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 39 (asin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 40 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 41 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 42 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 43 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 44 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 45 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 46 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 47 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 48 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 49 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 50 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 51 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 52 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 53 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 54 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 55 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 56 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 57 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 58 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 59 (atan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 60 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 61 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 62 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 63 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 64 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 65 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 66 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 67 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 68 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 69 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 70 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 71 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 72 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 73 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 74 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 75 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 76 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 77 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 78 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 79 (atan2) terminated successfully 500 loops
float_trigo 0 TINFO : thread 80 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 81 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 82 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 83 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 84 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 85 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 86 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 87 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 88 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 89 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 90 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 91 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 92 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 93 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 94 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 95 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 96 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 97 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 98 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 99 (cos) terminated successfully 500 loops
float_trigo 0 TINFO : thread 100 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 101 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 102 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 103 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 104 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 105 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 106 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 107 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 108 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 109 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 110 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 111 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 112 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 113 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 114 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 115 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 116 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 117 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 118 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 119 (sin) terminated successfully 500 loops
float_trigo 0 TINFO : thread 120 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 121 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 122 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 123 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 124 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 125 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 126 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 127 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 128 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 129 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 130 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 131 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 132 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 133 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 134 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 135 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 136 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 137 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 138 (tan) terminated successfully 500 loops
float_trigo 0 TINFO : thread 139 (tan) terminated successfully 500 loops
float_trigo 1 TPASS : Test passed
fptest01 1 TPASS : PASS
fptest02 1 TPASS : PASS
nextafter01 1 TPASS : Test passed
nextafter01 2 TPASS : Test passed
nextafter01 3 TPASS : Test passed
INFO: ltp-pan reported all tests PASS
LTP Version: 20260130
INFO: Test end time: Wed Mar 25 13:27:58 UTC 2026
###############################################################
Done executing testcases.
LTP Version: 20260130
###############################################################
-------------------------------------------
INFO: runltp script is deprecated, try kirk
https://github.com/linux-test-project/kirk
-------------------------------------------
^ permalink raw reply related [flat|nested] 19+ messages in thread
* RE: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 13:02 ` Alexander Kanavin
@ 2026-03-25 13:45 ` Daniel Turull
0 siblings, 0 replies; 19+ messages in thread
From: Daniel Turull @ 2026-03-25 13:45 UTC (permalink / raw)
To: alex.kanavin@gmail.com, bruce.ashfield@gmail.com
Cc: openembedded-core@lists.openembedded.org, pratik.farkase@est.tech,
richard.purdie@linuxfoundation.org
Hi,
I added for transparency the "assisted by". I have tested the patch with the ltp math test set to be able to do verify it's output. It generates two files: a raw file with the log and a json file. The default output from kirk is a json file with the results, instead of dumping them into a stdout.
I'm attaching the output with the patches:
ls tmp/work/qemux86_64-oe-linux/core-image-minimal/1.0/testimage/ltp_log/
math.json math-raw.log
I'll modify the commit message to reflect that.
Daniel
> -----Original Message-----
> From: openembedded-core@lists.openembedded.org <openembedded-
> core@lists.openembedded.org> On Behalf Of Alexander Kanavin via
> lists.openembedded.org
> Sent: Wednesday, 25 March 2026 14:02
> To: bruce.ashfield@gmail.com
> Cc: Daniel Turull <daniel.turull@ericsson.com>; openembedded-
> core@lists.openembedded.org; pratik.farkase@est.tech;
> richard.purdie@linuxfoundation.org
> Subject: Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
>
> On Wed, 25 Mar 2026 at 13:58, Bruce Ashfield via lists.openembedded.org
> <bruce.ashfield=gmail.com@lists.openembedded.org> wrote:
> > For something like this to be considered for merging, I'd have
> > expected a lot more information.
> >
> > Is the test coverage the same as before ?
> > What are the results of the tests versus the previous harness ?
> > Is it truly a drop in replacement for the previous runner ?
> > .. etc
> >
> > Switching the executable is the easy part, ensuring that it actually
> > works a replacement is the hard part.
>
> >> Assisted-by: Claude, Anthropic
>
> I have to add that this line ^^^ doesn't inspire confidence in the patch either. On
> the contrary, it raises suspicions that the code was written quickly after the issue
> was raised yesterday in the tech meeting, and wasn't actually tested well or at
> all. The commit message
> *must* reassure that it was.
>
> Alex
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 13:44 ` Daniel Turull
@ 2026-03-25 14:22 ` Bruce Ashfield
2026-03-25 14:41 ` Daniel Turull
0 siblings, 1 reply; 19+ messages in thread
From: Bruce Ashfield @ 2026-03-25 14:22 UTC (permalink / raw)
To: Daniel Turull
Cc: openembedded-core@lists.openembedded.org, pratik.farkase@est.tech,
richard.purdie@linuxfoundation.org
[-- Attachment #1: Type: text/plain, Size: 10889 bytes --]
On Wed, Mar 25, 2026 at 9:44 AM Daniel Turull <daniel.turull@ericsson.com>
wrote:
> Hi,
>
>
>
> Kirk is official way to run ltp since runltp has been dropped. Richard
> mentioned yesterday in the Weekly Project Engineering Sync if no one was
> fixing the runltp issue, he will drop ltp from oe-core.
>
>
>
Yes, we know this, it's been mentioned for months. We are
fundamentally too late for the LTS release in my opinion, since
Richard would likely be left fixing issues with LTP failures that
could gate the release.
It isn't even the results that are the issue. How will this perform
on a fully loaded machine (i.e the auto builder), will we get
inconsistent results ? Intermittent failures ? Different results based
on the architecture ?
> The test coverage is the same since the logic there is not touched but the
> output is different. Now it is a json file with the results, which is
> machine readable without any extra parsing. Do we need a conversion from
> the new to the old to keep compatibility?
>
Only if it impacts the reset of the QA or Autobuilder testing. If
everything in the test stack continues to work with the new
format, I'd say it is ok as-is.
>
>
> I’m attaching the old test output with the new one for the math test suite.
>
> New: math-raw.log and math.json
>
> Old: math.old math-raw.log.old.
>
>
>
> You can see at the end of the old output:
>
This all needs to be in the commit itself. As well as a results
summary from all the supported primary architectures.
Bruce
>
>
> -------------------------------------------
>
> INFO: runltp script is deprecated, try kirk
>
> https://github.com/linux-test-project/kirk
>
> -------------------------------------------
>
>
>
> Best regards,
>
> Daniel
>
>
>
>
>
> *From:* Bruce Ashfield <bruce.ashfield@gmail.com>
> *Sent:* Wednesday, 25 March 2026 13:59
> *To:* Daniel Turull <daniel.turull@ericsson.com>
> *Cc:* openembedded-core@lists.openembedded.org; pratik.farkase@est.tech;
> richard.purdie@linuxfoundation.org
> *Subject:* Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
>
>
>
>
>
>
>
> On Wed, Mar 25, 2026 at 7:07 AM Daniel Turull via lists.openembedded.org
> <daniel.turull=ericsson.com@lists.openembedded.org> wrote:
>
> From: Daniel Turull <daniel.turull@ericsson.com>
>
> runltp has been removed from ltp and kirk is the official tool to
> invoke linux ltp tests.
>
>
>
> For something like this to be considered for merging, I'd have expected
>
> a lot more information.
>
>
>
> Is the test coverage the same as before ?
>
> What are the results of the tests versus the previous harness ?
>
> Is it truly a drop in replacement for the previous runner ?
>
> .. etc
>
>
>
> Switching the executable is the easy part, ensuring that it actually works
>
> a replacement is the hard part.
>
>
>
> Bruce
>
>
>
>
>
>
>
> See:
>
> https://github.com/linux-test-project/ltp/commit/6efd3605dc005c3ed135b463f182174e24bdce1b
>
> Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
> Assisted-by: Claude, Anthropic
> ---
> meta/lib/oeqa/runtime/cases/ltp.py | 16 ++++++-------
> meta/lib/oeqa/runtime/cases/ltp_stress.py | 16 +++++++++----
> meta/lib/oeqa/utils/logparser.py | 29 +++++++++++++++++++++++
> meta/recipes-extended/ltp/ltp_20260130.bb | 1 +
> 4 files changed, 50 insertions(+), 12 deletions(-)
>
> diff --git a/meta/lib/oeqa/runtime/cases/ltp.py
> b/meta/lib/oeqa/runtime/cases/ltp.py
> index 0ffdbe23e4..11c4814090 100644
> --- a/meta/lib/oeqa/runtime/cases/ltp.py
> +++ b/meta/lib/oeqa/runtime/cases/ltp.py
> @@ -12,7 +12,7 @@ import pprint
> from oeqa.runtime.case import OERuntimeTestCase
> from oeqa.core.decorator.depends import OETestDepends
> from oeqa.runtime.decorator.package import OEHasPackage
> -from oeqa.utils.logparser import LtpParser
> +from oeqa.utils.logparser import LtpKirkParser
>
> class LtpTestBase(OERuntimeTestCase):
>
> @@ -66,9 +66,9 @@ class LtpTest(LtpTestBase):
>
> def runltp(self, ltp_group):
> # LTP appends to log files, so ensure we start with a clean
> log
> - self.target.deleteFiles("/opt/ltp/results/", ltp_group)
> + self.target.deleteFiles("/opt/ltp/results/", "%s.json" %
> ltp_group)
>
> - cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l
> /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
> + cmd = 'kirk --run-suite %s --json-report
> /opt/ltp/results/%s.json -n' % (ltp_group, ltp_group)
>
> starttime = time.time()
> (status, output) = self.target.run(cmd, timeout=1200)
> @@ -87,14 +87,14 @@ class LtpTest(LtpTestBase):
> self.extras['ltpresult.rawlogs']['log'] =
> self.extras['ltpresult.rawlogs']['log'] + output
>
> # Copy the machine-readable test results locally so we can
> parse it
> - dst = os.path.join(self.ltptest_log_dir, ltp_group)
> - remote_src = "/opt/ltp/results/%s" % ltp_group
> + dst = os.path.join(self.ltptest_log_dir, "%s.json" %
> ltp_group)
> + remote_src = "/opt/ltp/results/%s.json" % ltp_group
> (status, output) = self.target.copyFrom(remote_src, dst, True)
> if status:
> msg = 'File could not be copied. Output: %s' % output
> self.target.logger.warning(msg)
>
> - parser = LtpParser()
> + parser = LtpKirkParser()
> results, sections = parser.parse(dst)
>
> sections['duration'] = int(endtime-starttime)
> @@ -113,9 +113,9 @@ class LtpTest(LtpTestBase):
>
> # LTP runtime tests
> @OETestDepends(['ssh.SSHTest.test_ssh'])
> - @OEHasPackage(["ltp"])
> + @OEHasPackage(["ltp", "python3-kirk"])
> def test_ltp_help(self):
> - (status, output) = self.target.run('/opt/ltp/runltp --help')
> + (status, output) = self.target.run('kirk --help')
> msg = 'Failed to get ltp help. Output: %s' % output
> self.assertEqual(status, 0, msg=msg)
>
> diff --git a/meta/lib/oeqa/runtime/cases/ltp_stress.py
> b/meta/lib/oeqa/runtime/cases/ltp_stress.py
> index ce6f4bf59d..cf84ec1182 100644
> --- a/meta/lib/oeqa/runtime/cases/ltp_stress.py
> +++ b/meta/lib/oeqa/runtime/cases/ltp_stress.py
> @@ -13,7 +13,7 @@ from oeqa.runtime.case import OERuntimeTestCase
> from oeqa.core.decorator.depends import OETestDepends
> from oeqa.runtime.decorator.package import OEHasPackage
> from oeqa.core.decorator.data import skipIfQemu
> -from oeqa.utils.logparser import LtpParser
> +from oeqa.utils.logparser import LtpKirkParser
>
> class LtpStressBase(OERuntimeTestCase):
>
> @@ -60,7 +60,7 @@ class LtpStressBase(OERuntimeTestCase):
> class LtpStressTest(LtpStressBase):
>
> def runltp(self, stress_group):
> - cmd = '/opt/ltp/runltp -f %s -p -q 2>@1 | tee
> /opt/ltp/results/%s' % (stress_group, stress_group)
> + cmd = 'kirk --run-suite %s --json-report
> /opt/ltp/results/%s.json -n' % (stress_group, stress_group)
> starttime = time.time()
> (status, output) = self.target.run(cmd)
> endtime = time.time()
> @@ -69,8 +69,16 @@ class LtpStressTest(LtpStressBase):
>
> self.extras['ltpstressresult.rawlogs']['log'] =
> self.extras['ltpstressresult.rawlogs']['log'] + output
>
> - parser = LtpParser()
> - results, sections =
> parser.parse(os.path.join(self.ltptest_log_dir, "%s" % stress_group))
> + # Copy kirk JSON report from target
> + dst = os.path.join(self.ltptest_log_dir, "%s.json" %
> stress_group)
> + remote_src = "/opt/ltp/results/%s.json" % stress_group
> + (status, output) = self.target.copyFrom(remote_src, dst, True)
> + if status:
> + msg = 'File could not be copied. Output: %s' % output
> + self.target.logger.warning(msg)
> +
> + parser = LtpKirkParser()
> + results, sections = parser.parse(dst)
>
> runtime = int(endtime-starttime)
> sections['duration'] = runtime
> diff --git a/meta/lib/oeqa/utils/logparser.py
> b/meta/lib/oeqa/utils/logparser.py
> index c479864162..a907421fab 100644
> --- a/meta/lib/oeqa/utils/logparser.py
> +++ b/meta/lib/oeqa/utils/logparser.py
> @@ -5,6 +5,7 @@
> #
>
> import enum
> +import json
> import os
> import re
>
> @@ -158,6 +159,34 @@ class LtpParser:
> return results, section
>
>
> +class LtpKirkParser:
> + """Parse kirk JSON report into the same format as LtpParser."""
> +
> + STATUS_MAP = {
> + "pass": "PASSED",
> + "fail": "FAILED",
> + "brok": "FAILED",
> + "conf": "SKIPPED",
> + "warn": "PASSED",
> + }
> +
> + def parse(self, jsonfile):
> + with open(jsonfile, errors="replace") as f:
> + report = json.load(f)
> +
> + results = {}
> + section = {"duration": 0, "log": ""}
> +
> + for entry in report.get("results", []):
> + results[entry["test_fqn"]] =
> self.STATUS_MAP.get(entry.get("status", ""), "FAILED")
> + test = entry.get("test", {})
> + section["log"] += test.get("log", "")
> +
> + section["duration"] = int(report.get("stats", {}).get("runtime",
> 0))
> +
> + return results, section
> +
> +
> # ltp Compliance log parsing
> class LtpComplianceParser(object):
> def __init__(self):
> diff --git a/meta/recipes-extended/ltp/ltp_20260130.bb
> b/meta/recipes-extended/ltp/ltp_20260130.bb
> index dcd1e81398..1ff20a7898 100644
> --- a/meta/recipes-extended/ltp/ltp_20260130.bb
> +++ b/meta/recipes-extended/ltp/ltp_20260130.bb
> @@ -104,6 +104,7 @@ RDEPENDS:${PN} = "\
> net-tools \
> perl \
> python3-core \
> + python3-kirk \
> procps \
> quota \
> unzip \
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#233871):
> https://lists.openembedded.org/g/openembedded-core/message/233871
> Mute This Topic: https://lists.openembedded.org/mt/118498904/1050810
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> bruce.ashfield@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
>
>
> --
>
> - Thou shalt not follow the NULL pointer, for chaos and madness await thee
> at its end
> - "Use the force Harry" - Gandalf, Star Trek II
>
--
- Thou shalt not follow the NULL pointer, for chaos and madness await thee
at its end
- "Use the force Harry" - Gandalf, Star Trek II
[-- Attachment #2: Type: text/html, Size: 21201 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* RE: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 14:22 ` Bruce Ashfield
@ 2026-03-25 14:41 ` Daniel Turull
0 siblings, 0 replies; 19+ messages in thread
From: Daniel Turull @ 2026-03-25 14:41 UTC (permalink / raw)
To: bruce.ashfield@gmail.com
Cc: openembedded-core@lists.openembedded.org, pratik.farkase@est.tech,
richard.purdie@linuxfoundation.org
[-- Attachment #1: Type: text/plain, Size: 10821 bytes --]
Ok. I’ll run it with the supported architectures and update the commit message with the information.
Daniel
From: openembedded-core@lists.openembedded.org <openembedded-core@lists.openembedded.org> On Behalf Of Bruce Ashfield via lists.openembedded.org
Sent: Wednesday, 25 March 2026 15:22
To: Daniel Turull <daniel.turull@ericsson.com>
Cc: openembedded-core@lists.openembedded.org; pratik.farkase@est.tech; richard.purdie@linuxfoundation.org
Subject: Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
On Wed, Mar 25, 2026 at 9:44 AM Daniel Turull <daniel.turull@ericsson.com<mailto:daniel.turull@ericsson.com>> wrote:
Hi,
Kirk is official way to run ltp since runltp has been dropped. Richard mentioned yesterday in the Weekly Project Engineering Sync if no one was fixing the runltp issue, he will drop ltp from oe-core.
Yes, we know this, it's been mentioned for months. We are
fundamentally too late for the LTS release in my opinion, since
Richard would likely be left fixing issues with LTP failures that
could gate the release.
It isn't even the results that are the issue. How will this perform
on a fully loaded machine (i.e the auto builder), will we get
inconsistent results ? Intermittent failures ? Different results based
on the architecture ?
The test coverage is the same since the logic there is not touched but the output is different. Now it is a json file with the results, which is machine readable without any extra parsing. Do we need a conversion from the new to the old to keep compatibility?
Only if it impacts the reset of the QA or Autobuilder testing. If
everything in the test stack continues to work with the new
format, I'd say it is ok as-is.
I’m attaching the old test output with the new one for the math test suite.
New: math-raw.log and math.json
Old: math.old math-raw.log.old.
You can see at the end of the old output:
This all needs to be in the commit itself. As well as a results
summary from all the supported primary architectures.
Bruce
-------------------------------------------
INFO: runltp script is deprecated, try kirk
https://github.com/linux-test-project/kirk
-------------------------------------------
Best regards,
Daniel
From: Bruce Ashfield <bruce.ashfield@gmail.com<mailto:bruce.ashfield@gmail.com>>
Sent: Wednesday, 25 March 2026 13:59
To: Daniel Turull <daniel.turull@ericsson.com<mailto:daniel.turull@ericsson.com>>
Cc: openembedded-core@lists.openembedded.org<mailto:openembedded-core@lists.openembedded.org>; pratik.farkase@est.tech<mailto:pratik.farkase@est.tech>; richard.purdie@linuxfoundation.org<mailto:richard.purdie@linuxfoundation.org>
Subject: Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
On Wed, Mar 25, 2026 at 7:07 AM Daniel Turull via lists.openembedded.org<http://lists.openembedded.org/> <daniel.turull=ericsson.com@lists.openembedded.org<mailto:ericsson.com@lists.openembedded.org>> wrote:
From: Daniel Turull <daniel.turull@ericsson.com<mailto:daniel.turull@ericsson.com>>
runltp has been removed from ltp and kirk is the official tool to
invoke linux ltp tests.
For something like this to be considered for merging, I'd have expected
a lot more information.
Is the test coverage the same as before ?
What are the results of the tests versus the previous harness ?
Is it truly a drop in replacement for the previous runner ?
.. etc
Switching the executable is the easy part, ensuring that it actually works
a replacement is the hard part.
Bruce
See:
https://github.com/linux-test-project/ltp/commit/6efd3605dc005c3ed135b463f182174e24bdce1b
Signed-off-by: Daniel Turull <daniel.turull@ericsson.com<mailto:daniel.turull@ericsson.com>>
Assisted-by: Claude, Anthropic
---
meta/lib/oeqa/runtime/cases/ltp.py | 16 ++++++-------
meta/lib/oeqa/runtime/cases/ltp_stress.py | 16 +++++++++----
meta/lib/oeqa/utils/logparser.py | 29 +++++++++++++++++++++++
meta/recipes-extended/ltp/ltp_20260130.bb<http://ltp_20260130.bb/> | 1 +
4 files changed, 50 insertions(+), 12 deletions(-)
diff --git a/meta/lib/oeqa/runtime/cases/ltp.py b/meta/lib/oeqa/runtime/cases/ltp.py
index 0ffdbe23e4..11c4814090 100644
--- a/meta/lib/oeqa/runtime/cases/ltp.py
+++ b/meta/lib/oeqa/runtime/cases/ltp.py
@@ -12,7 +12,7 @@ import pprint
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
from oeqa.runtime.decorator.package import OEHasPackage
-from oeqa.utils.logparser import LtpParser
+from oeqa.utils.logparser import LtpKirkParser
class LtpTestBase(OERuntimeTestCase):
@@ -66,9 +66,9 @@ class LtpTest(LtpTestBase):
def runltp(self, ltp_group):
# LTP appends to log files, so ensure we start with a clean log
- self.target.deleteFiles("/opt/ltp/results/", ltp_group)
+ self.target.deleteFiles("/opt/ltp/results/", "%s.json" % ltp_group)
- cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
+ cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (ltp_group, ltp_group)
starttime = time.time()
(status, output) = self.target.run(cmd, timeout=1200)
@@ -87,14 +87,14 @@ class LtpTest(LtpTestBase):
self.extras['ltpresult.rawlogs']['log'] = self.extras['ltpresult.rawlogs']['log'] + output
# Copy the machine-readable test results locally so we can parse it
- dst = os.path.join(self.ltptest_log_dir, ltp_group)
- remote_src = "/opt/ltp/results/%s" % ltp_group
+ dst = os.path.join(self.ltptest_log_dir, "%s.json" % ltp_group)
+ remote_src = "/opt/ltp/results/%s.json" % ltp_group
(status, output) = self.target.copyFrom(remote_src, dst, True)
if status:
msg = 'File could not be copied. Output: %s' % output
self.target.logger.warning(msg)
- parser = LtpParser()
+ parser = LtpKirkParser()
results, sections = parser.parse(dst)
sections['duration'] = int(endtime-starttime)
@@ -113,9 +113,9 @@ class LtpTest(LtpTestBase):
# LTP runtime tests
@OETestDepends(['ssh.SSHTest.test_ssh'])
- @OEHasPackage(["ltp"])
+ @OEHasPackage(["ltp", "python3-kirk"])
def test_ltp_help(self):
- (status, output) = self.target.run('/opt/ltp/runltp --help')
+ (status, output) = self.target.run('kirk --help')
msg = 'Failed to get ltp help. Output: %s' % output
self.assertEqual(status, 0, msg=msg)
diff --git a/meta/lib/oeqa/runtime/cases/ltp_stress.py b/meta/lib/oeqa/runtime/cases/ltp_stress.py
index ce6f4bf59d..cf84ec1182 100644
--- a/meta/lib/oeqa/runtime/cases/ltp_stress.py
+++ b/meta/lib/oeqa/runtime/cases/ltp_stress.py
@@ -13,7 +13,7 @@ from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
from oeqa.runtime.decorator.package import OEHasPackage
from oeqa.core.decorator.data import skipIfQemu
-from oeqa.utils.logparser import LtpParser
+from oeqa.utils.logparser import LtpKirkParser
class LtpStressBase(OERuntimeTestCase):
@@ -60,7 +60,7 @@ class LtpStressBase(OERuntimeTestCase):
class LtpStressTest(LtpStressBase):
def runltp(self, stress_group):
- cmd = '/opt/ltp/runltp -f %s -p -q 2>@1 | tee /opt/ltp/results/%s' % (stress_group, stress_group)
+ cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (stress_group, stress_group)
starttime = time.time()
(status, output) = self.target.run(cmd)
endtime = time.time()
@@ -69,8 +69,16 @@ class LtpStressTest(LtpStressBase):
self.extras['ltpstressresult.rawlogs']['log'] = self.extras['ltpstressresult.rawlogs']['log'] + output
- parser = LtpParser()
- results, sections = parser.parse(os.path.join(self.ltptest_log_dir, "%s" % stress_group))
+ # Copy kirk JSON report from target
+ dst = os.path.join(self.ltptest_log_dir, "%s.json" % stress_group)
+ remote_src = "/opt/ltp/results/%s.json" % stress_group
+ (status, output) = self.target.copyFrom(remote_src, dst, True)
+ if status:
+ msg = 'File could not be copied. Output: %s' % output
+ self.target.logger.warning(msg)
+
+ parser = LtpKirkParser()
+ results, sections = parser.parse(dst)
runtime = int(endtime-starttime)
sections['duration'] = runtime
diff --git a/meta/lib/oeqa/utils/logparser.py b/meta/lib/oeqa/utils/logparser.py
index c479864162..a907421fab 100644
--- a/meta/lib/oeqa/utils/logparser.py
+++ b/meta/lib/oeqa/utils/logparser.py
@@ -5,6 +5,7 @@
#
import enum
+import json
import os
import re
@@ -158,6 +159,34 @@ class LtpParser:
return results, section
+class LtpKirkParser:
+ """Parse kirk JSON report into the same format as LtpParser."""
+
+ STATUS_MAP = {
+ "pass": "PASSED",
+ "fail": "FAILED",
+ "brok": "FAILED",
+ "conf": "SKIPPED",
+ "warn": "PASSED",
+ }
+
+ def parse(self, jsonfile):
+ with open(jsonfile, errors="replace") as f:
+ report = json.load(f)
+
+ results = {}
+ section = {"duration": 0, "log": ""}
+
+ for entry in report.get("results", []):
+ results[entry["test_fqn"]] = self.STATUS_MAP.get(entry.get("status", ""), "FAILED")
+ test = entry.get("test", {})
+ section["log"] += test.get("log", "")
+
+ section["duration"] = int(report.get("stats", {}).get("runtime", 0))
+
+ return results, section
+
+
# ltp Compliance log parsing
class LtpComplianceParser(object):
def __init__(self):
diff --git a/meta/recipes-extended/ltp/ltp_20260130.bb<http://ltp_20260130.bb/> b/meta/recipes-extended/ltp/ltp_20260130.bb<http://ltp_20260130.bb/>
index dcd1e81398..1ff20a7898 100644
--- a/meta/recipes-extended/ltp/ltp_20260130.bb<http://ltp_20260130.bb/>
+++ b/meta/recipes-extended/ltp/ltp_20260130.bb<http://ltp_20260130.bb/>
@@ -104,6 +104,7 @@ RDEPENDS:${PN} = "\
net-tools \
perl \
python3-core \
+ python3-kirk \
procps \
quota \
unzip \
--
- Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end
- "Use the force Harry" - Gandalf, Star Trek II
--
- Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end
- "Use the force Harry" - Gandalf, Star Trek II
[-- Attachment #2: Type: text/html, Size: 28185 bytes --]
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 8:40 ` [PATCH 2/2] oeqa: replace runltp with kirk daniel.turull
2026-03-25 12:38 ` [OE-core] " Alexander Kanavin
2026-03-25 12:58 ` Bruce Ashfield
@ 2026-03-25 16:35 ` Richard Purdie
2026-03-25 16:42 ` [OE-core] " Daniel Turull
2026-03-26 13:02 ` Daniel Turull
2 siblings, 2 replies; 19+ messages in thread
From: Richard Purdie @ 2026-03-25 16:35 UTC (permalink / raw)
To: daniel.turull, openembedded-core; +Cc: pratik.farkase
On Wed, 2026-03-25 at 09:40 +0100, daniel.turull@ericsson.com wrote:
> From: Daniel Turull <daniel.turull@ericsson.com>
>
> runltp has been removed from ltp and kirk is the official tool to
> invoke linux ltp tests.
>
> See:
> https://github.com/linux-test-project/ltp/commit/6efd3605dc005c3ed135b463f182174e24bdce1b
>
> Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
> Assisted-by: Claude, Anthropic
> ---
> meta/lib/oeqa/runtime/cases/ltp.py | 16 ++++++-------
> meta/lib/oeqa/runtime/cases/ltp_stress.py | 16 +++++++++----
> meta/lib/oeqa/utils/logparser.py | 29 +++++++++++++++++++++++
> meta/recipes-extended/ltp/ltp_20260130.bb | 1 +
> 4 files changed, 50 insertions(+), 12 deletions(-)
>
> diff --git a/meta/lib/oeqa/runtime/cases/ltp.py b/meta/lib/oeqa/runtime/cases/ltp.py
> index 0ffdbe23e4..11c4814090 100644
> --- a/meta/lib/oeqa/runtime/cases/ltp.py
> +++ b/meta/lib/oeqa/runtime/cases/ltp.py
> @@ -12,7 +12,7 @@ import pprint
> from oeqa.runtime.case import OERuntimeTestCase
> from oeqa.core.decorator.depends import OETestDepends
> from oeqa.runtime.decorator.package import OEHasPackage
> -from oeqa.utils.logparser import LtpParser
> +from oeqa.utils.logparser import LtpKirkParser
>
> class LtpTestBase(OERuntimeTestCase):
>
> @@ -66,9 +66,9 @@ class LtpTest(LtpTestBase):
>
> def runltp(self, ltp_group):
> # LTP appends to log files, so ensure we start with a clean log
> - self.target.deleteFiles("/opt/ltp/results/", ltp_group)
> + self.target.deleteFiles("/opt/ltp/results/", "%s.json" % ltp_group)
>
> - cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
> + cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (ltp_group, ltp_group)
>
> starttime = time.time()
> (status, output) = self.target.run(cmd, timeout=1200)
> @@ -87,14 +87,14 @@ class LtpTest(LtpTestBase):
> self.extras['ltpresult.rawlogs']['log'] = self.extras['ltpresult.rawlogs']['log'] + output
>
> # Copy the machine-readable test results locally so we can parse it
> - dst = os.path.join(self.ltptest_log_dir, ltp_group)
> - remote_src = "/opt/ltp/results/%s" % ltp_group
> + dst = os.path.join(self.ltptest_log_dir, "%s.json" % ltp_group)
> + remote_src = "/opt/ltp/results/%s.json" % ltp_group
> (status, output) = self.target.copyFrom(remote_src, dst, True)
> if status:
> msg = 'File could not be copied. Output: %s' % output
> self.target.logger.warning(msg)
>
> - parser = LtpParser()
> + parser = LtpKirkParser()
> results, sections = parser.parse(dst)
>
> sections['duration'] = int(endtime-starttime)
> @@ -113,9 +113,9 @@ class LtpTest(LtpTestBase):
>
> # LTP runtime tests
> @OETestDepends(['ssh.SSHTest.test_ssh'])
> - @OEHasPackage(["ltp"])
> + @OEHasPackage(["ltp", "python3-kirk"])
> def test_ltp_help(self):
> - (status, output) = self.target.run('/opt/ltp/runltp --help')
> + (status, output) = self.target.run('kirk --help')
> msg = 'Failed to get ltp help. Output: %s' % output
> self.assertEqual(status, 0, msg=msg)
>
> diff --git a/meta/lib/oeqa/runtime/cases/ltp_stress.py b/meta/lib/oeqa/runtime/cases/ltp_stress.py
> index ce6f4bf59d..cf84ec1182 100644
> --- a/meta/lib/oeqa/runtime/cases/ltp_stress.py
> +++ b/meta/lib/oeqa/runtime/cases/ltp_stress.py
> @@ -13,7 +13,7 @@ from oeqa.runtime.case import OERuntimeTestCase
> from oeqa.core.decorator.depends import OETestDepends
> from oeqa.runtime.decorator.package import OEHasPackage
> from oeqa.core.decorator.data import skipIfQemu
> -from oeqa.utils.logparser import LtpParser
> +from oeqa.utils.logparser import LtpKirkParser
>
> class LtpStressBase(OERuntimeTestCase):
>
> @@ -60,7 +60,7 @@ class LtpStressBase(OERuntimeTestCase):
> class LtpStressTest(LtpStressBase):
>
> def runltp(self, stress_group):
> - cmd = '/opt/ltp/runltp -f %s -p -q 2>@1 | tee /opt/ltp/results/%s' % (stress_group, stress_group)
> + cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (stress_group, stress_group)
> starttime = time.time()
> (status, output) = self.target.run(cmd)
> endtime = time.time()
> @@ -69,8 +69,16 @@ class LtpStressTest(LtpStressBase):
>
> self.extras['ltpstressresult.rawlogs']['log'] = self.extras['ltpstressresult.rawlogs']['log'] + output
>
> - parser = LtpParser()
> - results, sections = parser.parse(os.path.join(self.ltptest_log_dir, "%s" % stress_group))
> + # Copy kirk JSON report from target
> + dst = os.path.join(self.ltptest_log_dir, "%s.json" % stress_group)
> + remote_src = "/opt/ltp/results/%s.json" % stress_group
> + (status, output) = self.target.copyFrom(remote_src, dst, True)
> + if status:
> + msg = 'File could not be copied. Output: %s' % output
> + self.target.logger.warning(msg)
> +
> + parser = LtpKirkParser()
> + results, sections = parser.parse(dst)
>
> runtime = int(endtime-starttime)
> sections['duration'] = runtime
> diff --git a/meta/lib/oeqa/utils/logparser.py b/meta/lib/oeqa/utils/logparser.py
> index c479864162..a907421fab 100644
> --- a/meta/lib/oeqa/utils/logparser.py
> +++ b/meta/lib/oeqa/utils/logparser.py
> @@ -5,6 +5,7 @@
> #
>
> import enum
> +import json
> import os
> import re
>
> @@ -158,6 +159,34 @@ class LtpParser:
> return results, section
>
>
> +class LtpKirkParser:
> + """Parse kirk JSON report into the same format as LtpParser."""
> +
> + STATUS_MAP = {
> + "pass": "PASSED",
> + "fail": "FAILED",
> + "brok": "FAILED",
> + "conf": "SKIPPED",
> + "warn": "PASSED",
> + }
> +
> + def parse(self, jsonfile):
> + with open(jsonfile, errors="replace") as f:
> + report = json.load(f)
> +
> + results = {}
> + section = {"duration": 0, "log": ""}
> +
> + for entry in report.get("results", []):
> + results[entry["test_fqn"]] = self.STATUS_MAP.get(entry.get("status", ""), "FAILED")
> + test = entry.get("test", {})
> + section["log"] += test.get("log", "")
> +
> + section["duration"] = int(report.get("stats", {}).get("runtime", 0))
> +
> + return results, section
> +
> +
FWIW we can probably just update the LtpParser class directly rather
than creating a wrapper around it since runltp will be no more in the
next release anyway.
Cheers,
Richard
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 16:35 ` Richard Purdie
@ 2026-03-25 16:42 ` Daniel Turull
2026-03-26 13:02 ` Daniel Turull
1 sibling, 0 replies; 19+ messages in thread
From: Daniel Turull @ 2026-03-25 16:42 UTC (permalink / raw)
To: richard.purdie@linuxfoundation.org,
openembedded-core@lists.openembedded.org
Cc: pratik.farkase@est.tech
[-- Attachment #1: Type: text/plain, Size: 8260 bytes --]
Sure,
I’ll try to send a new patch tomorrow with your suggestion and all the comments that I have received. We are running the testimage with ltp for qemuarm64, qemux86-64 and qemuriscv64.
Best regards,
Daniel
________________________________
From: openembedded-core@lists.openembedded.org <openembedded-core@lists.openembedded.org> on behalf of Richard Purdie via lists.openembedded.org <richard.purdie=linuxfoundation.org@lists.openembedded.org>
Sent: Wednesday, March 25, 2026 5:36 PM
To: Daniel Turull <daniel.turull@ericsson.com>; openembedded-core@lists.openembedded.org <openembedded-core@lists.openembedded.org>
Cc: pratik.farkase@est.tech <pratik.farkase@est.tech>
Subject: Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
On Wed, 2026-03-25 at 09:40 +0100, daniel.turull@ericsson.com wrote:
> From: Daniel Turull <daniel.turull@ericsson.com>
>
> runltp has been removed from ltp and kirk is the official tool to
> invoke linux ltp tests.
>
> See:
> https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Flinux-test-project%2Fltp%2Fcommit%2F6efd3605dc005c3ed135b463f182174e24bdce1b&data=05%7C02%7Cdaniel.turull%40ericsson.com%7Cca4e7536591a44feb4fd08de8a8c9c1f%7C92e84cebfbfd47abbe52080c6b87953f%7C0%7C0%7C639100533691606542%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=cgqr%2FrR99Ty%2F75pasLCYawpw0qV%2FAZ4sXUDWH%2B2ka9c%3D&reserved=0<https://github.com/linux-test-project/ltp/commit/6efd3605dc005c3ed135b463f182174e24bdce1b>
>
> Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
> Assisted-by: Claude, Anthropic
> ---
> meta/lib/oeqa/runtime/cases/ltp.py | 16 ++++++-------
> meta/lib/oeqa/runtime/cases/ltp_stress.py | 16 +++++++++----
> meta/lib/oeqa/utils/logparser.py | 29 +++++++++++++++++++++++
> meta/recipes-extended/ltp/ltp_20260130.bb | 1 +
> 4 files changed, 50 insertions(+), 12 deletions(-)
>
> diff --git a/meta/lib/oeqa/runtime/cases/ltp.py b/meta/lib/oeqa/runtime/cases/ltp.py
> index 0ffdbe23e4..11c4814090 100644
> --- a/meta/lib/oeqa/runtime/cases/ltp.py
> +++ b/meta/lib/oeqa/runtime/cases/ltp.py
> @@ -12,7 +12,7 @@ import pprint
> from oeqa.runtime.case import OERuntimeTestCase
> from oeqa.core.decorator.depends import OETestDepends
> from oeqa.runtime.decorator.package import OEHasPackage
> -from oeqa.utils.logparser import LtpParser
> +from oeqa.utils.logparser import LtpKirkParser
>
> class LtpTestBase(OERuntimeTestCase):
>
> @@ -66,9 +66,9 @@ class LtpTest(LtpTestBase):
>
> def runltp(self, ltp_group):
> # LTP appends to log files, so ensure we start with a clean log
> - self.target.deleteFiles("/opt/ltp/results/", ltp_group)
> + self.target.deleteFiles("/opt/ltp/results/", "%s.json" % ltp_group)
>
> - cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
> + cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (ltp_group, ltp_group)
>
> starttime = time.time()
> (status, output) = self.target.run(cmd, timeout=1200)
> @@ -87,14 +87,14 @@ class LtpTest(LtpTestBase):
> self.extras['ltpresult.rawlogs']['log'] = self.extras['ltpresult.rawlogs']['log'] + output
>
> # Copy the machine-readable test results locally so we can parse it
> - dst = os.path.join(self.ltptest_log_dir, ltp_group)
> - remote_src = "/opt/ltp/results/%s" % ltp_group
> + dst = os.path.join(self.ltptest_log_dir, "%s.json" % ltp_group)
> + remote_src = "/opt/ltp/results/%s.json" % ltp_group
> (status, output) = self.target.copyFrom(remote_src, dst, True)
> if status:
> msg = 'File could not be copied. Output: %s' % output
> self.target.logger.warning(msg)
>
> - parser = LtpParser()
> + parser = LtpKirkParser()
> results, sections = parser.parse(dst)
>
> sections['duration'] = int(endtime-starttime)
> @@ -113,9 +113,9 @@ class LtpTest(LtpTestBase):
>
> # LTP runtime tests
> @OETestDepends(['ssh.SSHTest.test_ssh'])
> - @OEHasPackage(["ltp"])
> + @OEHasPackage(["ltp", "python3-kirk"])
> def test_ltp_help(self):
> - (status, output) = self.target.run('/opt/ltp/runltp --help')
> + (status, output) = self.target.run('kirk --help')
> msg = 'Failed to get ltp help. Output: %s' % output
> self.assertEqual(status, 0, msg=msg)
>
> diff --git a/meta/lib/oeqa/runtime/cases/ltp_stress.py b/meta/lib/oeqa/runtime/cases/ltp_stress.py
> index ce6f4bf59d..cf84ec1182 100644
> --- a/meta/lib/oeqa/runtime/cases/ltp_stress.py
> +++ b/meta/lib/oeqa/runtime/cases/ltp_stress.py
> @@ -13,7 +13,7 @@ from oeqa.runtime.case import OERuntimeTestCase
> from oeqa.core.decorator.depends import OETestDepends
> from oeqa.runtime.decorator.package import OEHasPackage
> from oeqa.core.decorator.data import skipIfQemu
> -from oeqa.utils.logparser import LtpParser
> +from oeqa.utils.logparser import LtpKirkParser
>
> class LtpStressBase(OERuntimeTestCase):
>
> @@ -60,7 +60,7 @@ class LtpStressBase(OERuntimeTestCase):
> class LtpStressTest(LtpStressBase):
>
> def runltp(self, stress_group):
> - cmd = '/opt/ltp/runltp -f %s -p -q 2>@1 | tee /opt/ltp/results/%s' % (stress_group, stress_group)
> + cmd = 'kirk --run-suite %s --json-report /opt/ltp/results/%s.json -n' % (stress_group, stress_group)
> starttime = time.time()
> (status, output) = self.target.run(cmd)
> endtime = time.time()
> @@ -69,8 +69,16 @@ class LtpStressTest(LtpStressBase):
>
> self.extras['ltpstressresult.rawlogs']['log'] = self.extras['ltpstressresult.rawlogs']['log'] + output
>
> - parser = LtpParser()
> - results, sections = parser.parse(os.path.join(self.ltptest_log_dir, "%s" % stress_group))
> + # Copy kirk JSON report from target
> + dst = os.path.join(self.ltptest_log_dir, "%s.json" % stress_group)
> + remote_src = "/opt/ltp/results/%s.json" % stress_group
> + (status, output) = self.target.copyFrom(remote_src, dst, True)
> + if status:
> + msg = 'File could not be copied. Output: %s' % output
> + self.target.logger.warning(msg)
> +
> + parser = LtpKirkParser()
> + results, sections = parser.parse(dst)
>
> runtime = int(endtime-starttime)
> sections['duration'] = runtime
> diff --git a/meta/lib/oeqa/utils/logparser.py b/meta/lib/oeqa/utils/logparser.py
> index c479864162..a907421fab 100644
> --- a/meta/lib/oeqa/utils/logparser.py
> +++ b/meta/lib/oeqa/utils/logparser.py
> @@ -5,6 +5,7 @@
> #
>
> import enum
> +import json
> import os
> import re
>
> @@ -158,6 +159,34 @@ class LtpParser:
> return results, section
>
>
> +class LtpKirkParser:
> + """Parse kirk JSON report into the same format as LtpParser."""
> +
> + STATUS_MAP = {
> + "pass": "PASSED",
> + "fail": "FAILED",
> + "brok": "FAILED",
> + "conf": "SKIPPED",
> + "warn": "PASSED",
> + }
> +
> + def parse(self, jsonfile):
> + with open(jsonfile, errors="replace") as f:
> + report = json.load(f)
> +
> + results = {}
> + section = {"duration": 0, "log": ""}
> +
> + for entry in report.get("results", []):
> + results[entry["test_fqn"]] = self.STATUS_MAP.get(entry.get("status", ""), "FAILED")
> + test = entry.get("test", {})
> + section["log"] += test.get("log", "")
> +
> + section["duration"] = int(report.get("stats", {}).get("runtime", 0))
> +
> + return results, section
> +
> +
FWIW we can probably just update the LtpParser class directly rather
than creating a wrapper around it since runltp will be no more in the
next release anyway.
Cheers,
Richard
[-- Attachment #2: Type: text/html, Size: 15023 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* RE: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-25 16:35 ` Richard Purdie
2026-03-25 16:42 ` [OE-core] " Daniel Turull
@ 2026-03-26 13:02 ` Daniel Turull
2026-03-27 12:30 ` David Nyström
1 sibling, 1 reply; 19+ messages in thread
From: Daniel Turull @ 2026-03-26 13:02 UTC (permalink / raw)
To: richard.purdie@linuxfoundation.org,
openembedded-core@lists.openembedded.org
Cc: pratik.farkase@est.tech, Bruce Ashfield
Just an update.
It is taking a bit more time than expected. My original test only covered the math test suite in ltp to verify the functionality.
Some of the ltp test are failing with OOM, some related to systemd-udev. I'll be disabling them now to have a working ltp. Then look at the underlaying issues.
So far I have found 4 failing test cases. Using the default config without any changes with qemux86-64
min_free_kbytes (mm) (OOM)
pty07 (pty) (OOM)
ptem02 (pty) (OOM)
cve-2018-13405 (cve) (deadlock kernel panic)
Giving enough memory 16GB makes them go away but I'm trying to make it work with 4GB of RAM.
Best regards,
Daniel
> -----Original Message-----
> From: openembedded-core@lists.openembedded.org <openembedded-
> core@lists.openembedded.org> On Behalf Of Richard Purdie via
> lists.openembedded.org
> Sent: Wednesday, 25 March 2026 17:36
> To: Daniel Turull <daniel.turull@ericsson.com>; openembedded-
> core@lists.openembedded.org
> Cc: pratik.farkase@est.tech
> Subject: Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
>
> On Wed, 2026-03-25 at 09:40 +0100, daniel.turull@ericsson.com wrote:
> > From: Daniel Turull <daniel.turull@ericsson.com>
> >
> > runltp has been removed from ltp and kirk is the official tool to
> > invoke linux ltp tests.
> >
> > See:
> > https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgith
> > ub.com%2Flinux-test-
> project%2Fltp%2Fcommit%2F6efd3605dc005c3ed135b463f
> >
> 182174e24bdce1b&data=05%7C02%7Cdaniel.turull%40ericsson.com%7Cca4e75
> 36
> >
> 591a44feb4fd08de8a8c9c1f%7C92e84cebfbfd47abbe52080c6b87953f%7C0%7C
> 0%7C
> >
> 639100533691606542%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRy
> dWUsIlY
> >
> iOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C
> 0%
> >
> 7C%7C%7C&sdata=cgqr%2FrR99Ty%2F75pasLCYawpw0qV%2FAZ4sXUDWH%2B2
> ka9c%3D&
> > reserved=0
> >
> > Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
> > Assisted-by: Claude, Anthropic
> > ---
> > meta/lib/oeqa/runtime/cases/ltp.py | 16 ++++++-------
> > meta/lib/oeqa/runtime/cases/ltp_stress.py | 16 +++++++++----
> > meta/lib/oeqa/utils/logparser.py | 29
> > +++++++++++++++++++++++
> > meta/recipes-extended/ltp/ltp_20260130.bb | 1 +
> > 4 files changed, 50 insertions(+), 12 deletions(-)
> >
> > diff --git a/meta/lib/oeqa/runtime/cases/ltp.py
> > b/meta/lib/oeqa/runtime/cases/ltp.py
> > index 0ffdbe23e4..11c4814090 100644
> > --- a/meta/lib/oeqa/runtime/cases/ltp.py
> > +++ b/meta/lib/oeqa/runtime/cases/ltp.py
> > @@ -12,7 +12,7 @@ import pprint
> > from oeqa.runtime.case import OERuntimeTestCase
> > from oeqa.core.decorator.depends import OETestDepends
> > from oeqa.runtime.decorator.package import OEHasPackage -from
> > oeqa.utils.logparser import LtpParser
> > +from oeqa.utils.logparser import LtpKirkParser
> >
> > class LtpTestBase(OERuntimeTestCase):
> >
> > @@ -66,9 +66,9 @@ class LtpTest(LtpTestBase):
> >
> > def runltp(self, ltp_group):
> > # LTP appends to log files, so ensure we start with a
> > clean log
> > - self.target.deleteFiles("/opt/ltp/results/", ltp_group)
> > + self.target.deleteFiles("/opt/ltp/results/", "%s.json" %
> > +ltp_group)
> >
> > - cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l
> > /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
> > + cmd = 'kirk --run-suite %s --json-report
> > +/opt/ltp/results/%s.json -n' % (ltp_group, ltp_group)
> >
> > starttime = time.time()
> > (status, output) = self.target.run(cmd, timeout=1200) @@
> > -87,14 +87,14 @@ class LtpTest(LtpTestBase):
> > self.extras['ltpresult.rawlogs']['log'] =
> > self.extras['ltpresult.rawlogs']['log'] + output
> >
> > # Copy the machine-readable test results locally so we
> > can parse it
> > - dst = os.path.join(self.ltptest_log_dir, ltp_group)
> > - remote_src = "/opt/ltp/results/%s" % ltp_group
> > + dst = os.path.join(self.ltptest_log_dir, "%s.json" %
> > +ltp_group)
> > + remote_src = "/opt/ltp/results/%s.json" % ltp_group
> > (status, output) = self.target.copyFrom(remote_src, dst,
> > True)
> > if status:
> > msg = 'File could not be copied. Output: %s' % output
> > self.target.logger.warning(msg)
> >
> > - parser = LtpParser()
> > + parser = LtpKirkParser()
> > results, sections = parser.parse(dst)
> >
> > sections['duration'] = int(endtime-starttime) @@ -113,9
> > +113,9 @@ class LtpTest(LtpTestBase):
> >
> > # LTP runtime tests
> > @OETestDepends(['ssh.SSHTest.test_ssh'])
> > - @OEHasPackage(["ltp"])
> > + @OEHasPackage(["ltp", "python3-kirk"])
> > def test_ltp_help(self):
> > - (status, output) = self.target.run('/opt/ltp/runltp --help')
> > + (status, output) = self.target.run('kirk --help')
> > msg = 'Failed to get ltp help. Output: %s' % output
> > self.assertEqual(status, 0, msg=msg)
> >
> > diff --git a/meta/lib/oeqa/runtime/cases/ltp_stress.py
> > b/meta/lib/oeqa/runtime/cases/ltp_stress.py
> > index ce6f4bf59d..cf84ec1182 100644
> > --- a/meta/lib/oeqa/runtime/cases/ltp_stress.py
> > +++ b/meta/lib/oeqa/runtime/cases/ltp_stress.py
> > @@ -13,7 +13,7 @@ from oeqa.runtime.case import OERuntimeTestCase
> > from oeqa.core.decorator.depends import OETestDepends
> > from oeqa.runtime.decorator.package import OEHasPackage
> > from oeqa.core.decorator.data import skipIfQemu -from
> > oeqa.utils.logparser import LtpParser
> > +from oeqa.utils.logparser import LtpKirkParser
> >
> > class LtpStressBase(OERuntimeTestCase):
> >
> > @@ -60,7 +60,7 @@ class LtpStressBase(OERuntimeTestCase):
> > class LtpStressTest(LtpStressBase):
> >
> > def runltp(self, stress_group):
> > - cmd = '/opt/ltp/runltp -f %s -p -q 2>@1 | tee
> > /opt/ltp/results/%s' % (stress_group, stress_group)
> > + cmd = 'kirk --run-suite %s --json-report
> > +/opt/ltp/results/%s.json -n' % (stress_group, stress_group)
> > starttime = time.time()
> > (status, output) = self.target.run(cmd)
> > endtime = time.time()
> > @@ -69,8 +69,16 @@ class LtpStressTest(LtpStressBase):
> >
> > self.extras['ltpstressresult.rawlogs']['log'] =
> > self.extras['ltpstressresult.rawlogs']['log'] + output
> >
> > - parser = LtpParser()
> > - results, sections =
> > parser.parse(os.path.join(self.ltptest_log_dir, "%s" % stress_group))
> > + # Copy kirk JSON report from target
> > + dst = os.path.join(self.ltptest_log_dir, "%s.json" %
> > +stress_group)
> > + remote_src = "/opt/ltp/results/%s.json" % stress_group
> > + (status, output) = self.target.copyFrom(remote_src, dst,
> > +True)
> > + if status:
> > + msg = 'File could not be copied. Output: %s' % output
> > + self.target.logger.warning(msg)
> > +
> > + parser = LtpKirkParser()
> > + results, sections = parser.parse(dst)
> >
> > runtime = int(endtime-starttime)
> > sections['duration'] = runtime diff --git
> > a/meta/lib/oeqa/utils/logparser.py b/meta/lib/oeqa/utils/logparser.py
> > index c479864162..a907421fab 100644
> > --- a/meta/lib/oeqa/utils/logparser.py
> > +++ b/meta/lib/oeqa/utils/logparser.py
> > @@ -5,6 +5,7 @@
> > #
> >
> > import enum
> > +import json
> > import os
> > import re
> >
> > @@ -158,6 +159,34 @@ class LtpParser:
> > return results, section
> >
> >
> > +class LtpKirkParser:
> > + """Parse kirk JSON report into the same format as LtpParser."""
> > +
> > + STATUS_MAP = {
> > + "pass": "PASSED",
> > + "fail": "FAILED",
> > + "brok": "FAILED",
> > + "conf": "SKIPPED",
> > + "warn": "PASSED",
> > + }
> > +
> > + def parse(self, jsonfile):
> > + with open(jsonfile, errors="replace") as f:
> > + report = json.load(f)
> > +
> > + results = {}
> > + section = {"duration": 0, "log": ""}
> > +
> > + for entry in report.get("results", []):
> > + results[entry["test_fqn"]] =
> > +self.STATUS_MAP.get(entry.get("status", ""), "FAILED")
> > + test = entry.get("test", {})
> > + section["log"] += test.get("log", "")
> > +
> > + section["duration"] = int(report.get("stats",
> > +{}).get("runtime", 0))
> > +
> > + return results, section
> > +
> > +
>
> FWIW we can probably just update the LtpParser class directly rather than
> creating a wrapper around it since runltp will be no more in the next release
> anyway.
>
> Cheers,
>
> Richard
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-26 13:02 ` Daniel Turull
@ 2026-03-27 12:30 ` David Nyström
2026-03-27 15:40 ` Richard Purdie
0 siblings, 1 reply; 19+ messages in thread
From: David Nyström @ 2026-03-27 12:30 UTC (permalink / raw)
To: daniel.turull
Cc: richard.purdie@linuxfoundation.org,
openembedded-core@lists.openembedded.org, pratik.farkase@est.tech,
bruce.ashfield
[-- Attachment #1: Type: text/plain, Size: 10715 bytes --]
On Thu, 26 Mar 2026, Daniel Turull via lists.openembedded.org wrote:
> Just an update.
>
> It is taking a bit more time than expected. My original test only covered the math test suite in ltp to verify the functionality.
>
> Some of the ltp test are failing with OOM, some related to systemd-udev. I'll be disabling them now to have a working ltp. Then look at the underlaying issues.
>
> So far I have found 4 failing test cases. Using the default config without any changes with qemux86-64
>
> min_free_kbytes (mm) (OOM)
This seems to be a buggy testcase for automation. Disable until its fixed.
Even if the test own memory consumers sets their own OOM-score higher,
there are still chances that the OOM-killer kill the wrong things.
> pty07 (pty) (OOM)
> ptem02 (pty) (OOM)
These seem to me to be related to systemd-udevd having unbounded message
queue sizes to its udev workers. IMO, this is a systemd-udevd issue.
Some other udev implementations starts dropping events.
We should have seen this when using runltp as well ?
Death spiral: systemd_259.5
1. Test tight loop creating devices floods systemd-udevd's workers
unbounded inbox queue(s).
- Single core, low mem, and long running udev rules makes the problem
worse.
2. systemd-udevd grows to consume all available RAM
3. OOM killer kills everything but systemd-udevd (OOMScoreAdjust=-1000)
4. Kernel panic: "no killable processes"
> cve-2018-13405 (cve) (deadlock kernel panic)
>
> Giving enough memory 16GB makes them go away but I'm trying to make it work with 4GB of RAM.
>
> Best regards,
> Daniel
>
>> -----Original Message-----
>> From: openembedded-core@lists.openembedded.org <openembedded-
>> core@lists.openembedded.org> On Behalf Of Richard Purdie via
>> lists.openembedded.org
>> Sent: Wednesday, 25 March 2026 17:36
>> To: Daniel Turull <daniel.turull@ericsson.com>; openembedded-
>> core@lists.openembedded.org
>> Cc: pratik.farkase@est.tech
>> Subject: Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
>>
>> On Wed, 2026-03-25 at 09:40 +0100, daniel.turull@ericsson.com wrote:
>>> From: Daniel Turull <daniel.turull@ericsson.com>
>>>
>>> runltp has been removed from ltp and kirk is the official tool to
>>> invoke linux ltp tests.
>>>
>>> See:
>>> https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgith
>>> ub.com%2Flinux-test-
>> project%2Fltp%2Fcommit%2F6efd3605dc005c3ed135b463f
>>>
>> 182174e24bdce1b&data=05%7C02%7Cdaniel.turull%40ericsson.com%7Cca4e75
>> 36
>>>
>> 591a44feb4fd08de8a8c9c1f%7C92e84cebfbfd47abbe52080c6b87953f%7C0%7C
>> 0%7C
>>>
>> 639100533691606542%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRy
>> dWUsIlY
>>>
>> iOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C
>> 0%
>>>
>> 7C%7C%7C&sdata=cgqr%2FrR99Ty%2F75pasLCYawpw0qV%2FAZ4sXUDWH%2B2
>> ka9c%3D&
>>> reserved=0
>>>
>>> Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
>>> Assisted-by: Claude, Anthropic
>>> ---
>>> meta/lib/oeqa/runtime/cases/ltp.py | 16 ++++++-------
>>> meta/lib/oeqa/runtime/cases/ltp_stress.py | 16 +++++++++----
>>> meta/lib/oeqa/utils/logparser.py | 29
>>> +++++++++++++++++++++++
>>> meta/recipes-extended/ltp/ltp_20260130.bb | 1 +
>>> 4 files changed, 50 insertions(+), 12 deletions(-)
>>>
>>> diff --git a/meta/lib/oeqa/runtime/cases/ltp.py
>>> b/meta/lib/oeqa/runtime/cases/ltp.py
>>> index 0ffdbe23e4..11c4814090 100644
>>> --- a/meta/lib/oeqa/runtime/cases/ltp.py
>>> +++ b/meta/lib/oeqa/runtime/cases/ltp.py
>>> @@ -12,7 +12,7 @@ import pprint
>>> from oeqa.runtime.case import OERuntimeTestCase
>>> from oeqa.core.decorator.depends import OETestDepends
>>> from oeqa.runtime.decorator.package import OEHasPackage -from
>>> oeqa.utils.logparser import LtpParser
>>> +from oeqa.utils.logparser import LtpKirkParser
>>>
>>> class LtpTestBase(OERuntimeTestCase):
>>>
>>> @@ -66,9 +66,9 @@ class LtpTest(LtpTestBase):
>>>
>>> def runltp(self, ltp_group):
>>> # LTP appends to log files, so ensure we start with a
>>> clean log
>>> - self.target.deleteFiles("/opt/ltp/results/", ltp_group)
>>> + self.target.deleteFiles("/opt/ltp/results/", "%s.json" %
>>> +ltp_group)
>>>
>>> - cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l
>>> /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
>>> + cmd = 'kirk --run-suite %s --json-report
>>> +/opt/ltp/results/%s.json -n' % (ltp_group, ltp_group)
>>>
>>> starttime = time.time()
>>> (status, output) = self.target.run(cmd, timeout=1200) @@
>>> -87,14 +87,14 @@ class LtpTest(LtpTestBase):
>>> self.extras['ltpresult.rawlogs']['log'] =
>>> self.extras['ltpresult.rawlogs']['log'] + output
>>>
>>> # Copy the machine-readable test results locally so we
>>> can parse it
>>> - dst = os.path.join(self.ltptest_log_dir, ltp_group)
>>> - remote_src = "/opt/ltp/results/%s" % ltp_group
>>> + dst = os.path.join(self.ltptest_log_dir, "%s.json" %
>>> +ltp_group)
>>> + remote_src = "/opt/ltp/results/%s.json" % ltp_group
>>> (status, output) = self.target.copyFrom(remote_src, dst,
>>> True)
>>> if status:
>>> msg = 'File could not be copied. Output: %s' % output
>>> self.target.logger.warning(msg)
>>>
>>> - parser = LtpParser()
>>> + parser = LtpKirkParser()
>>> results, sections = parser.parse(dst)
>>>
>>> sections['duration'] = int(endtime-starttime) @@ -113,9
>>> +113,9 @@ class LtpTest(LtpTestBase):
>>>
>>> # LTP runtime tests
>>> @OETestDepends(['ssh.SSHTest.test_ssh'])
>>> - @OEHasPackage(["ltp"])
>>> + @OEHasPackage(["ltp", "python3-kirk"])
>>> def test_ltp_help(self):
>>> - (status, output) = self.target.run('/opt/ltp/runltp --help')
>>> + (status, output) = self.target.run('kirk --help')
>>> msg = 'Failed to get ltp help. Output: %s' % output
>>> self.assertEqual(status, 0, msg=msg)
>>>
>>> diff --git a/meta/lib/oeqa/runtime/cases/ltp_stress.py
>>> b/meta/lib/oeqa/runtime/cases/ltp_stress.py
>>> index ce6f4bf59d..cf84ec1182 100644
>>> --- a/meta/lib/oeqa/runtime/cases/ltp_stress.py
>>> +++ b/meta/lib/oeqa/runtime/cases/ltp_stress.py
>>> @@ -13,7 +13,7 @@ from oeqa.runtime.case import OERuntimeTestCase
>>> from oeqa.core.decorator.depends import OETestDepends
>>> from oeqa.runtime.decorator.package import OEHasPackage
>>> from oeqa.core.decorator.data import skipIfQemu -from
>>> oeqa.utils.logparser import LtpParser
>>> +from oeqa.utils.logparser import LtpKirkParser
>>>
>>> class LtpStressBase(OERuntimeTestCase):
>>>
>>> @@ -60,7 +60,7 @@ class LtpStressBase(OERuntimeTestCase):
>>> class LtpStressTest(LtpStressBase):
>>>
>>> def runltp(self, stress_group):
>>> - cmd = '/opt/ltp/runltp -f %s -p -q 2>@1 | tee
>>> /opt/ltp/results/%s' % (stress_group, stress_group)
>>> + cmd = 'kirk --run-suite %s --json-report
>>> +/opt/ltp/results/%s.json -n' % (stress_group, stress_group)
>>> starttime = time.time()
>>> (status, output) = self.target.run(cmd)
>>> endtime = time.time()
>>> @@ -69,8 +69,16 @@ class LtpStressTest(LtpStressBase):
>>>
>>> self.extras['ltpstressresult.rawlogs']['log'] =
>>> self.extras['ltpstressresult.rawlogs']['log'] + output
>>>
>>> - parser = LtpParser()
>>> - results, sections =
>>> parser.parse(os.path.join(self.ltptest_log_dir, "%s" % stress_group))
>>> + # Copy kirk JSON report from target
>>> + dst = os.path.join(self.ltptest_log_dir, "%s.json" %
>>> +stress_group)
>>> + remote_src = "/opt/ltp/results/%s.json" % stress_group
>>> + (status, output) = self.target.copyFrom(remote_src, dst,
>>> +True)
>>> + if status:
>>> + msg = 'File could not be copied. Output: %s' % output
>>> + self.target.logger.warning(msg)
>>> +
>>> + parser = LtpKirkParser()
>>> + results, sections = parser.parse(dst)
>>>
>>> runtime = int(endtime-starttime)
>>> sections['duration'] = runtime diff --git
>>> a/meta/lib/oeqa/utils/logparser.py b/meta/lib/oeqa/utils/logparser.py
>>> index c479864162..a907421fab 100644
>>> --- a/meta/lib/oeqa/utils/logparser.py
>>> +++ b/meta/lib/oeqa/utils/logparser.py
>>> @@ -5,6 +5,7 @@
>>> #
>>>
>>> import enum
>>> +import json
>>> import os
>>> import re
>>>
>>> @@ -158,6 +159,34 @@ class LtpParser:
>>> return results, section
>>>
>>>
>>> +class LtpKirkParser:
>>> + """Parse kirk JSON report into the same format as LtpParser."""
>>> +
>>> + STATUS_MAP = {
>>> + "pass": "PASSED",
>>> + "fail": "FAILED",
>>> + "brok": "FAILED",
>>> + "conf": "SKIPPED",
>>> + "warn": "PASSED",
>>> + }
>>> +
>>> + def parse(self, jsonfile):
>>> + with open(jsonfile, errors="replace") as f:
>>> + report = json.load(f)
>>> +
>>> + results = {}
>>> + section = {"duration": 0, "log": ""}
>>> +
>>> + for entry in report.get("results", []):
>>> + results[entry["test_fqn"]] =
>>> +self.STATUS_MAP.get(entry.get("status", ""), "FAILED")
>>> + test = entry.get("test", {})
>>> + section["log"] += test.get("log", "")
>>> +
>>> + section["duration"] = int(report.get("stats",
>>> +{}).get("runtime", 0))
>>> +
>>> + return results, section
>>> +
>>> +
>>
>> FWIW we can probably just update the LtpParser class directly rather than
>> creating a wrapper around it since runltp will be no more in the next release
>> anyway.
>>
>> Cheers,
>>
>> Richard
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-27 12:30 ` David Nyström
@ 2026-03-27 15:40 ` Richard Purdie
2026-03-27 15:45 ` Daniel Turull
0 siblings, 1 reply; 19+ messages in thread
From: Richard Purdie @ 2026-03-27 15:40 UTC (permalink / raw)
To: David Nyström, daniel.turull
Cc: openembedded-core@lists.openembedded.org, pratik.farkase@est.tech,
bruce.ashfield
On Fri, 2026-03-27 at 13:30 +0100, David Nyström wrote:
>
> On Thu, 26 Mar 2026, Daniel Turull via lists.openembedded.org wrote:
>
> > Just an update.
> >
> > It is taking a bit more time than expected. My original test only
> > covered the math test suite in ltp to verify the functionality.
> >
> > Some of the ltp test are failing with OOM, some related to systemd-
> > udev. I'll be disabling them now to have a working ltp. Then look
> > at the underlaying issues.
> >
> > So far I have found 4 failing test cases. Using the default config
> > without any changes with qemux86-64
> >
> > min_free_kbytes (mm) (OOM)
>
> This seems to be a buggy testcase for automation. Disable until its
> fixed.
> Even if the test own memory consumers sets their own OOM-score
> higher,
> there are still chances that the OOM-killer kill the wrong things.
>
> > pty07 (pty) (OOM)
> > ptem02 (pty) (OOM)
>
> These seem to me to be related to systemd-udevd having unbounded
> message
> queue sizes to its udev workers. IMO, this is a systemd-udevd issue.
> Some other udev implementations starts dropping events.
>
> We should have seen this when using runltp as well ?
>
> Death spiral: systemd_259.5
> 1. Test tight loop creating devices floods systemd-udevd's workers
> unbounded inbox queue(s).
> - Single core, low mem, and long running udev rules makes the problem
> worse.
> 2. systemd-udevd grows to consume all available RAM
> 3. OOM killer kills everything but systemd-udevd (OOMScoreAdjust=-
> 1000)
> 4. Kernel panic: "no killable processes"
Are the systemd developers aware of this?
You're correct that the ltp testing as currently run does sometimes
seem to have issues and not all tests pass. It is something we've been
wanting to look into and resolve but simply haven't had time.
Finding an issue like the systemd one does hint that there may be value
in some of the testing.
Ideally we'd identify and disable the problematic tests, then we would
know any failures were new and potential issues. The new version of the
patch series from Daniel does move us forward with that, thanks!
Cheers,
Richard
^ permalink raw reply [flat|nested] 19+ messages in thread
* RE: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
2026-03-27 15:40 ` Richard Purdie
@ 2026-03-27 15:45 ` Daniel Turull
0 siblings, 0 replies; 19+ messages in thread
From: Daniel Turull @ 2026-03-27 15:45 UTC (permalink / raw)
To: Richard Purdie, David Nyström
Cc: openembedded-core@lists.openembedded.org, pratik.farkase@est.tech,
bruce.ashfield@gmail.com
Hi,
David open an issue with them now.
https://github.com/systemd/systemd/issues/41372
I used AI to generate a fix for it this afternoon and it seems to be working but I hold a bit with it to fully verify it. There is memory leak in the systemd-udev when a lot of devices are created in a short time.
Daniel
> -----Original Message-----
> From: Richard Purdie <richard.purdie@linuxfoundation.org>
> Sent: Friday, 27 March 2026 16:41
> To: David Nyström <david.nystrom@est.tech>; Daniel Turull
> <daniel.turull@ericsson.com>
> Cc: openembedded-core@lists.openembedded.org; pratik.farkase@est.tech;
> bruce.ashfield@gmail.com
> Subject: Re: [OE-core] [PATCH 2/2] oeqa: replace runltp with kirk
>
> On Fri, 2026-03-27 at 13:30 +0100, David Nyström wrote:
> >
> > On Thu, 26 Mar 2026, Daniel Turull via lists.openembedded.org wrote:
> >
> > > Just an update.
> > >
> > > It is taking a bit more time than expected. My original test only
> > > covered the math test suite in ltp to verify the functionality.
> > >
> > > Some of the ltp test are failing with OOM, some related to systemd-
> > > udev. I'll be disabling them now to have a working ltp. Then look at
> > > the underlaying issues.
> > >
> > > So far I have found 4 failing test cases. Using the default config
> > > without any changes with qemux86-64
> > >
> > > min_free_kbytes (mm) (OOM)
> >
> > This seems to be a buggy testcase for automation. Disable until its
> > fixed.
> > Even if the test own memory consumers sets their own OOM-score higher,
> > there are still chances that the OOM-killer kill the wrong things.
> >
> > > pty07 (pty) (OOM)
> > > ptem02 (pty) (OOM)
> >
> > These seem to me to be related to systemd-udevd having unbounded
> > message queue sizes to its udev workers. IMO, this is a systemd-udevd
> > issue.
> > Some other udev implementations starts dropping events.
> >
> > We should have seen this when using runltp as well ?
> >
> > Death spiral: systemd_259.5
> > 1. Test tight loop creating devices floods systemd-udevd's workers
> > unbounded inbox queue(s).
> > - Single core, low mem, and long running udev rules makes the problem
> > worse.
> > 2. systemd-udevd grows to consume all available RAM 3. OOM killer
> > kills everything but systemd-udevd (OOMScoreAdjust=-
> > 1000)
> > 4. Kernel panic: "no killable processes"
>
> Are the systemd developers aware of this?
>
> You're correct that the ltp testing as currently run does sometimes seem to have
> issues and not all tests pass. It is something we've been wanting to look into and
> resolve but simply haven't had time.
>
> Finding an issue like the systemd one does hint that there may be value in some of
> the testing.
>
> Ideally we'd identify and disable the problematic tests, then we would know any
> failures were new and potential issues. The new version of the patch series from
> Daniel does move us forward with that, thanks!
>
> Cheers,
>
> Richard
>
>
>
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2026-03-27 15:45 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-25 8:40 [PATCH 1/2] python3-kirk: Add version 4.0.0 daniel.turull
2026-03-25 8:40 ` [PATCH 2/2] oeqa: replace runltp with kirk daniel.turull
2026-03-25 12:38 ` [OE-core] " Alexander Kanavin
2026-03-25 13:37 ` Daniel Turull
2026-03-25 12:58 ` Bruce Ashfield
2026-03-25 13:02 ` Alexander Kanavin
2026-03-25 13:45 ` Daniel Turull
2026-03-25 13:44 ` Daniel Turull
2026-03-25 14:22 ` Bruce Ashfield
2026-03-25 14:41 ` Daniel Turull
2026-03-25 16:35 ` Richard Purdie
2026-03-25 16:42 ` [OE-core] " Daniel Turull
2026-03-26 13:02 ` Daniel Turull
2026-03-27 12:30 ` David Nyström
2026-03-27 15:40 ` Richard Purdie
2026-03-27 15:45 ` Daniel Turull
2026-03-25 12:34 ` [OE-core] [PATCH 1/2] python3-kirk: Add version 4.0.0 Alexander Kanavin
2026-03-25 13:26 ` Daniel Turull
-- strict thread matches above, loose matches on Subject: below --
2026-03-25 11:51 daniel.turull
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox