From a2d5dddade4a5dd975eeeb010a6f52be2977cf99 Mon Sep 17 00:00:00 2001 From: Uwe Kleine-König Date: Thu, 4 Jul 2013 09:40:37 +0200 Subject: rt-tests: fix runtime problem of hackbench on (at least) arm and armhf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The original report only talked about armhf, but the issue was seen on an arm9, too. Signed-off-by: Uwe Kleine-König Signed-off-by: Michael Olbrich --- ...bench-init-child-s-struct-before-using-it.patch | 57 ++++++++++++++++++++++ patches/rt-tests-0.73/series | 1 + 2 files changed, 58 insertions(+) create mode 100644 patches/rt-tests-0.73/hackbench-init-child-s-struct-before-using-it.patch diff --git a/patches/rt-tests-0.73/hackbench-init-child-s-struct-before-using-it.patch b/patches/rt-tests-0.73/hackbench-init-child-s-struct-before-using-it.patch new file mode 100644 index 000000000..aaa90dfcf --- /dev/null +++ b/patches/rt-tests-0.73/hackbench-init-child-s-struct-before-using-it.patch @@ -0,0 +1,57 @@ +From: Sebastian Andrzej Siewior +Date: Thu, 11 Apr 2013 15:20:05 +0200 +Subject: [PATCH] hackbench: init child's struct before using it + +Commit ad27df7 ("Reimplement better child tracking and improve error +handling") changed the way of reporting pid/error after creating a +child. It will return an union which is a mix pid_t, pthread_t and a +signed long long for errors. +Now on 32bit x86 both pid_t and pthread_t are four byte in size and are +stored in the first 4 bytes. Now if the most significant bit of the long +long variable happens to be set by chance (because nobody really +initializes the variable here) then error variable will be negative. On +little endian machines the assignment of pid or threadid won't reset the +sign bit and you see this: + +| Running in process mode with 10 groups using 40 file descriptors each (== 400 tasks) +| Each sender will pass 100 messages of 100 bytes +| 0 children started. Expected 40 +| sending SIGTERM to all child processes +| signaling 0 worker threads to terminate +| Creating workers (error: Success) + +A machine with proper endian handlig (that is big endian) would reset +the sign bit during the assignment of pid and I would not have to make +this patch :) + +While here, I make create_worker() since it is not used outside of this +file. + +Cc: David Sommerseth +Signed-off-by: Sebastian Andrzej Siewior +Signed-off-by: Clark Williams +Origin: upstream, commit:dd6ae1155dc7fbee79426ae5952d48b4151c1cd7 +--- + src/hackbench/hackbench.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/hackbench/hackbench.c b/src/hackbench/hackbench.c +index 03b74b0..6a7f8a3 100644 +--- a/src/hackbench/hackbench.c ++++ b/src/hackbench/hackbench.c +@@ -184,13 +184,14 @@ again: + return NULL; + } + +-childinfo_t create_worker(void *ctx, void *(*func)(void *)) ++static childinfo_t create_worker(void *ctx, void *(*func)(void *)) + { + pthread_attr_t attr; + int err; + childinfo_t child; + pid_t childpid; + ++ memset(&child, 0, sizeof(child)); + switch (process_mode) { + case 1: /* process mode */ + /* Fork the sender/receiver child. */ diff --git a/patches/rt-tests-0.73/series b/patches/rt-tests-0.73/series index caf1a74c7..8bf10ce68 100644 --- a/patches/rt-tests-0.73/series +++ b/patches/rt-tests-0.73/series @@ -1,2 +1,3 @@ fix_3_0_issue.diff add-extra-cflags.patch +hackbench-init-child-s-struct-before-using-it.patch -- cgit v1.2.3