Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp2241961yba; Thu, 25 Apr 2019 13:02:41 -0700 (PDT) X-Google-Smtp-Source: APXvYqx2bc3uRJHnVvHrU35IuKlBO86mhZ/fWhZhW9b8sD7IzD+hdqfcoToVXXSw7r8qXfFYsYFg X-Received: by 2002:a17:902:7085:: with SMTP id z5mr31574597plk.78.1556222561705; Thu, 25 Apr 2019 13:02:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556222561; cv=none; d=google.com; s=arc-20160816; b=Ms0BiIqDQpl0jDfcGuFeM4aytSlI93uUvF7nXeIWkqlqt61W0GxNVPuxPnMOJoXYoi 1AYGgPVkpxjVfjyKD6GtaMenQ7EAnssiNnKoMwn0zwt8iJ/9V9CIiZV9y97rMDyUIHvk G7ewtwvtZqTwdVdqLISN5ulde9sHxxbr7dG2wLHNZVwrJDXrWFaWRVlmKrIJpGsvXCbD 7VF8rtybBA1IiKf56q5SgmvT/q0lvfOJxmOmIOTdoUcSTKAPb8W1ed6wI4YF96adli66 FCSqETYeU1CaikvnlRSR4e1ULndOML+l42EBbyv/FSqkwm+b9bhSAOP5JeEKTuorD7m2 0Fxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=YlNSEGqvGsK2xSc3bT8VpIFfzPtgMJJdRkn6eq4st2Q=; b=i/g4/WEpWiik5Qkvg3AmAyL3TgYf1ZCcIrWPzbjnWElOvWxkNLogcOa0b8K0sSILRJ o8HNXPjz9t4sBXlSietCUCp8XmPOys24D9mlobdmvFCZCNB8IpOSeY0AU650DHCy5wvH xKh2T/XF8FTxr+1Qi7HS9YyZAMbDgzvowv766LoD8NmuhQqW655yBBIKsMJhhPsxCXsB Npsw1pcBy5mRBySjKbnxSE6EbsrzGsLFQ0tbfrjotyhTdEjq7XltQ0pIQbwh4sObBv9y ahUsb0uAXvjUvHqHabqWRfjh6+XxqIPL7k8B0fFFrWN7jxcr9BNWCkDHpCdbJOC/4waZ tEPg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@tycho-ws.20150623.gappssmtp.com header.s=20150623 header.b=u60JpgEH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i8si17325772pgf.502.2019.04.25.13.02.25; Thu, 25 Apr 2019 13:02:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@tycho-ws.20150623.gappssmtp.com header.s=20150623 header.b=u60JpgEH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730857AbfDYUAk (ORCPT + 99 others); Thu, 25 Apr 2019 16:00:40 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:34198 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730582AbfDYUAj (ORCPT ); Thu, 25 Apr 2019 16:00:39 -0400 Received: by mail-pf1-f193.google.com with SMTP id b3so459480pfd.1 for ; Thu, 25 Apr 2019 13:00:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tycho-ws.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=YlNSEGqvGsK2xSc3bT8VpIFfzPtgMJJdRkn6eq4st2Q=; b=u60JpgEHfhqN5XJ9fiY53IvgvzqGK7C3bKOFuFx2xO9SdYrnux6CjRmIH78frzWMyM lt5r5DFvPuB4gLI0mP1dKkeiWnJSeP05KKd9Q+2IhMaR1O/hEvolIeyvXey4bCxfHIA5 teGLAkVDbV2MhlxaGtS6I59+Qbd13pfy+XhDZhDyJlY2nbyCB4Qawq5JmOCmYT7GHaMK 4UGw7QjG+TCtLl2wicU7pIuqfyFa549hbYCgH3nn9JfMpHxBFrV3HOM/xzNMEGvoL3oD zYwVtRCUPOkIC7UhNW0EiXrFXLnvP8WgDyGFBaTjeLU6orSo1cd2JR5ChZ2qTOG/Sl9K bqxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=YlNSEGqvGsK2xSc3bT8VpIFfzPtgMJJdRkn6eq4st2Q=; b=X5m4+uhQ/LgSLuCE1y1OAqLWmq9XMwEJwO0bYPostluxv3Cnb5RJZEsKOkCEE6vcNc BSGme7D+L+9jM2JLgqdXtrjWpviWXqCpmX18Y9Bj49O0rsqSuHhcuS/F5rFhGY8e+4DP +BEbCC8ud3QaEjEDnpnI/av0QCq4JzEtflMtfn8mFNW8JjQO4RqZbdqTOj0DFk7kW0JX m5wo48CKpambHIeshbH/yV4/OU8Kn6z6dZqiZHmneclqZtEyi5nsSlaKyWmrIhaPqaKh QztLR5nuB7rWwATJQ3sk2yR5uANqYQlp9Fp1JFww3ipre6cf/YC6koZ+p+HA5zgKJirf UbCw== X-Gm-Message-State: APjAAAVk1XPXGXZ3y/9Gcn5+SD+wDCDOq8rLHAqh4CjiqABncxeyEzhd 1a/w5iXK/TDoeOYudwqOv6N+Jg== X-Received: by 2002:aa7:914d:: with SMTP id 13mr42487302pfi.149.1556222438720; Thu, 25 Apr 2019 13:00:38 -0700 (PDT) Received: from cisco ([2601:282:901:dd7b:7136:cebf:c0d3:8091]) by smtp.gmail.com with ESMTPSA id p6sm28628796pfd.122.2019.04.25.13.00.36 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 13:00:37 -0700 (PDT) Date: Thu, 25 Apr 2019 14:00:35 -0600 From: Tycho Andersen To: "Joel Fernandes (Google)" Cc: linux-kernel@vger.kernel.org, Andrew Morton , Arnd Bergmann , Christian Brauner , dancol@google.com, "Eric W. Biederman" , Greg Kroah-Hartman , Ingo Molnar , jannh@google.com, Jann Horn , Jonathan Kowalski , kernel-team@android.com, linux-kselftest@vger.kernel.org, luto@amacapital.net, Michal Hocko , "Peter Zijlstra (Intel)" , rostedt@goodmis.org, Serge Hallyn , Shuah Khan , sspatil@google.com, Stephen Rothwell , surenb@google.com, Thomas Gleixner , timmurray@google.com, torvalds@linux-foundation.org Subject: Re: [PATCH v1 2/2] Add selftests for pidfd polling Message-ID: <20190425200035.GC30500@cisco> References: <20190425190010.46489-1-joel@joelfernandes.org> <20190425190010.46489-2-joel@joelfernandes.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190425190010.46489-2-joel@joelfernandes.org> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Apr 25, 2019 at 03:00:10PM -0400, Joel Fernandes (Google) wrote: > > +void *test_pidfd_poll_exec_thread(void *priv) I think everything in this file can be static, there's this one and 3-4 below. > +int test_pidfd_poll_exec(int use_waitpid) > +{ > + int pid, pidfd = 0; > + int status, ret; > + pthread_t t1; > + time_t prog_start = time(NULL); > + const char *test_name = "pidfd_poll check for premature notification on child thread exec"; > + > + ksft_print_msg("Parent: pid: %d\n", getpid()); > + pid = pidfd_clone(CLONE_PIDFD, &pidfd, child_poll_exec_test); If pidfd_clone() fails here, I think things will go haywire below. > + ksft_print_msg("Parent: Waiting for Child (%d) to complete.\n", pid); > + > + if (use_waitpid) { > + ret = waitpid(pid, &status, 0); > + if (ret == -1) > + ksft_print_msg("Parent: error\n"); > + > + if (ret == pid) > + ksft_print_msg("Parent: Child process waited for.\n"); > + } else { > + poll_pidfd(test_name, pidfd); > + } > + > + time_t prog_time = time(NULL) - prog_start; > + > + ksft_print_msg("Time waited for child: %lu\n", prog_time); > + > + close(pidfd); > + > + if (prog_time < CHILD_THREAD_MIN_WAIT || prog_time > CHILD_THREAD_MIN_WAIT + 2) > + ksft_exit_fail_msg("%s test: Failed\n", test_name); > + else > + ksft_test_result_pass("%s test: Passed\n", test_name); > +} > + > +void *test_pidfd_poll_leader_exit_thread(void *priv) > +{ > + char waittime[256]; > + > + ksft_print_msg("Child Thread: starting. pid %d tid %d ; and sleeping\n", > + getpid(), syscall(SYS_gettid)); > + sleep(CHILD_THREAD_MIN_WAIT); > + ksft_print_msg("Child Thread: DONE. pid %d tid %d\n", getpid(), syscall(SYS_gettid)); > + return NULL; > +} > + > +static time_t *child_exit_secs; > +static int child_poll_leader_exit_test(void *args) > +{ > + pthread_t t1, t2; > + > + ksft_print_msg("Child: starting. pid %d tid %d\n", getpid(), syscall(SYS_gettid)); > + pthread_create(&t1, NULL, test_pidfd_poll_leader_exit_thread, NULL); > + pthread_create(&t2, NULL, test_pidfd_poll_leader_exit_thread, NULL); > + > + /* > + * glibc exit calls exit_group syscall, so explicity call exit only > + * so that only the group leader exits, leaving the threads alone. > + */ > + *child_exit_secs = time(NULL); > + syscall(SYS_exit, 0); > +} > + > +int test_pidfd_poll_leader_exit(int use_waitpid) > +{ > + int pid, pidfd = 0; > + int status, ret; > + time_t prog_start = time(NULL); > + const char *test_name = "pidfd_poll check for premature notification on non-empty" > + "group leader exit"; > + > + child_exit_secs = mmap(NULL, sizeof *child_exit_secs, PROT_READ | PROT_WRITE, > + MAP_SHARED | MAP_ANONYMOUS, -1, 0); > + > + ksft_print_msg("Parent: pid: %d\n", getpid()); > + pid = pidfd_clone(CLONE_PIDFD, &pidfd, child_poll_leader_exit_test); Same problem here, I think. Tycho