Received: by 2002:ab2:6486:0:b0:1ef:eae8:a797 with SMTP id de6csp139887lqb; Fri, 15 Mar 2024 19:36:00 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWaWZggwUbvtrF1cAPWJ8veoXFCf3XlVgT1iVIVSSQRsROz5YVM0MqIkK0jS01rDqSGfoXBVLA3Nfya8hKrJnJCd2UnJFMO8eDXpzmFFQ== X-Google-Smtp-Source: AGHT+IEK2vSm6klkPBl4WxWhxcmupyc8X3qxB/dAgMFvZ4c3Ke9s0wsTofwnkmfD4ArM/oaBnDA6 X-Received: by 2002:a17:907:8e86:b0:a46:2512:aa4f with SMTP id tx6-20020a1709078e8600b00a462512aa4fmr6028939ejc.33.1710556560548; Fri, 15 Mar 2024 19:36:00 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1710556560; cv=pass; d=google.com; s=arc-20160816; b=bfBpE0Yzq2bZs8Arr8JWtneQv7joQgm2CHvPbK1WmWwTegG4gV+1CqNkYRy/fQgbjo KcWMHh0uA3mGCUz5KcQbte5Nu/nzKQ5IfAuRxoBTSWGsnmOkPPrRDDprs34i9AoCT7kP /BOTYWTfQNdMNjw8iYE/xPCvgKMBS2Wv7pJaaditHxr8UUOJNfQHSyI3787df+AxZOMl axD/2A3AeClRjxezecmBPOH3Z0vGUB8HBpJR+ojN2X0zd3qGkbITZWc/xEdOinw3XzfW pt89su502b+6Vt7CUOuNnuLV/Vux376XDSGqkG+3jn4Welxefx5nPuDscBqKd6x8Jvpb +g5Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=bY167KhqzLGt8XZvFfhEUNSfxaLyDHN/L2/QRfKKnO4=; fh=GSiGsvFx9rRu9F1RBGHIJHMOidx3A7USr3Tx4JtKvKU=; b=Cz9qAaa2lMAmbt/dxlzGMYbLYbHjtACqonhm+lluL7Ozg9OR4W2fJReM5ZMjX9++C6 hyw/Sa/6S/9nI0ta87eQeXw8wpEuQiI8GIL0X67uuaTZ7YIfqXftaXlaxqKB275t8szX WX/6NqMZFaDU3NS2hmYVEtwt+C46Bw50F8dzcBkQhUfAQGRupQS5wsthc3OgTwI38/M+ 2V0F/E94k/Q64oMqoQS8mTqGceSHusdRjMd9DBXVXiPzv9W28aZDtx2xhk6yUzPPyC1C aiq5DUkVw0OzfgMqyyM/eSOu3je8WqMOhmpx2SCDmJFj0SdMET3JoCyx//h0N9iO2DN1 JlPw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=h3c.com); spf=pass (google.com: domain of linux-kernel+bounces-105034-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-105034-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id d26-20020a17090648da00b00a465fd6b411si2140109ejt.925.2024.03.15.19.36.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Mar 2024 19:36:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-105034-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=h3c.com); spf=pass (google.com: domain of linux-kernel+bounces-105034-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-105034-linux.lists.archive=gmail.com@vger.kernel.org" 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 am.mirrors.kernel.org (Postfix) with ESMTPS id 43C7B1F22657 for ; Sat, 16 Mar 2024 02:36:00 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 185461FDD; Sat, 16 Mar 2024 02:35:53 +0000 (UTC) Received: from h3cspam02-ex.h3c.com (smtp.h3c.com [60.191.123.50]) (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 8CA6636C; Sat, 16 Mar 2024 02:35:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=60.191.123.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710556552; cv=none; b=TFyGgEWm0ZiOhl1yNQWj9JV/JykgmJMFCIbDsKsx51nacWThdwh+0O+N0mOynOepocpwhfp5jwO/8QFMfx6xTQnCrK9vp+oM+GtyWJFsFGNSWxLVwCBhLaK4lLuoubXCHBRiOXtVUplFwdinccrAb2YHfTEIK2jMBsSiuZzmxX8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710556552; c=relaxed/simple; bh=5UKXr0LrJ+AvmgLX9sd0roltdUUfyJdTU6vBDngQ5wk=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Aih6BAb4VemZsGNGD6I/01KkGesau/1QxQcaMREC1cCcZUu+xan640NA+ATzhd4dCZxtj9m/SzqxsDIrPkW+gxwYhSs/+xuOykSmeVVFX1On+6hrw5YbmJQ55SmmZqWJ/X0CudumOyYLBl4TJadyxw0CEdvEqCTimHJYcbmvPK8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=h3c.com; spf=pass smtp.mailfrom=h3c.com; arc=none smtp.client-ip=60.191.123.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=h3c.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=h3c.com Received: from mail.maildlp.com ([172.25.15.154]) by h3cspam02-ex.h3c.com with ESMTP id 42G2YsDx090365; Sat, 16 Mar 2024 10:34:54 +0800 (GMT-8) (envelope-from liu.yeC@h3c.com) Received: from DAG6EX02-IMDC.srv.huawei-3com.com (unknown [10.62.14.11]) by mail.maildlp.com (Postfix) with ESMTP id F19132004BB2; Sat, 16 Mar 2024 10:36:27 +0800 (CST) Received: from localhost.localdomain (10.114.186.34) by DAG6EX02-IMDC.srv.huawei-3com.com (10.62.14.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.1258.27; Sat, 16 Mar 2024 10:34:54 +0800 From: To: CC: , , , , , , , Subject: [PATCH v1] kdb: Fix the deadlock issue in KDB debugging. Date: Sat, 16 Mar 2024 10:34:43 +0800 Message-ID: <20240316023443.101169-1-liu.yec@h3c.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240314130916.GE202685@aspen.lan> References: <20240314130916.GE202685@aspen.lan> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: BJSMTP02-EX.srv.huawei-3com.com (10.63.20.133) To DAG6EX02-IMDC.srv.huawei-3com.com (10.62.14.11) X-DNSRBL: X-SPAM-SOURCE-CHECK: pass X-MAIL:h3cspam02-ex.h3c.com 42G2YsDx090365 From: LiuYe Currently, if CONFIG_KDB_KEYBOARD is enabled, then kgdboc will attempt to use schedule_work() to provoke a keyboard reset when transitioning out of the debugger and back to normal operation. This can cause deadlock because schedule_work() is not NMI-safe. example: BUG: spinlock lockup suspected on CPU#0, namex/10450 lock: 0xffff881ffe823980, .magic: dead4ead, .owner: namexx/21888, .owner_cpu: 1 ffff881741d00000 ffff881741c01000 0000000000000000 0000000000000000 ffff881740f58e78 ffff881741cffdd0 ffffffff8147a7fc ffff881740f58f20 Call Trace: [] ? __schedule+0x16d/0xac0 [] ? schedule+0x3c/0x90 [] ? schedule_hrtimeout_range_clock+0x10a/0x120 [] ? mutex_unlock+0xe/0x10 [] ? ep_scan_ready_list+0x1db/0x1e0 [] ? schedule_hrtimeout_range+0x13/0x20 [] ? ep_poll+0x27a/0x3b0 [] ? wake_up_q+0x70/0x70 [] ? SyS_epoll_wait+0xb8/0xd0 [] ? entry_SYSCALL_64_fastpath+0x12/0x75 CPU: 0 PID: 10450 Comm: namex Tainted: G O 4.4.65 #1 Hardware name: Insyde Purley/Type2 - Board Product Name1, BIOS 05.21.51.0036 07/19/2019 0000000000000000 ffff881ffe813c10 ffffffff8124e883 ffff881741c01000 ffff881ffe823980 ffff881ffe813c38 ffffffff810a7f7f ffff881ffe823980 000000007d2b7cd0 0000000000000001 ffff881ffe813c68 ffffffff810a80e0 Call Trace: <#DB> [] dump_stack+0x85/0xc2 [] spin_dump+0x7f/0x100 [] do_raw_spin_lock+0xa0/0x150 [] _raw_spin_lock+0x15/0x20 [] try_to_wake_up+0x176/0x3d0 [] wake_up_process+0x15/0x20 [] insert_work+0x81/0xc0 [] __queue_work+0x135/0x390 [] queue_work_on+0x46/0x90 [] kgdboc_post_exp_handler+0x48/0x70 [] kgdb_cpu_enter+0x598/0x610 [] kgdb_handle_exception+0xf2/0x1f0 [] __kgdb_notify+0x71/0xd0 [] kgdb_notify+0x35/0x70 [] notifier_call_chain+0x4a/0x70 [] notify_die+0x3d/0x50 [] do_int3+0x89/0x120 [] int3+0x44/0x80 Suggested-by: daniel.thompson@linaro.org Signed-off-by: LiuYe --- drivers/tty/serial/kgdboc.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c index 7ce7bb164..161b25ecc 100644 --- a/drivers/tty/serial/kgdboc.c +++ b/drivers/tty/serial/kgdboc.c @@ -22,6 +22,7 @@ #include #include #include +#include #define MAX_CONFIG_LEN 40 @@ -99,10 +100,17 @@ static void kgdboc_restore_input_helper(struct work_struct *dummy) static DECLARE_WORK(kgdboc_restore_input_work, kgdboc_restore_input_helper); +static void kgdboc_queue_restore_input_helper(struct irq_work *unused) +{ + schedule_work(&kgdboc_restore_input_work); +} + +static DEFINE_IRQ_WORK(kgdboc_restore_input_irq_work, kgdboc_queue_restore_input_helper); + static void kgdboc_restore_input(void) { if (likely(system_state == SYSTEM_RUNNING)) - schedule_work(&kgdboc_restore_input_work); + irq_work_queue(&kgdboc_restore_input_irq_work); } static int kgdboc_register_kbd(char **cptr) @@ -133,6 +141,7 @@ static void kgdboc_unregister_kbd(void) i--; } } + irq_work_sync(&kgdboc_restore_input_irq_work); flush_work(&kgdboc_restore_input_work); } #else /* ! CONFIG_KDB_KEYBOARD */ -- 2.25.1