From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 44EF038887C for ; Sat, 25 Jul 2026 08:54:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784969701; cv=none; b=fXHmeUtn+G7oolRsW+M8hR4n2Q26SYAgIWplxlx/vNKKBuZUHcZ2I8uwynmUKGfMGzjMW80MB1a43hfgfG0f6eQw7oXpA2Cqysj11mnGoUsWk4U9lYw0Z+GO0R2SRuWBWc5PrZn8T7a9N7oVaCHKx+tCKG+ucRP4DuDTNbpHMBg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784969701; c=relaxed/simple; bh=AMwdyjB7hyw0NqYSHQaz6dmi2+1GNKiv7es6JqJIx+g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dMRfEubsWe6ALcUrz/PzH+nL/UH/DXZLkS+HULo2pVMtgtXz1b3lRAx+UR9pz09p75ksKDK+jRhqM64niCwYqH4TVoDPg3CpV3cCZOEze4pTPDBoezfmaJK5bRv8X581gCKeny0MUBgsGXYlDxoa6UTRJuH0pbj5Epz3nr+HXKQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=V6XNx2AK; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=f8R0RvU5; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="V6XNx2AK"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="f8R0RvU5" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66P4lE5K958504 for ; Sat, 25 Jul 2026 08:54:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 3m3sJGPETkhBWscQG8/Pj7ULi6VLrSuP3GvH0174IBg=; b=V6XNx2AKv0TSQbQE dYGGjJnl+KtEPBlj71sH2YHs7gdb6Io0XX2EwCH8PnUDdId2Dh7d3mHmENoxBLAb 1GJm/c/p4pMp2yDXmOXfZ6JKS1ohRm7MF3iDOLaKj8QcDMTOSyCtw9ObuOJEL233 syxWn6jgbkghYE4N30Qmjh82y5R3XXV8N3z8cFDZHagYTa6IBZ4kOvA1CrjY2O82 8Me/5wGbTH9Oom8xtkev0apIIJFH7AKE8/kYk6/yLzwhJB7fj95t1FcQbq+mAl2t +r0OxQ7gl0JUFM0oUi/Wfcb/OO69kd4hQPe1CZcm3y9KkrvywcYZU824JnTuw5lI nsDJig== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fmmfgrmmy-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 25 Jul 2026 08:54:56 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cca0ed258cso4591905ad.0 for ; Sat, 25 Jul 2026 01:54:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784969696; x=1785574496; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3m3sJGPETkhBWscQG8/Pj7ULi6VLrSuP3GvH0174IBg=; b=f8R0RvU5kL0Th8ir0iZ9RQZ0eUc4SPtZap3hiqK0KPvnoFiqwAjR9YGWrFd4PNVpSH gVgjwzI6jKrA8ovhFKyYWTcumJYeeVwZy0+3L2d24eewvgVmCyAFfgmxTJD9zL2V584N L08YHQFmM2kJnOt/vAxd2mtgEwyDGuLA8R/LygUF4/ZO8kFP+He2qn2y0yW1XrEObITW zhg2zHjZHGqEqAoxXYR2aCOnwvece6pwEAIpid/yncO18c3SzNOg0kbvRLsyGptOeQAL IHJoeLRoTLTsxEFBEz9hbiBCsjhU9jrqvR7+CNh9Yr4m65wcW3iwY6cQ22OMZoo4D0At rKTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784969696; x=1785574496; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3m3sJGPETkhBWscQG8/Pj7ULi6VLrSuP3GvH0174IBg=; b=fJkRa05HVF8Ei5uLOUSvuc4SXMnC3tZ4z73TkDdLyIn7ZZN9kvvvyLUdqfkiZOGyST QNgSeeELjIfQubbsV8Y6fmEXiDrAHjA3qqV/3RY5+/D9gN9pVj1ScY0odDy57VauOYtT HHYM4qvzQK+Ax1lTP+La22wFm+SAnMhbIGer0CHicFL6YVn/wIaHF2uz/uYQoxYonIXW ZJClc1zgm2118N1nPlmJ4yF4VsJp/DflXbcT+lD/YNu2YJjSr5ezIZBg+fcNljlBqHNk DQz2n1ytNHg0u1rM6IIiLbSfjgIOFHyNgs0Q0BjVktSBKio/xup+Q8B77RmhCx323Fjz JuHA== X-Forwarded-Encrypted: i=1; AHgh+RqPCC565ewDqsUJtMjGNSrLhBF8w8yxaRLdefa65NmEDI0LcdKPD7momi0u51X8PX2QzlUyBufd2G0it2U=@vger.kernel.org X-Gm-Message-State: AOJu0Yydb0stlzwiEl+/9jY92y9h+bjBiqJcW8YTGUVrLO3yDCPULjWB nzvMFns86B846haHI/T566SJyXqYffoCqf3sy3myKsL3kRT7zhYjrCAFjrIUpOsKwPpRl/4RiXO Ha1OvktBb+DqXkG/YZ0WBUMye3eAs4nEuT0qI8FGZVmTzhTJP76z4klG+s5DFgy4hfBM= X-Gm-Gg: AR+sD11ORjqJq330SiOfh6S+FHy0AGa8UtclAWeYQu+//+J+wKElRr54wUyzhTbKvkB x9jX36+a03Wg1MxjNEGKze+Ce/XVuGQY9uaaOQbpnOT3/dBV6zt16iew98xmijWbjHSLRD9dCrR 1aEK9gZDMYSIJ2CD49gdJb6qzryaHiQTO71wTqNjVaimL1Gg1zK6Tnxw2M4UxsulcJUlTSDpzWb AJo2JH5RhSvPEbIFaFCusjJLS3o2qhq5NAOGhfnsB+aXI+ENa1LMxl4ePbC/D31lj/NRJnfprf1 aCoV52+yqpQ2q+Py7VCcYRLYZYvHt0mfl/ESveS9Vlf4uXS7W7eNpFGvT+Wt3D7h0wdJ1wFOuT9 +e6M3/GAxR3Q/vR2Xg6I+Xrq1k6/H3+AfjabNxB+2HEKkU4w= X-Received: by 2002:a17:903:468e:b0:2cc:df15:91e2 with SMTP id d9443c01a7336-2cfde8c2f20mr12140235ad.7.1784969695619; Sat, 25 Jul 2026 01:54:55 -0700 (PDT) X-Received: by 2002:a17:903:468e:b0:2cc:df15:91e2 with SMTP id d9443c01a7336-2cfde8c2f20mr12140135ad.7.1784969695213; Sat, 25 Jul 2026 01:54:55 -0700 (PDT) Received: from hu-zijuhu-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-314bc419c52sm7823000eec.10.2026.07.25.01.54.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Jul 2026 01:54:54 -0700 (PDT) From: Zijun Hu Date: Sat, 25 Jul 2026 01:54:41 -0700 Subject: [PATCH 03/11] Bluetooth: coredump: Introduce and apply hci_devcd_state_name() 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" Content-Transfer-Encoding: 7bit Message-Id: <20260725-generic_fix-v1-3-305aec261a19@oss.qualcomm.com> References: <20260725-generic_fix-v1-0-305aec261a19@oss.qualcomm.com> In-Reply-To: <20260725-generic_fix-v1-0-305aec261a19@oss.qualcomm.com> To: Marcel Holtmann , Luiz Augusto von Dentz , Abhishek Pandit-Subedi , Chethan Tumkur Narayan , Manish Mandlik Cc: Zijun Hu , Luiz Augusto von Dentz , linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org, Zijun Hu X-Mailer: b4 0.15.2 X-Proofpoint-GUID: EV1CqWxoSG2PK7HYAb4owGOHBwMlZOVY X-Proofpoint-ORIG-GUID: EV1CqWxoSG2PK7HYAb4owGOHBwMlZOVY X-Authority-Analysis: v=2.4 cv=GdYnWwXL c=1 sm=1 tr=0 ts=6a6479e0 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=l6NYOpP1_F8NA1PUTOMA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI1MDA4MyBTYWx0ZWRfX3YZA3HUSf4BO urG5J9Mj4bE5LvsnW7BlDrBvu7aAeGgytIlat4VPzM7u5Ivz+cPjCSscDGbvJ0Fi3HCkjFfL/k1 Xv0o91QkPGHqgJu4n4+LkzvqHR8TLio= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI1MDA4MyBTYWx0ZWRfX2bmE1RRoU3ix Fd2qO89+ZxDPM4wUdvl3/+D25dDuTOhyMZlf+yNbkm/SOzVRVhswZ+IeznoVnJikbHNioVs887Q HQSKCJVqU9/LjzEFPKHTZnkCl3Cg9V7RAZejrAEBeO2dwWRc9VvbgBAEd/GcWCEayx85gdqQvA6 n+FScQyeKX1VOz5B1vlhltipxjU0xJqRnNY9CsR0jQj5y2daNoEv/2nErNBivzSbpE+ZpWbG2fF Hn9tOasmAJ7ZNe2JdXLj7WTlVBv+hBaRZ1LB8w7yWsX2SVdUwck0agT2l1Y+7TUxmCDPJV1jdQX 1oUrUFLO++MyJ67vDmibiCaFsOvUzZGORaUD2CIZP1GjUmKW2yfKpMyQFbkBY8FHevEqrIznBjh laGa1n1bmSTNLXLrKKZmhWTCE9xld+djXpEut6GtYz3GY0kjp8PsK2u6fj5c3Y/H+UwgfmunIv/ QlkDDbCPAdV4Ey663Zg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-25_02,2026-07-24_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 spamscore=0 malwarescore=0 phishscore=0 clxscore=1015 lowpriorityscore=0 bulkscore=0 suspectscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607250083 Introduce hci_devcd_state_name() to describe the devcoredump state by a string name instead of a plain number, for several reasons: 1) Applying it in coredump.c makes the devcoredump state in log messages more readable than a plain number. 2) Transport drivers may need to show the devcoredump state name too. 3) In future, the universal state name could be notified to userspace via uevent, allowing a universal application (e.g. a daemon) to be developed to save the coredump, which is otherwise discarded by the device coredump core after 5 minutes (DEVCD_TIMEOUT); see nxp_coredump_notify(). Also drop a trailing space from two bt_dev_dbg() format strings while applying it in coredump.c. Signed-off-by: Zijun Hu --- Previous version: https://lore.kernel.org/all/20260713-btusb_prep_qcc2072-v2-1-bbcb651285f2@oss.qualcomm.com Changes since previous version: - Improve commit title and message. --- include/net/bluetooth/coredump.h | 7 +++++++ net/bluetooth/coredump.c | 45 +++++++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/include/net/bluetooth/coredump.h b/include/net/bluetooth/coredump.h index 72f51b587a04..ab85a6adfffd 100644 --- a/include/net/bluetooth/coredump.h +++ b/include/net/bluetooth/coredump.h @@ -55,30 +55,37 @@ struct hci_devcoredump { coredump_t coredump; dmp_hdr_t dmp_hdr; notify_change_t notify_change; }; #ifdef CONFIG_DEV_COREDUMP +const char *hci_devcd_state_name(enum devcoredump_state state); + void hci_devcd_reset(struct hci_dev *hdev); void hci_devcd_rx(struct work_struct *work); void hci_devcd_timeout(struct work_struct *work); int hci_devcd_register(struct hci_dev *hdev, coredump_t coredump, dmp_hdr_t dmp_hdr, notify_change_t notify_change); int hci_devcd_init(struct hci_dev *hdev, u32 dump_size); int hci_devcd_append(struct hci_dev *hdev, struct sk_buff *skb); int hci_devcd_append_pattern(struct hci_dev *hdev, u8 pattern, u32 len); int hci_devcd_complete(struct hci_dev *hdev); int hci_devcd_abort(struct hci_dev *hdev); #else +static inline const char *hci_devcd_state_name(enum devcoredump_state state) +{ + return ""; +} + static inline void hci_devcd_reset(struct hci_dev *hdev) {} static inline void hci_devcd_rx(struct work_struct *work) {} static inline void hci_devcd_timeout(struct work_struct *work) {} static inline int hci_devcd_register(struct hci_dev *hdev, coredump_t coredump, dmp_hdr_t dmp_hdr, notify_change_t notify_change) { diff --git a/net/bluetooth/coredump.c b/net/bluetooth/coredump.c index c0f027fab583..913bbba559f8 100644 --- a/net/bluetooth/coredump.c +++ b/net/bluetooth/coredump.c @@ -25,18 +25,19 @@ struct hci_devcoredump_skb_pattern { u8 pattern; u32 len; } __packed; #define hci_dmp_cb(skb) ((struct hci_devcoredump_skb_cb *)((skb)->cb)) #define DBG_UNEXPECTED_STATE() \ bt_dev_dbg(hdev, \ - "Unexpected packet (%d) for state (%d). ", \ - hci_dmp_cb(skb)->pkt_type, hdev->dump.state) + "Unexpected packet (%d) for state %s.", \ + hci_dmp_cb(skb)->pkt_type, \ + hci_devcd_state_name(hdev->dump.state)) #define MAX_DEVCOREDUMP_HDR_SIZE 512 /* bytes */ static int hci_devcd_update_hdr_state(char *buf, size_t size, int state) { int len = 0; if (!buf) @@ -45,18 +46,19 @@ static int hci_devcd_update_hdr_state(char *buf, size_t size, int state) len = scnprintf(buf, size, "Bluetooth devcoredump\nState: %d\n", state); return len + 1; /* scnprintf adds \0 at the end upon state rewrite */ } /* Call with hci_dev_lock only. */ static int hci_devcd_update_state(struct hci_dev *hdev, int state) { - bt_dev_dbg(hdev, "Updating devcoredump state from %d to %d.", - hdev->dump.state, state); + bt_dev_dbg(hdev, "Updating devcoredump state from %s to %s.", + hci_devcd_state_name(hdev->dump.state), + hci_devcd_state_name(state)); hdev->dump.state = state; return hci_devcd_update_hdr_state(hdev->dump.head, hdev->dump.alloc_size, state); } static int hci_devcd_mkheader(struct hci_dev *hdev, struct sk_buff *skb) @@ -240,17 +242,17 @@ static void hci_devcd_handle_pkt_pattern(struct hci_dev *hdev, bt_dev_dbg(hdev, "Failed to set pattern"); } static void hci_devcd_dump(struct hci_dev *hdev) { struct sk_buff *skb; u32 size; - bt_dev_dbg(hdev, "state %d", hdev->dump.state); + bt_dev_dbg(hdev, "state %s", hci_devcd_state_name(hdev->dump.state)); size = hdev->dump.tail - hdev->dump.head; /* Send a copy to monitor as a diagnostic packet */ skb = bt_skb_alloc(size, GFP_ATOMIC); if (skb) { skb_put_data(skb, hdev->dump.head, size); hci_recv_diag(hdev, skb); @@ -363,18 +365,19 @@ void hci_devcd_rx(struct work_struct *work) hci_devcd_handle_pkt_complete(hdev, skb); break; case HCI_DEVCOREDUMP_PKT_ABORT: hci_devcd_handle_pkt_abort(hdev, skb); break; default: - bt_dev_dbg(hdev, "Unknown packet (%d) for state (%d). ", - hci_dmp_cb(skb)->pkt_type, hdev->dump.state); + bt_dev_dbg(hdev, "Unknown packet (%d) for state %s.", + hci_dmp_cb(skb)->pkt_type, + hci_devcd_state_name(hdev->dump.state)); break; } hci_dev_unlock(hdev); kfree_skb(skb); /* Notify the driver about any state changes before resetting * the state machine @@ -544,8 +547,36 @@ int hci_devcd_abort(struct hci_dev *hdev) hci_dmp_cb(skb)->pkt_type = HCI_DEVCOREDUMP_PKT_ABORT; skb_queue_tail(&hdev->dump.dump_q, skb); queue_work(hdev->workqueue, &hdev->dump.dump_rx); return 0; } EXPORT_SYMBOL(hci_devcd_abort); + +const char *hci_devcd_state_name(enum devcoredump_state state) +{ + const char *state_name = "Unknown"; + + switch (state) { + case HCI_DEVCOREDUMP_IDLE: + state_name = "IDLE"; + break; + case HCI_DEVCOREDUMP_ACTIVE: + state_name = "ACTIVE"; + break; + case HCI_DEVCOREDUMP_DONE: + state_name = "DONE"; + break; + case HCI_DEVCOREDUMP_ABORT: + state_name = "ABORT"; + break; + case HCI_DEVCOREDUMP_TIMEOUT: + state_name = "TIMEOUT"; + break; + default: + break; + } + + return state_name; +} +EXPORT_SYMBOL(hci_devcd_state_name); -- 2.34.1