Patch "kselftests/sched: cleanup the child processes" has been added to the 5.14-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    kselftests/sched: cleanup the child processes

to the 5.14-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     kselftests-sched-cleanup-the-child-processes.patch
and it can be found in the queue-5.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit d095e75faa7aa605f5840dc4f0a15de817487e12
Author: Li Zhijian <lizhijian@xxxxxxxxxxxxxx>
Date:   Thu Sep 2 10:43:33 2021 +0800

    kselftests/sched: cleanup the child processes
    
    [ Upstream commit 1c36432b278cecf1499f21fae19836e614954309 ]
    
    Previously, 'make -C sched run_tests' will block forever when it occurs
    something wrong where the *selftests framework* is waiting for its child
    processes to exit.
    
    [root@iaas-rpma sched]# ./cs_prctl_test
    
     ## Create a thread/process/process group hiearchy
    Not a core sched system
    tid=74985, / tgid=74985 / pgid=74985: ffffffffffffffff
    Not a core sched system
        tid=74986, / tgid=74986 / pgid=74985: ffffffffffffffff
    Not a core sched system
            tid=74988, / tgid=74986 / pgid=74985: ffffffffffffffff
    Not a core sched system
            tid=74989, / tgid=74986 / pgid=74985: ffffffffffffffff
    Not a core sched system
            tid=74990, / tgid=74986 / pgid=74985: ffffffffffffffff
    Not a core sched system
        tid=74987, / tgid=74987 / pgid=74985: ffffffffffffffff
    Not a core sched system
            tid=74991, / tgid=74987 / pgid=74985: ffffffffffffffff
    Not a core sched system
            tid=74992, / tgid=74987 / pgid=74985: ffffffffffffffff
    Not a core sched system
            tid=74993, / tgid=74987 / pgid=74985: ffffffffffffffff
    
    Not a core sched system
    (268) FAILED: get_cs_cookie(0) == 0
    
     ## Set a cookie on entire process group
    -1 = prctl(62, 1, 0, 2, 0)
    core_sched create failed -- PGID: Invalid argument
    (cs_prctl_test.c:272) -
    [root@iaas-rpma sched]# ps
        PID TTY          TIME CMD
       4605 pts/2    00:00:00 bash
      74986 pts/2    00:00:00 cs_prctl_test
      74987 pts/2    00:00:00 cs_prctl_test
      74999 pts/2    00:00:00 ps
    
    Reported-by: kernel test robot <lkp@xxxxxxxxx>
    Signed-off-by: Li Zhijian <lizhijian@xxxxxxxxxxxxxx>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
    Reviewed-by: Chris Hyser <chris.hyser@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20210902024333.75983-1-lizhijian@xxxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/testing/selftests/sched/cs_prctl_test.c b/tools/testing/selftests/sched/cs_prctl_test.c
index 63fe6521c56d9..1829383715c66 100644
--- a/tools/testing/selftests/sched/cs_prctl_test.c
+++ b/tools/testing/selftests/sched/cs_prctl_test.c
@@ -64,6 +64,17 @@ enum pid_type {PIDTYPE_PID = 0, PIDTYPE_TGID, PIDTYPE_PGID};
 
 const int THREAD_CLONE_FLAGS = CLONE_THREAD | CLONE_SIGHAND | CLONE_FS | CLONE_VM | CLONE_FILES;
 
+struct child_args {
+	int num_threads;
+	int pfd[2];
+	int cpid;
+	int thr_tids[MAX_THREADS];
+};
+
+static struct child_args procs[MAX_PROCESSES];
+static int num_processes = 2;
+static int need_cleanup = 0;
+
 static int _prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4,
 		  unsigned long arg5)
 {
@@ -80,8 +91,14 @@ static int _prctl(int option, unsigned long arg2, unsigned long arg3, unsigned l
 #define handle_error(msg) __handle_error(__FILE__, __LINE__, msg)
 static void __handle_error(char *fn, int ln, char *msg)
 {
+	int pidx;
 	printf("(%s:%d) - ", fn, ln);
 	perror(msg);
+	if (need_cleanup) {
+		for (pidx = 0; pidx < num_processes; ++pidx)
+			kill(procs[pidx].cpid, 15);
+		need_cleanup = 0;
+	}
 	exit(EXIT_FAILURE);
 }
 
@@ -108,13 +125,6 @@ static unsigned long get_cs_cookie(int pid)
 	return cookie;
 }
 
-struct child_args {
-	int num_threads;
-	int pfd[2];
-	int cpid;
-	int thr_tids[MAX_THREADS];
-};
-
 static int child_func_thread(void __attribute__((unused))*arg)
 {
 	while (1)
@@ -214,10 +224,7 @@ void _validate(int line, int val, char *msg)
 
 int main(int argc, char *argv[])
 {
-	struct child_args procs[MAX_PROCESSES];
-
 	int keypress = 0;
-	int num_processes = 2;
 	int num_threads = 3;
 	int delay = 0;
 	int res = 0;
@@ -264,6 +271,7 @@ int main(int argc, char *argv[])
 
 	printf("\n## Create a thread/process/process group hiearchy\n");
 	create_processes(num_processes, num_threads, procs);
+	need_cleanup = 1;
 	disp_processes(num_processes, procs);
 	validate(get_cs_cookie(0) == 0);
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux