Received: by 2002:a05:7412:d8a:b0:e2:908c:2ebd with SMTP id b10csp4031872rdg; Wed, 18 Oct 2023 12:49:43 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGwi2+ih6ZneRrR27zJTMX6Z5JvmsEr9vlmK9HmyMeyxGWomKdMJrviaFcP8Wb8c9BLZn9X X-Received: by 2002:a05:6359:740b:b0:142:eb11:b0b8 with SMTP id va11-20020a056359740b00b00142eb11b0b8mr386rwb.1.1697658583191; Wed, 18 Oct 2023 12:49:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697658583; cv=none; d=google.com; s=arc-20160816; b=FT310707G1mj31HMGYspp29XT0a68VxW3Gtf3oIunsf4SPwTv/VsTdMCJXsp5YrdXj 0vfTSm6QSoUmEKYarwhEVv7hTVcQKV0LeDfkCQX8wzILgv/fkz5w82IBGqcgknkNcaic 9DeAEmS+uc/AC9xtYpiFlOkmJb6mRQ7dv6djEkMOx0l2Xhka6i3Nee4uyV1WCdQus3cK 70Rze0EmIK5fHn151gY79ZrwWhkYvkenx9e43dtZC2BglMbJWOL85uhg/FcDL8NCB7mC xxOgYDosiKPx8vPNBv3ErwWDpa/+PKjsxbakXuab+WaKp0+m2jt19ik3piKXusulVfK+ /WVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=SD/1DSd8LkUD/zRpHE/Lx7nVsJxLLRJldAx76/Ewjto=; fh=B20RhezvJHpLx0Fb1zmDh8m0WFVXuXoiE7YKTxf9g9k=; b=qAmYX61YAL5K8r22Pty29lXgI8/B3Gs6Jn06+ceNIn/u41ggTah8yVe6zbzJ4tyQRb KuzpuDPRJzFQRHFW3Dpf74W6TieVgIf8zdZdU22uXMLAn7/lqroSMY7k7PLicv54sFyj qY+ZBvNhWADRLsSgtH4wdkRbB2on7QYJS7xN5ARkyn9RRLswDhX5agNpZvKTFsmlxHF6 5lr8KrbF+JqFxY5NRCF6NuykL8ofDyG/TbkJr7jxq8/rG0RSLKSipz35aZywF5YKq3n3 m0qfnOJUXRIgTeTSePE1Eut1t5FDD63Fgvt7vsfls53sKlmJtsRRPOdhDDcwHPV6+8F9 +vRA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=eqzGqdhc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id x10-20020aa79aca000000b0069026fd5a48si4480040pfp.34.2023.10.18.12.49.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Oct 2023 12:49:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=eqzGqdhc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 0D8AD8246E1C; Wed, 18 Oct 2023 12:49:37 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231817AbjJRTtQ (ORCPT + 99 others); Wed, 18 Oct 2023 15:49:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49036 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232221AbjJRTs5 (ORCPT ); Wed, 18 Oct 2023 15:48:57 -0400 Received: from smtp-relay-canonical-0.canonical.com (smtp-relay-canonical-0.canonical.com [185.125.188.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3A73A130; Wed, 18 Oct 2023 12:48:53 -0700 (PDT) Received: from smtp.gmail.com (1.general.jsalisbury.us.vpn [10.172.66.188]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-canonical-0.canonical.com (Postfix) with ESMTPSA id AAB4C41278; Wed, 18 Oct 2023 19:48:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1697658528; bh=SD/1DSd8LkUD/zRpHE/Lx7nVsJxLLRJldAx76/Ewjto=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=eqzGqdhcMKkEsGGZrnIdDr4IRYpseCFXUwUeaxfkv3BDuhXLVq/8uqRDeo5jQM6qv VkMaNlBHQ121JFDJw1UODaexmYsTKTA/hI8ihgT2PLuFzMjTxmEYXpMDNNCkzksL9X rgFpiSMYFdC6BmbJ1zR+6LC1UWONgcszBUHO1KmRonLsWLOQqQks9PdvPSOD98Lkev W7yr8XxezPCmMn1svc1b/M5GDFgTLyrJz+sH5CKFWq3OvfJAxLeyFSVhlubUqr2fdd 3xIjzE6XhBvF0q7IbYnTlsoJg5fR1/hzIyN+R9GA/ikzx4QdA2TeftCRE0n3F3/amB 6XOhOzwec5Jng== From: Joseph Salisbury To: LKML , linux-rt-users , Steven Rostedt , Thomas Gleixner , Carsten Emde , John Kacur , Sebastian Andrzej Siewior , Daniel Wagner , Tom Zanussi , Clark Williams , Pavel Machek , Joseph Salisbury Cc: Wander Lairson Costa , Oleg Nesterov , Peter Zijlstra Subject: [PATCH RT 06/12] sched: avoid false lockdep splat in put_task_struct() Date: Wed, 18 Oct 2023 15:48:27 -0400 Message-Id: <20231018194833.651674-7-joseph.salisbury@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231018194833.651674-1-joseph.salisbury@canonical.com> References: <20231018194833.651674-1-joseph.salisbury@canonical.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Wed, 18 Oct 2023 12:49:37 -0700 (PDT) From: Wander Lairson Costa v5.15.133-rt70-rc1 stable review patch. If anyone has any objections, please let me know. ----------- In put_task_struct(), a spin_lock is indirectly acquired under the kernel stock. When running the kernel in real-time (RT) configuration, the operation is dispatched to a preemptible context call to ensure guaranteed preemption. However, if PROVE_RAW_LOCK_NESTING is enabled and __put_task_struct() is called while holding a raw_spinlock, lockdep incorrectly reports an "Invalid lock context" in the stock kernel. This false splat occurs because lockdep is unaware of the different route taken under RT. To address this issue, override the inner wait type to prevent the false lockdep splat. Suggested-by: Oleg Nesterov Suggested-by: Sebastian Andrzej Siewior Suggested-by: Peter Zijlstra Signed-off-by: Wander Lairson Costa Signed-off-by: Peter Zijlstra (Intel) Link: https://lore.kernel.org/r/20230614122323.37957-3-wander@redhat.com (cherry picked from commit 893cdaaa3977be6afb3a7f756fbfd7be83f68d8c) Signed-off-by: Joseph Salisbury --- include/linux/sched/task.h | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/include/linux/sched/task.h b/include/linux/sched/task.h index 0c2d00809915..75d52a9e7620 100644 --- a/include/linux/sched/task.h +++ b/include/linux/sched/task.h @@ -115,6 +115,19 @@ static inline void put_task_struct(struct task_struct *t) if (!refcount_dec_and_test(&t->usage)) return; + /* + * In !RT, it is always safe to call __put_task_struct(). + * Under RT, we can only call it in preemptible context. + */ + if (!IS_ENABLED(CONFIG_PREEMPT_RT) || preemptible()) { + static DEFINE_WAIT_OVERRIDE_MAP(put_task_map, LD_WAIT_SLEEP); + + lock_map_acquire_try(&put_task_map); + __put_task_struct(t); + lock_map_release(&put_task_map); + return; + } + /* * under PREEMPT_RT, we can't call put_task_struct * in atomic context because it will indirectly @@ -135,10 +148,7 @@ static inline void put_task_struct(struct task_struct *t) * when it fails to fork a process. Therefore, there is no * way it can conflict with put_task_struct(). */ - if (IS_ENABLED(CONFIG_PREEMPT_RT) && !preemptible()) - call_rcu(&t->rcu, __put_task_struct_rcu_cb); - else - __put_task_struct(t); + call_rcu(&t->rcu, __put_task_struct_rcu_cb); } static inline void put_task_struct_many(struct task_struct *t, int nr) -- 2.34.1