Received: by 2002:ab2:3350:0:b0:1f4:6588:b3a7 with SMTP id o16csp1080642lqe; Sun, 7 Apr 2024 18:46:51 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWYUOMmyNn6TQo0xOBo35IAIQQ0AuRibC6Z0rmE7JZyK6RC9yYOMe6uuVdP99yLoUrGkgKN7qth8u8Sb2/+zhCmT4RFs/8QuQQm/C/jmQ== X-Google-Smtp-Source: AGHT+IGDeCzqzfrBYt76DWLXPWwUH33dJRDBaiITWZRn+4s3ukMvSSNQbeg/oMu7PAdERX0mmF6D X-Received: by 2002:ac8:574b:0:b0:434:9991:6498 with SMTP id 11-20020ac8574b000000b0043499916498mr2453814qtx.43.1712540811050; Sun, 07 Apr 2024 18:46:51 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712540811; cv=pass; d=google.com; s=arc-20160816; b=kGoYmPpOGwbEd6qMgDKTEiMZWuYd4Pc0Au5BYZkJp0i3nohtDsOqYzK6X+n2Vfd2Zv vNdi7XlXnpfYL4+VpBb1ni4IN1VwQsRwrlhYr/w07a3X1LsU7jX8tj9EcEYAPwpgFQYN BfDxS/2W97U8/gLmiBgDDZahpfF7fWJSPbuL3O/eHGbmFLBuJRJkvw5ijQLL2qCXtL2j WpqE4wANYdlg84APCVkdFPU+N2iWoJc0xunfTXyNOtTX9UqwPO7j+sJ0tvMyyus0NtUt F9JQFKT5vs3kteZYVKV/qnptGhzJOnRK22fXXsHQvFp2LcH5fcsosKjm4A6cxAF6v8Hn KqiA== 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=QXlkBNTNIsjUTqKIsBmW2qqUatJfppgOnxlgoMpNlPc=; fh=UqS1TgoHNereuDy5nmA7d62l045+wqzvZIgk+fa8B+I=; b=cBNiZG4N2HnJbnAg6WZKonfFBaQP8jqQBGvi5uLynWPRwef7sLOGaBpJJavvuBYYs2 KR8tD8USE27BS+L+dUhyLiOgHnB3oGvSDHY1lk+OIpODV7c0of+VWUhiacmQzT2c30us 9YUdvV9jxwryw5PzLPuA200ySNGBB4qPDX1hOd+uxxk4VV4ZJxqnLq1VF74Ak7UAHjsE gmZ4sEmpOG2Ha6UTxeNNpWz67mGLKyquFFYoPK01FXv3AW0MNvkRFpLliyuemmKWx/AD G9WUlUe+774ABSd+gPlzK3X/QDOYer9USVOIb5QEy2ESqkTqzWTWt1KMMmwnsYRYrwip ZdmQ==; 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-134699-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-134699-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id b9-20020ac85bc9000000b0043461f8c7dbsi6719323qtb.276.2024.04.07.18.46.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Apr 2024 18:46:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-134699-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=h3c.com); spf=pass (google.com: domain of linux-kernel+bounces-134699-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-134699-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 ny.mirrors.kernel.org (Postfix) with ESMTPS id B3E231C20FEC for ; Mon, 8 Apr 2024 01:46:50 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1094E15CE; Mon, 8 Apr 2024 01:46:43 +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 07034A40; Mon, 8 Apr 2024 01:46:38 +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=1712540802; cv=none; b=uBhB8j6J8Q2nC5253iC49hMJlP9uyLnArrOQR7RRgXsokP5Fz5uDKwYC2iXJCFw7j8qERr2/c+qKmtVO/1jM67JvIIoCF70NdgWlkv9L7r11tkS7z8kpV+LFKYSm5k2KeYtO94BGZ5vkosFoYlFsA0wDa42KEOZZqxXU2wkWSjc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712540802; c=relaxed/simple; bh=HyM5zS7f5MYGW6eeBg1qi8l7ZaziJAsjzE+M8sUoukg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qKafLDFQj4vBZcce113NKLZeX8vgzZ9wKOBz9/6+bX07/2xQFTsX30fh2yw7zNGzAsM/gGbVQiF9vmWR4OzrEWFFcBXCwZvZ0enmg08WtHN1lcEdPdWiYyMr8pDSLxnbfbENS6Ob8p3DkC5Gx2iHE53zaOIBZNomn7jIhu2Qp7c= 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 4381jBwW077166; Mon, 8 Apr 2024 09:45:11 +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 D6F9D2004BBA; Mon, 8 Apr 2024 09:47:16 +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; Mon, 8 Apr 2024 09:45:11 +0800 From: LiuYe To: CC: , , , , , , , , , LiuYe Subject: Re: Re: [PATCH V8] kdb: Fix the deadlock issue in KDB debugging. Date: Mon, 8 Apr 2024 09:44:53 +0800 Message-ID: <20240408014453.1431652-1-liu.yeC@h3c.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: 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 4381jBwW077166 >Wed, Apr 03, 2024 at 02:11:09PM +0800, liu.yec@h3c.com kirjoitti: >> 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. >> >> The stack trace below shows an example of the problem. In this >> case the master cpu is not running from NMI but it has parked >> the slave CPUs using an NMI and the parked CPUs is holding >> spinlocks needed by schedule_work(). > >> 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 > >Ouch. >Please, read this >https://www.kernel.org/doc/html/latest/process/submitting-patches.html#backtraces-in-commit-messages >and modify the commit message accordingly. The example is the printout of the kernel lockup detection mechanism, which may be easier to understand. If organized according to the format provided in the previous link, should it be arranged as follows? Example: BUG: spinlock lockup suspected on CPU#0. owner_cpu: 1 CPU1: Call Trace: __schedule schedule schedule_hrtimeout_range_clock mutex_unlock ep_scan_ready_list schedule_hrtimeout_range ep_poll wake_up_q SyS_epoll_wait entry_SYSCALL_64_fastpath CPU0: Call Trace: dump_stack spin_dump do_raw_spin_lock _raw_spin_lock try_to_wake_up wake_up_process insert_work __queue_work queue_work_on kgdboc_post_exp_handler kgdb_cpu_enter kgdb_handle_exception __kgdb_notify kgdb_notify notifier_call_chain notify_die do_int3 int3 >> We fix the problem by using irq_work to call schedule_work() >> instead of calling it directly. This is because we cannot >> resynchronize the keyboard state from the hardirq context >> provided by irq_work. This must be done from the task context >> in order to call the input subsystem. >> >> Therefore, we have to defer the work twice. First, safely >> switch from the debug trap context (similar to NMI) to the >> hardirq, and then switch from the hardirq to the system work queue. > >> Signed-off-by: LiuYe >> Co-authored-by: Daniel Thompson > >Correct tag is Co-developed-by, btw it's written in the same document the link >to which I provided a few lines above. Yes, there will be warnings when using the ./scripts/checkpatch.pl script to check. WARNING: Non-standard signature: Co-authored-by: #68: Co-authored-by: Daniel Thompson total: 0 errors, 1 warnings, 51 lines checked I will change it to the following: Co-developed-by: Daniel Thompson > >> --- a/drivers/tty/serial/kgdboc.c >> +++ b/drivers/tty/serial/kgdboc.c >> @@ -22,6 +22,7 @@ >> #include >> #include >> #include >> +#include > >Please, keep it ordered (with visible context this should go at least before >module.h). I don't understand why this needs to be placed before module.h. Please explain further, thank you.