Received: by 2002:ab2:1347:0:b0:1f4:ac9d:b246 with SMTP id g7csp64553lqg; Wed, 10 Apr 2024 15:47:07 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXOV6SduDzGl/KOnw9vG9yaOUVhPcTMbQPHlOH1I6RMkmv0QpuzQVPPQwjygutrekuCDI4FRQLVgspf/n7+AiA2zCUAZbN7xOYIESVstA== X-Google-Smtp-Source: AGHT+IHfR+X2iGQNLHBgl+7pPa3ZOHhpj/45DGabcj/+qv26D4muJoSgpvXH8rzLtqiJEyoR41JC X-Received: by 2002:a05:6a21:78a9:b0:1a7:6918:9e96 with SMTP id bf41-20020a056a2178a900b001a769189e96mr5105332pzc.3.1712789226770; Wed, 10 Apr 2024 15:47:06 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712789226; cv=pass; d=google.com; s=arc-20160816; b=Fc7Wep/7fB09NI2lDKGV7LqYAX6p6I514VH9JKZ6fF8UyZ1vRZUkpizWbCxCr4mv+e 2ek3mo9Zoj6sPif9EyLwQBfl2W4avkoDTjfi2Yp2QVylmAptI0+CW4+koUGsIx+BEXuh RxCpnVv7T9KDzTjWTR+N9JXeQddSdgdf1RI35zjfMq/fmbl6VDo2AddTdmWDLxPapDBl ciKnjsRc6x/maifFZr3xFk2hSHlKQwXD3ZTCN6SIi5giettdlqJUSbBufxw9DBe4MgbN UdimCWv9igMJi4QMdPqkoNs5slXysPfnXYYGHiIVL3/pu1uMGsVJ1ddu6+ZLixEcV1kl wuww== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:mime-version:list-unsubscribe:list-subscribe:list-id :precedence:references:subject:cc:to:from:dkim-signature :dkim-signature:message-id; bh=wBuqBPrJ78lfRZ7AX91zzV87OtbmlXth39hEp1fmaS0=; fh=joBs/8L+orz77ylyCy6wqNwwi35f7sYhLR+/TQjQjhI=; b=t9A1MVyrOOP2HJfK9TSeYEw34GfwsqAsa+gtYGXEs8qKoDE5GrBeEyVG09bPLHgOoG VaHDNL2bJi166JANjXpttzPE+V0iHdOeO1BUEZuDEbd52GGxXL4StzmD2ii/0RSSj+d7 bteMP4kE+oYu482ZvxNH4FeR7m5rbESy84ArKybAN67iveFijOp8XGQhVOt/v9wrKqTx MIZZWipg5+q9kQUNHV0YG74RRsMvSCnptKT8sFwm5tXg28BGRshD1yVIwRd4LBcvv+JD +DcHCco6lx8vc2+NpebbJYEWi1chxR/3/bWv5ZjQazCbLaeocSxYe9YNdSex8YAj8tFR ulRA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=wcK5YdEl; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e; arc=pass (i=1 spf=pass spfdomain=linutronix.de dkim=pass dkdomain=linutronix.de dmarc=pass fromdomain=linutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-139456-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-139456-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id u12-20020a65670c000000b005e47afd5c60si82861pgf.646.2024.04.10.15.47.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Apr 2024 15:47:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-139456-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=wcK5YdEl; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e; arc=pass (i=1 spf=pass spfdomain=linutronix.de dkim=pass dkdomain=linutronix.de dmarc=pass fromdomain=linutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-139456-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-139456-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 701A0283E97 for ; Wed, 10 Apr 2024 22:47:06 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 825673F9D9; Wed, 10 Apr 2024 22:46:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="wcK5YdEl"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="qPGLUpsJ" Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2EB1B3AC16 for ; Wed, 10 Apr 2024 22:46:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712789182; cv=none; b=my35rGAIQ3ZFsgx363jLmidemwDNEjSSe4wXs5H4FiS+90hXNMsrnvTPe4B+6N6Rj5Ij3xiStDR7/PY1mHREuUqJ930vocpMzJqgbnjbpc0tmYXhNlZYsZmMshcaTaUE/uzxVeIiqK19d782O/L2vW5ZL8KtZPs2hS7XQ/kxG5U= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712789182; c=relaxed/simple; bh=dFadCdHIj/hoRcxQcT8VgvmC98onMotQm8AlW+HXtsQ=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=QfB02g9EmGTQaG7uSeH6UAsgOOwB4T4OpR5HLYFQfvRwOfU/+0u/SNgS/8Ej7qZdoTyJWzC6FlNaWwL3q2kzjQqNFaOoOF/nEOYmi/QZ7j5lLN2waMlMI8q+pE8s0Z6E1aYe5mux8B0hYPE0GF/9yHQOeBzUmowViBeSiXnd2rw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=wcK5YdEl; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=qPGLUpsJ; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Message-ID: <20240410165551.188561268@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1712789179; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=wBuqBPrJ78lfRZ7AX91zzV87OtbmlXth39hEp1fmaS0=; b=wcK5YdElAv+Vw/2iSm0WNRt2z53gmNT2k2k/Y0YycLZbQjWnnye/CoEjQg1CBx9WCDwM6T QgCkvaiKynTeEQpvyG12ctfls5fhDuqw3hVaxXll6cVBjqp3hKLSllzshO5vWhC+Vuvby/ AUdtETnq4NZtx3uJlIi2E+uwC3NegQ3QrhPLj1cnkV7mZJEL8/7FdEFxGAoo7xvVmIMhk8 5C/LULJ/W1UR+oWYhSSXnWhHAFOIogcuLWyuckHum/RjLzxUIkfn8QOKutbb++jfqlieYd IcPkx8iW7u8SXjYUv38MY5azirtaZ1SS3QmmXRsVZGYKQ8zc4CsWrTQtPLxaMw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1712789179; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=wBuqBPrJ78lfRZ7AX91zzV87OtbmlXth39hEp1fmaS0=; b=qPGLUpsJ5erUqRCEre+kulajLbpbjs9RFKDAYYMfNcyI4/zxSvVyiF9Hx1ZMll+wR8bjX3 n1mlYx1JW7vGQIAw== From: Thomas Gleixner To: LKML Cc: Anna-Maria Behnsen , Frederic Weisbecker , John Stultz , Peter Zijlstra , Ingo Molnar , Stephen Boyd , Eric Biederman , Oleg Nesterov Subject: [patch V2 04/50] selftests/timers/posix-timers: Validate SIGEV_NONE References: <20240410164558.316665885@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Date: Thu, 11 Apr 2024 00:46:19 +0200 (CEST) Posix timers with a delivery mode of SIGEV_NONE deliver no signals but the remaining expiry time must be readable via timer_gettime() for both one shot and interval timers. That's implemented correctly for regular posix timers but broken for posix CPU timers. Add a self test so the fixes can be verified. Signed-off-by: Thomas Gleixner --- tools/testing/selftests/timers/posix_timers.c | 53 +++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) --- a/tools/testing/selftests/timers/posix_timers.c +++ b/tools/testing/selftests/timers/posix_timers.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -20,6 +21,7 @@ #define DELAY 2 #define USECS_PER_SEC 1000000 +#define NSECS_PER_SEC 1000000000 static void __fatal_error(const char *test, const char *name, const char *what) { @@ -438,10 +440,57 @@ static void check_delete(void) ksft_test_result(!tsig.signals, "check_delete\n"); } +static inline int64_t calcdiff_ns(struct timespec t1, struct timespec t2) +{ + int64_t diff; + + diff = NSECS_PER_SEC * (int64_t)((int) t1.tv_sec - (int) t2.tv_sec); + diff += ((int) t1.tv_nsec - (int) t2.tv_nsec); + return diff; +} + +static void check_sigev_none(int which, const char *name) +{ + struct timespec start, now; + struct itimerspec its; + struct sigevent sev; + timer_t timerid; + + memset(&sev, 0, sizeof(sev)); + sev.sigev_notify = SIGEV_NONE; + + if (timer_create(which, &sev, &timerid)) + fatal_error(name, "timer_create()"); + + /* Start the timer to expire in 100ms and 100ms intervals */ + its.it_value.tv_sec = 0; + its.it_value.tv_nsec = 100000000; + its.it_interval.tv_sec = 0; + its.it_interval.tv_nsec = 100000000; + timer_settime(timerid, 0, &its, NULL); + + if (clock_gettime(which, &start)) + fatal_error(name, "clock_gettime()"); + + do { + if (clock_gettime(which, &now)) + fatal_error(name, "clock_gettime()"); + } while (calcdiff_ns(now, start) < NSECS_PER_SEC); + + if (timer_gettime(timerid, &its)) + fatal_error(name, "timer_gettime()"); + + if (timer_delete(timerid)) + fatal_error(name, "timer_delete()"); + + ksft_test_result(its.it_value.tv_sec || its.it_value.tv_nsec, + "check_sigev_none %s\n", name); +} + int main(int argc, char **argv) { ksft_print_header(); - ksft_set_plan(10); + ksft_set_plan(12); ksft_print_msg("Testing posix timers. False negative may happen on CPU execution \n"); ksft_print_msg("based timers if other threads run on the CPU...\n"); @@ -467,6 +516,8 @@ int main(int argc, char **argv) check_sig_ign(1); check_rearm(); check_delete(); + check_sigev_none(CLOCK_MONOTONIC, "CLOCK_MONOTONIC"); + check_sigev_none(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID"); ksft_finished(); }