From patchwork Tue Apr 25 18:49:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Gleixner X-Patchwork-Id: 87521 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp3608499vqo; Tue, 25 Apr 2023 11:59:07 -0700 (PDT) X-Google-Smtp-Source: AKy350bnabnLJZeZN2CJ8Fj065Tz4o/JQWMte5zLceTloQr3RoPfS3kgjaXvSfztcFdkaV7N+PmL X-Received: by 2002:a05:6a21:3405:b0:f5:75f7:a0bd with SMTP id yn5-20020a056a21340500b000f575f7a0bdmr7384490pzb.13.1682449147179; Tue, 25 Apr 2023 11:59:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682449147; cv=none; d=google.com; s=arc-20160816; b=CW6qHt9d0iK136jcbRb1YWBTiIxRLTbo3IlSqvPVcHhQLyTjdjN/BgjBqVFS3brUBY /HTVeqquEUSZqAZnAdq+/+jgJRMwFzyizU0kYR4Lq841UdiVwX8ixiCWrl1Ldm7mGihr aa2+SAoQl1XzfKPnnTIuJUTkTOlIaZ8mMYoCYk2FxKcsxXzdoYX22/3LX67/cPfgnX0M pIXmksRngZfk/mmeSfWfiidDOdTRryZ7Q564dd+/J0aB2gfslReDSmr0WrQ0RE61a1QP YEs2nB618sOZXNB7v59Z/JfX91NuysEK9b8SrEET8slky5DnhJG9W0268fZjh0Yt4UHg P/9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:date:mime-version:references:subject:cc:to:from :dkim-signature:dkim-signature:message-id; bh=vtZji4fDdqL5JPXz+mZaSdd3HdqHgzTa/nenoaE7+wY=; b=cqHxOYM+UWN0opJwtLMkQp+5vgVcAs1L6ndRVhZuz9r/IYkRSCNZI0vlET6nTZAC6b 4dS55PSsOkVFLjQPq6LXyZP1ZtFTzN0TfZn1YbOlTbWDcFuTbuui7qwKnKNK6PMZjsVN i9Q7n2zwMrKMq5Dt5YHeHYw/mxs9bVNlQyi9ssaoQlkhD4rlrenVHRWTb++PkwmXJLt8 qUc5lyETnmDxkBzZ1EFpiyGmwKtH2JpfaxbyqD8dDt9lijTDu9ZMy1xE9qvJvkIlaGg7 ttKW0GqTeOyjI27+tbh2PKh0tsNZrihjwh+vcSgC7BXwAZP0PgEXGKtbEQz56pkxhMQj FZQg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=MCl8sE1w; dkim=neutral (no key) header.i=@linutronix.de header.b=ZSnJfceY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r188-20020a632bc5000000b005130ed530ffsi1511747pgr.529.2023.04.25.11.58.54; Tue, 25 Apr 2023 11:59:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=MCl8sE1w; dkim=neutral (no key) header.i=@linutronix.de header.b=ZSnJfceY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234546AbjDYStg (ORCPT + 99 others); Tue, 25 Apr 2023 14:49:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234713AbjDYStM (ORCPT ); Tue, 25 Apr 2023 14:49:12 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9138E146CC for ; Tue, 25 Apr 2023 11:49:11 -0700 (PDT) Message-ID: <20230425183313.301432503@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1682448550; 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=vtZji4fDdqL5JPXz+mZaSdd3HdqHgzTa/nenoaE7+wY=; b=MCl8sE1w2k63JlbLaZM3ljMGdbOyP8lh1xDJyAF9pKAUQ5tAH2q8NZVtrGyxEfxpKz3E7Z Ki89MTtfkQiGWSGP9J8/ysV723hlhZj1ofjPVPQ/xyzWTTlCFdJMXqlK5Io8GSy7P2jv5X HjC4PS1LOYB5H+0yqHNji+/C2Er8zFC4ZgzfQ8tDCW1IgCs4PbYOrXnOfLAM1ekpTzLnbD oVeGDLLwxctwm9+Cg50JqI01ILVTWRRlnoSUi1CytwKdt056mRCVweTQhRMf128hlnW+oI K+kENoBynan5rUsnfSdbEGNedUCj3RLI0JzicbOaPaqBuChhFeu9NsonXw+/7w== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1682448550; 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=vtZji4fDdqL5JPXz+mZaSdd3HdqHgzTa/nenoaE7+wY=; b=ZSnJfceYpYgrPMsvVSjfSiZEzahyr073dsjTO3qxPWbU0DqMsMFDGv2Bf9ppE4JRQC3XP6 ondNULoZGLnERuBg== From: Thomas Gleixner To: LKML Cc: Frederic Weisbecker , Anna-Maria Behnsen , Peter Zijlstra , Sebastian Siewior , syzbot+5c54bd3eb218bb595aa9@syzkaller.appspotmail.com, Dmitry Vyukov , Michael Kerrisk Subject: [patch 09/20] posix-timers: Split release_posix_timers() References: <20230425181827.219128101@linutronix.de> MIME-Version: 1.0 Date: Tue, 25 Apr 2023 20:49:09 +0200 (CEST) X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1764175797086414200?= X-GMAIL-MSGID: =?utf-8?q?1764175797086414200?= release_posix_timers() is called for cleaning up both hashed and unhashed timers. The cases are differentiated by an argument and the usage is hideous. Seperate the actual free path out and use it for unhashed timers. Provide a function for hashed timers. No functional change. Signed-off-by: Thomas Gleixner Reviewed-by: Frederic Weisbecker --- kernel/time/posix-timers.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) --- a/kernel/time/posix-timers.c +++ b/kernel/time/posix-timers.c @@ -465,20 +465,21 @@ static void k_itimer_rcu_free(struct rcu kmem_cache_free(posix_timers_cache, tmr); } -#define IT_ID_SET 1 -#define IT_ID_NOT_SET 0 -static void release_posix_timer(struct k_itimer *tmr, int it_id_set) -{ - if (it_id_set) { - spin_lock(&hash_lock, flags); - hlist_del_rcu(&tmr->t_hash); - spin_unlock(&hash_lock, flags); - } +static void posix_timer_free(struct k_itimer *tmr) +{ put_pid(tmr->it_pid); sigqueue_free(tmr->sigq); call_rcu(&tmr->rcu, k_itimer_rcu_free); } +static void posix_timer_unhash_and_free(struct k_itimer *tmr) +{ + spin_lock(&hash_lock); + hlist_del_rcu(&tmr->t_hash); + spin_unlock(&hash_lock); + posix_timer_free(tmr); +} + static int common_timer_create(struct k_itimer *new_timer) { hrtimer_init(&new_timer->it.real.timer, new_timer->it_clock, 0); @@ -492,7 +493,6 @@ static int do_timer_create(clockid_t whi const struct k_clock *kc = clockid_to_kclock(which_clock); struct k_itimer *new_timer; int error, new_timer_id; - int it_id_set = IT_ID_NOT_SET; if (!kc) return -EINVAL; @@ -512,11 +512,10 @@ static int do_timer_create(clockid_t whi */ new_timer_id = posix_timer_add(new_timer); if (new_timer_id < 0) { - error = new_timer_id; - goto out; + posix_timer_free(new_timer); + return new_timer_id; } - it_id_set = IT_ID_SET; new_timer->it_id = (timer_t) new_timer_id; new_timer->it_clock = which_clock; new_timer->kclock = kc; @@ -568,7 +567,7 @@ static int do_timer_create(clockid_t whi * new_timer after the unlock call. */ out: - release_posix_timer(new_timer, it_id_set); + posix_timer_unhash_and_free(new_timer); return error; } @@ -1056,7 +1055,7 @@ SYSCALL_DEFINE1(timer_delete, timer_t, t WRITE_ONCE(timer->it_signal, NULL); unlock_timer(timer, flags); - release_posix_timer(timer, IT_ID_SET); + posix_timer_unhash_and_free(timer); return 0; } @@ -1115,7 +1114,7 @@ static void itimer_delete(struct k_itime WRITE_ONCE(timer->it_signal, NULL); spin_unlock_irqrestore(&timer->it_lock, flags); - release_posix_timer(timer, IT_ID_SET); + posix_timer_unhash_and_free(timer); } /*