From patchwork Mon Sep 18 11:25:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linyu Yuan X-Patchwork-Id: 13389506 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (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 B36911C69B for ; Mon, 18 Sep 2023 11:29:50 +0000 (UTC) Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8C926100 for ; Mon, 18 Sep 2023 04:26:07 -0700 (PDT) Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 38I9ifU0028601; Mon, 18 Sep 2023 11:25:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=qcppdkim1; bh=0bHATM7srhyd3qi47UYU/1P2EcZ8WvFX12GkxetIFXw=; b=bd6dicoNZdbT5bYOg5tb4auC415wrSY/X48xmT+A+F4zZHPoa+UPBFYgnVkGmPWh/Joj nARktEFBqu2o8wbGp8HGki3UZ+IHdNTZ4vro3N1NllzuRR4MOgPMocPBMahTwY55QSEt DzCY8D5iImND5f6M4ptxU0NqUOiPZA/aabjE15aswiIpKlwMx5G8brSa+ckQvk+1oF+Z FuOCdKe2omtzIC57NQIQYp+LFA9cGDMuCy64YVeUmrOLez2gnANy2o/uncwG0lXxKCMo 6/03g+PG1KPNyouWqkj2ctsGiLyHbnjSxrr0vF1M62JeAiIE7qy3+voIqBS3+wfLfcM6 oA== Received: from nalasppmta02.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3t54rdtvj0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 18 Sep 2023 11:25:49 +0000 Received: from nalasex01c.na.qualcomm.com (nalasex01c.na.qualcomm.com [10.47.97.35]) by NALASPPMTA02.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 38IBPma8017444 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 18 Sep 2023 11:25:48 GMT Received: from linyyuan-gv.qualcomm.com (10.80.80.8) by nalasex01c.na.qualcomm.com (10.47.97.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.30; Mon, 18 Sep 2023 04:25:46 -0700 From: Linyu Yuan To: Thinh Nguyen , Alan Stern , Greg Kroah-Hartman CC: , Linyu Yuan Subject: [PATCH v7 1/4] usb: gadget: remove UDC_TRACE_STR_MAX definition Date: Mon, 18 Sep 2023 19:25:31 +0800 Message-ID: <20230918112534.2108-2-quic_linyyuan@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230918112534.2108-1-quic_linyyuan@quicinc.com> References: <20230918112534.2108-1-quic_linyyuan@quicinc.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01c.na.qualcomm.com (10.47.97.35) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: uRXfGERIf5QKkprdCrlYh_AHG5zfoh8L X-Proofpoint-GUID: uRXfGERIf5QKkprdCrlYh_AHG5zfoh8L X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.601,FMLib:17.11.176.26 definitions=2023-09-18_04,2023-09-18_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 priorityscore=1501 mlxscore=0 phishscore=0 mlxlogscore=451 clxscore=1015 impostorscore=0 bulkscore=0 malwarescore=0 suspectscore=0 adultscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2308100000 definitions=main-2309180100 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net It is not used anymore. Signed-off-by: Linyu Yuan --- v7: new patch include/linux/usb/gadget.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 75bda0783395..5b5a8c5f2c47 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -26,8 +26,6 @@ #include #include -#define UDC_TRACE_STR_MAX 512 - struct usb_ep; /** From patchwork Mon Sep 18 11:25:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linyu Yuan X-Patchwork-Id: 13389504 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (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 62C3338F8F for ; Mon, 18 Sep 2023 11:27:55 +0000 (UTC) Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 135DC120 for ; Mon, 18 Sep 2023 04:26:17 -0700 (PDT) Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 38IBCa2V003199; Mon, 18 Sep 2023 11:25:52 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=qcppdkim1; bh=kDJ2h5IVc76hK3BR57cqwq62RgTyPvIH5wAVcpDvvHU=; b=lpCouYeHYiIMsGgQ/MmIMVWVhstXmsDvXScKGoseYbKTLHTaRepNeP94010gGHxRuWoz S2BlknP750CQ3dPUpxomMoKyir+NLUJ+0bd8QiM0pR4uShyvIkSf+P+HfvnMgzE1t0Z7 kjdmK8K4FL1ecxHcI7Rvfd3cmK3PYBUHPObLLGjzRs4fDCPcaarDhmmI69BWdjb/n8AO DBem2p2GKBtLPNlNMJ/I8g/E//cGqsqG+KhVIN/UFM2kROrzMBoukFxwSOT5QJRZy8aV 5KLeNDLACtrUWWEN020oobIbc2RtrL0mdsnlX0J9KmDa2EjJ2ts5XjwQeFMyeHItZlJZ 2A== Received: from nalasppmta05.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3t53ps2w50-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 18 Sep 2023 11:25:51 +0000 Received: from nalasex01c.na.qualcomm.com (nalasex01c.na.qualcomm.com [10.47.97.35]) by NALASPPMTA05.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 38IBPoGl023169 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 18 Sep 2023 11:25:50 GMT Received: from linyyuan-gv.qualcomm.com (10.80.80.8) by nalasex01c.na.qualcomm.com (10.47.97.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.30; Mon, 18 Sep 2023 04:25:48 -0700 From: Linyu Yuan To: Thinh Nguyen , Alan Stern , Greg Kroah-Hartman CC: , Linyu Yuan Subject: [PATCH v7 2/4] usb: gadget: add anonymous definition in some struct for trace purpose Date: Mon, 18 Sep 2023 19:25:32 +0800 Message-ID: <20230918112534.2108-3-quic_linyyuan@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230918112534.2108-1-quic_linyyuan@quicinc.com> References: <20230918112534.2108-1-quic_linyyuan@quicinc.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01c.na.qualcomm.com (10.47.97.35) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: ZAcJaFho4XbWa27MlCmr9xnDDPCgYqAP X-Proofpoint-GUID: ZAcJaFho4XbWa27MlCmr9xnDDPCgYqAP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.601,FMLib:17.11.176.26 definitions=2023-09-18_03,2023-09-18_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 mlxscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 malwarescore=0 mlxlogscore=571 spamscore=0 bulkscore=0 impostorscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2308100000 definitions=main-2309180100 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Some UDC trace event will save usb udc information, but it use one int size buffer to save one bit information of usb udc, it waste trace buffer. Add anonymous union which have u32 members can be used by trace event during fast assign stage to save more entries with same trace ring buffer size. In order to access each bit with BIT() macro, add different definition for each bit fields according host little/big endian to make sure it has same eacho bit field have same bit position in memory. Add some macros or helper for later trace event usage which follow the udc structs, As when possible future changes to udc related structs, developers will easy notice them. Signed-off-by: Linyu Yuan --- include/linux/usb/gadget.h | 266 +++++++++++++++++++++++++++++++------ 1 file changed, 226 insertions(+), 40 deletions(-) diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 5b5a8c5f2c47..e06a3b972268 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -24,6 +24,10 @@ #include #include #include +#include +#include +#include +#include #include struct usb_ep; @@ -39,6 +43,7 @@ struct usb_ep; * @num_sgs: number of SG entries * @num_mapped_sgs: number of SG entries mapped to DMA (internal) * @length: Length of that data + * @dw1: trace event purpose * @stream_id: The stream id, when USB3.0 bulk streams are being used * @is_last: Indicates if this is the last request of a stream_id before * switching to a different stream (required for DWC3 controllers). @@ -103,12 +108,28 @@ struct usb_request { unsigned num_sgs; unsigned num_mapped_sgs; - unsigned stream_id:16; - unsigned is_last:1; - unsigned no_interrupt:1; - unsigned zero:1; - unsigned short_not_ok:1; - unsigned dma_mapped:1; + union { + struct { +#ifdef CONFIG_CPU_LITTLE_ENDIAN + u32 stream_id:16; + u32 is_last:1; + u32 no_interrupt:1; + u32 zero:1; + u32 short_not_ok:1; + u32 dma_mapped:1; + u32 pad:11; +#else + u32 pad:11; + u32 dma_mapped:1; + u32 short_not_ok:1; + u32 zero:1; + u32 no_interrupt:1; + u32 is_last:1; + u32 stream_id:16; +#endif + }; + u32 dw1; + }; void (*complete)(struct usb_ep *ep, struct usb_request *req); @@ -121,6 +142,20 @@ struct usb_request { unsigned actual; }; +#define USB_REQ_STREAM_ID GENMASK(15, 0) +#define USB_REQ_IS_LAST BIT(16) +#define USB_REQ_NO_INTERRUPT BIT(17) +#define USB_REQ_ZERO BIT(18) +#define USB_REQ_SHORT_NOT_OK BIT(19) +#define USB_REQ_DMA_MAPPED BIT(20) + +#define USB_REQ_FLAGS \ + {USB_REQ_IS_LAST, "last"},\ + {USB_REQ_NO_INTERRUPT, "no-irq"},\ + {USB_REQ_ZERO, "zero-len"},\ + {USB_REQ_SHORT_NOT_OK, "short-not-ok"},\ + {USB_REQ_DMA_MAPPED, "dma-mapped"} + /*-------------------------------------------------------------------------*/ /* endpoint-specific parts of the api to the usb controller hardware. @@ -161,12 +196,23 @@ struct usb_ep_ops { * @dir_out:Endpoint supports OUT direction. */ struct usb_ep_caps { - unsigned type_control:1; - unsigned type_iso:1; - unsigned type_bulk:1; - unsigned type_int:1; - unsigned dir_in:1; - unsigned dir_out:1; +#ifdef CONFIG_CPU_LITTLE_ENDIAN + u8 type_control:1; + u8 type_iso:1; + u8 type_bulk:1; + u8 type_int:1; + u8 dir_in:1; + u8 dir_out:1; + u8 pad:2; +#else + u8 pad:2; + u8 dir_out:1; + u8 dir_in:1; + u8 type_int:1; + u8 type_bulk:1; + u8 type_iso:1; + u8 type_control:1; +#endif }; #define USB_EP_CAPS_TYPE_CONTROL 0x01 @@ -197,6 +243,9 @@ struct usb_ep_caps { * @caps:The structure describing types and directions supported by endpoint. * @enabled: The current endpoint enabled/disabled state. * @claimed: True if this endpoint is claimed by a function. + * @dw1: trace event purpose + * @dw2: trace event purpose + * @dw3: trace event purpose * @maxpacket:The maximum packet size used on this endpoint. The initial * value can sometimes be reduced (hardware allowing), according to * the endpoint descriptor used to configure the endpoint. @@ -226,19 +275,84 @@ struct usb_ep { const char *name; const struct usb_ep_ops *ops; struct list_head ep_list; - struct usb_ep_caps caps; - bool claimed; - bool enabled; - unsigned maxpacket:16; - unsigned maxpacket_limit:16; - unsigned max_streams:16; - unsigned mult:2; - unsigned maxburst:5; - u8 address; + union { + struct { +#ifdef CONFIG_CPU_LITTLE_ENDIAN + u32 maxpacket:16; + u32 maxpacket_limit:16; +#else + u32 maxpacket_limit:16; + u32 maxpacket:16; +#endif + }; + u32 dw1; + }; + union { + struct { +#ifdef CONFIG_CPU_LITTLE_ENDIAN + u32 max_streams:16; + u32 mult:2; + u32 maxburst:5; + u32 pad:9; +#else + u32 pad:9; + u32 maxburst:5; + u32 mult:2; + u32 max_streams:16; +#endif + }; + u32 dw2; + }; + union { + struct { +#ifdef CONFIG_CPU_LITTLE_ENDIAN + struct usb_ep_caps caps; + u8 claimed:1; + u8 enabled:1; + u8 pad1:6; + u8 address; + u8 reserved; +#else + u8 reserved; + u8 address; + u8 pad1:6; + u8 enabled:1; + u8 claimed:1; + struct usb_ep_caps caps; +#endif + }; + u32 dw3; + }; const struct usb_endpoint_descriptor *desc; const struct usb_ss_ep_comp_descriptor *comp_desc; }; +#define USB_EP_MAXPACKET GENMASK(15, 0) +#define USB_EP_MAXPACKET_LIMIT GENMASK(31, 16) +#define USB_EP_MAX_STREAMS GENMASK(15, 0) +#define USB_EP_MULT GENMASK(17, 16) +#define USB_EP_MAXBURST GENMASK(22, 18) +#define USB_EP_DIR_BI GENMASK(5, 4) +#define USB_EP_DIR_IN BIT(4) +#define USB_EP_DIR_OUT BIT(5) +#define USB_EP_CLAIMED BIT(8) +#define USB_EP_ENABLED BIT(9) +#define USB_EP_ADDRESS GENMASK(23, 16) + +#define USB_EP_FLAGS \ + {USB_EP_CLAIMED, "claimed"},\ + {USB_EP_ENABLED, "enabled"} + +#define USB_EP_MAX_NAME_LEN 16 +static inline char *usb_gadget_ep_name(char *s, u32 dw) +{ + snprintf(s, USB_EP_MAX_NAME_LEN, "ep%d%s", u32_get_bits(dw, USB_EP_ADDRESS), + u32_get_bits(dw, USB_EP_DIR_BI) == 3 ? "" : + u32_get_bits(dw, USB_EP_DIR_IN) ? "in" : "out"); + + return s; +} + /*-------------------------------------------------------------------------*/ #if IS_ENABLED(CONFIG_USB_GADGET) @@ -355,6 +469,7 @@ struct usb_gadget_ops { * @in_epnum: last used in ep number * @mA: last set mA value * @otg_caps: OTG capabilities of this gadget. + * @dw1: trace event purpose * @sg_supported: true if we can handle scatter-gather * @is_otg: True if the USB device port uses a Mini-AB jack, so that the * gadget driver must provide a USB OTG descriptor. @@ -430,30 +545,101 @@ struct usb_gadget { unsigned mA; struct usb_otg_caps *otg_caps; - unsigned sg_supported:1; - unsigned is_otg:1; - unsigned is_a_peripheral:1; - unsigned b_hnp_enable:1; - unsigned a_hnp_support:1; - unsigned a_alt_hnp_support:1; - unsigned hnp_polling_support:1; - unsigned host_request_flag:1; - unsigned quirk_ep_out_aligned_size:1; - unsigned quirk_altset_not_supp:1; - unsigned quirk_stall_not_supp:1; - unsigned quirk_zlp_not_supp:1; - unsigned quirk_avoids_skb_reserve:1; - unsigned is_selfpowered:1; - unsigned deactivated:1; - unsigned connected:1; - unsigned lpm_capable:1; - unsigned wakeup_capable:1; - unsigned wakeup_armed:1; + union { + struct { +#ifdef CONFIG_CPU_LITTLE_ENDIAN + u32 sg_supported:1; + u32 is_otg:1; + u32 is_a_peripheral:1; + u32 b_hnp_enable:1; + u32 a_hnp_support:1; + u32 a_alt_hnp_support:1; + u32 hnp_polling_support:1; + u32 host_request_flag:1; + u32 quirk_ep_out_aligned_size:1; + u32 quirk_altset_not_supp:1; + u32 quirk_stall_not_supp:1; + u32 quirk_zlp_not_supp:1; + u32 quirk_avoids_skb_reserve:1; + u32 is_selfpowered:1; + u32 deactivated:1; + u32 connected:1; + u32 lpm_capable:1; + u32 wakeup_capable:1; + u32 wakeup_armed:1; + u32 pad:13; +#else + u32 pad:13; + u32 wakeup_armed:1; + u32 wakeup_capable:1; + u32 lpm_capable:1; + u32 connected:1; + u32 deactivated:1; + u32 is_selfpowered:1; + u32 quirk_avoids_skb_reserve:1; + u32 quirk_zlp_not_supp:1; + u32 quirk_stall_not_supp:1; + u32 quirk_altset_not_supp:1; + u32 quirk_ep_out_aligned_size:1; + u32 host_request_flag:1; + u32 hnp_polling_support:1; + u32 a_alt_hnp_support:1; + u32 a_hnp_support:1; + u32 b_hnp_enable:1; + u32 is_a_peripheral:1; + u32 is_otg:1; + u32 sg_supported:1; +#endif + }; + + u32 dw1; + }; int irq; int id_number; }; #define work_to_gadget(w) (container_of((w), struct usb_gadget, work)) +#define USB_GADGET_SG_SUPPORTED BIT(0) +#define USB_GADGET_IS_OTG BIT(1) +#define USB_GADGET_IS_A_PERIPHERAL BIT(2) +#define USB_GADGET_B_HNP_ENABLE BIT(3) +#define USB_GADGET_A_HNP_SUPPORT BIT(4) +#define USB_GADGET_A_ALT_HNP_SUPPORT BIT(5) +#define USB_GADGET_HNP_POLLING_SUPPORT BIT(6) +#define USB_GADGET_HOST_REQUEST_FLAG BIT(7) +#define USB_GADGET_QUIRK_EP_OUT_ALIGNED_SIZE BIT(8) +#define USB_GADGET_QUIRK_ALTSET_NOT_SUPP BIT(9) +#define USB_GADGET_QUIRK_STALL_NOT_SUPP BIT(10) +#define USB_GADGET_QUIRK_ZLP_NOT_SUPP BIT(11) +#define USB_GADGET_QUIRK_AVOIDS_SKB_RESERVE BIT(12) +#define USB_GADGET_IS_SELFPOWERED BIT(13) +#define USB_GADGET_DEACTIVATED BIT(14) +#define USB_GADGET_CONNECTED BIT(15) +#define USB_GADGET_LPM_CAPABLE BIT(16) +#define USB_GADGET_WAKEUP_CAPABLE BIT(17) +#define USB_GADGET_WAKEUP_ARMED BIT(18) + +#define USB_GADGET_FLAGS \ + {USB_GADGET_SG_SUPPORTED, "sg"},\ + {USB_GADGET_IS_OTG, "OTG"},\ + {USB_GADGET_IS_A_PERIPHERAL, "a_peripheral"},\ + {USB_GADGET_B_HNP_ENABLE, "b_hnp"},\ + {USB_GADGET_A_HNP_SUPPORT, "a_hnp"},\ + {USB_GADGET_A_ALT_HNP_SUPPORT, "a_alt_hnp"},\ + {USB_GADGET_HNP_POLLING_SUPPORT, "hnp_poll"},\ + {USB_GADGET_HOST_REQUEST_FLAG, "hostreq"},\ + {USB_GADGET_QUIRK_EP_OUT_ALIGNED_SIZE, "out_aligned"},\ + {USB_GADGET_QUIRK_ALTSET_NOT_SUPP, "no_altset"},\ + {USB_GADGET_QUIRK_STALL_NOT_SUPP, "no_stall"},\ + {USB_GADGET_QUIRK_ZLP_NOT_SUPP, "no_zlp"},\ + {USB_GADGET_QUIRK_AVOIDS_SKB_RESERVE, "no_skb_reserve"},\ + {USB_GADGET_IS_SELFPOWERED, "self-powered"},\ + {USB_GADGET_DEACTIVATED, "deactivated"},\ + {USB_GADGET_CONNECTED, "connected"},\ + {USB_GADGET_LPM_CAPABLE, "lpm-capable"},\ + {USB_GADGET_WAKEUP_CAPABLE, "wakeup-capable"},\ + {USB_GADGET_WAKEUP_ARMED, "wakeup-armed"} + /* Interface to the device model */ static inline void set_gadget_data(struct usb_gadget *gadget, void *data) { dev_set_drvdata(&gadget->dev, data); } From patchwork Mon Sep 18 11:25:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linyu Yuan X-Patchwork-Id: 13389503 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (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 CD3A938F8F for ; Mon, 18 Sep 2023 11:27:47 +0000 (UTC) Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3CC8B10F5 for ; Mon, 18 Sep 2023 04:26:12 -0700 (PDT) Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 38IAis3A019863; Mon, 18 Sep 2023 11:25:53 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=qcppdkim1; bh=/qKkcNZTBjHGs6cJHvnyefZU9BOQTyadpw0YmXQe/bc=; b=mXNZZwqVpQUoo2RaDX3va/m4OTDPIiqw61Oj/pj/UdzC1fe8V+Dis1wBuhdhtJrkX7zp LWqxkhjzCU/Woqm/VIwdiz+ab6tx5qoW2LGVb4/XhotS7o4/k3R4RZLKmz317gnHNGXP 6Uhw9IP4aYdAmyve1xi6yUIY9K/fSNoXOHug2gT9oVwKLLL4H+c/TuPJ8I1Q3OFjMgyG +jpxJ+ptz/3/WTarsoxNJ3FIypW8XQil6wUHVJArga1wdz14Jn6dXS4SKuT3v03f4SJ8 za//nMKoKdk2JJKqCmHK3G2mz2BCcBDDsApbAqBe7v+JQVd93jSyzcNLAslt+tJhOro7 gw== Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3t55hu2yqk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 18 Sep 2023 11:25:53 +0000 Received: from nalasex01c.na.qualcomm.com (nalasex01c.na.qualcomm.com [10.47.97.35]) by NALASPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 38IBPqXq031876 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 18 Sep 2023 11:25:52 GMT Received: from linyyuan-gv.qualcomm.com (10.80.80.8) by nalasex01c.na.qualcomm.com (10.47.97.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.30; Mon, 18 Sep 2023 04:25:50 -0700 From: Linyu Yuan To: Thinh Nguyen , Alan Stern , Greg Kroah-Hartman CC: , Linyu Yuan Subject: [PATCH v7 3/4] usb: udc: trace: reduce buffer usage of trace event Date: Mon, 18 Sep 2023 19:25:33 +0800 Message-ID: <20230918112534.2108-4-quic_linyyuan@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230918112534.2108-1-quic_linyyuan@quicinc.com> References: <20230918112534.2108-1-quic_linyyuan@quicinc.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01c.na.qualcomm.com (10.47.97.35) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: dwTikKOOA6GLw7zryoy0JcWNbELKI-4b X-Proofpoint-ORIG-GUID: dwTikKOOA6GLw7zryoy0JcWNbELKI-4b X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.601,FMLib:17.11.176.26 definitions=2023-09-18_02,2023-09-15_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 priorityscore=1501 impostorscore=0 mlxscore=0 bulkscore=0 spamscore=0 mlxlogscore=620 malwarescore=0 lowpriorityscore=0 clxscore=1015 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2308100000 definitions=main-2309180100 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Save u32 members into trace event ring buffer and parse it for bit fields. take below trace event class for explanation, save two u32 members and parse it to generate ep name and other information. old: DECLARE_EVENT_CLASS(udc_log_req, TP_PROTO(struct usb_ep *ep, struct usb_request *req, int ret), TP_ARGS(ep, req, ret), TP_STRUCT__entry( __string(name, ep->name) __field(unsigned, length) __field(unsigned, actual) __field(unsigned, num_sgs) __field(unsigned, num_mapped_sgs) __field(unsigned, stream_id) __field(unsigned, no_interrupt) __field(unsigned, zero) __field(unsigned, short_not_ok) __field(int, status) __field(int, ret) __field(struct usb_request *, req) ), TP_fast_assign( __assign_str(name, ep->name); __entry->length = req->length; __entry->actual = req->actual; __entry->num_sgs = req->num_sgs; __entry->num_mapped_sgs = req->num_mapped_sgs; __entry->stream_id = req->stream_id; __entry->no_interrupt = req->no_interrupt; __entry->zero = req->zero; __entry->short_not_ok = req->short_not_ok; __entry->status = req->status; __entry->ret = ret; __entry->req = req; ), ... ); new: DECLARE_EVENT_CLASS(udc_log_req, TP_PROTO(struct usb_ep *ep, struct usb_request *req, int ret), TP_ARGS(ep, req, ret), TP_STRUCT__entry( __field(u32, edw3) __field(unsigned, length) __field(unsigned, actual) __field(unsigned, num_sgs) __field(unsigned, num_mapped_sgs) __field(u32, rdw1) __field(int, status) __field(int, ret) __field(struct usb_request *, req) ), TP_fast_assign( __entry->edw3 = ep->dw3; __entry->length = req->length; __entry->actual = req->actual; __entry->num_sgs = req->num_sgs; __entry->num_mapped_sgs = req->num_mapped_sgs; __entry->rdw1 = req->dw1; __entry->status = req->status; __entry->ret = ret; __entry->req = req; ), ... ); consider 32 bit ARCH, for old definition, one trace entry size is: 4 (ring buffer event header ) + 8 (trace event header ) + 48 (trace class header) + 9 (ep string name) = 69 bytes. for new definition, one trace entry size is: 4 (ring buffer event header ) + 8 (trace event header ) + 36 (trace class header) = 48 bytes. consider there is 1MB trace buffer space, for old definition, it can save 15196 entries, for new definition, it can save 21845 entries. Use new common trace event macro in gadget.h for output stage. Signed-off-by: Linyu Yuan --- drivers/usb/gadget/udc/trace.h | 114 +++++++++------------------------ 1 file changed, 30 insertions(+), 84 deletions(-) diff --git a/drivers/usb/gadget/udc/trace.h b/drivers/usb/gadget/udc/trace.h index a5ed26fbc2da..690810b66260 100644 --- a/drivers/usb/gadget/udc/trace.h +++ b/drivers/usb/gadget/udc/trace.h @@ -25,20 +25,7 @@ DECLARE_EVENT_CLASS(udc_log_gadget, __field(enum usb_device_speed, max_speed) __field(enum usb_device_state, state) __field(unsigned, mA) - __field(unsigned, sg_supported) - __field(unsigned, is_otg) - __field(unsigned, is_a_peripheral) - __field(unsigned, b_hnp_enable) - __field(unsigned, a_hnp_support) - __field(unsigned, hnp_polling_support) - __field(unsigned, host_request_flag) - __field(unsigned, quirk_ep_out_aligned_size) - __field(unsigned, quirk_altset_not_supp) - __field(unsigned, quirk_stall_not_supp) - __field(unsigned, quirk_zlp_not_supp) - __field(unsigned, is_selfpowered) - __field(unsigned, deactivated) - __field(unsigned, connected) + __field(u32, gdw1) __field(int, ret) ), TP_fast_assign( @@ -46,38 +33,12 @@ DECLARE_EVENT_CLASS(udc_log_gadget, __entry->max_speed = g->max_speed; __entry->state = g->state; __entry->mA = g->mA; - __entry->sg_supported = g->sg_supported; - __entry->is_otg = g->is_otg; - __entry->is_a_peripheral = g->is_a_peripheral; - __entry->b_hnp_enable = g->b_hnp_enable; - __entry->a_hnp_support = g->a_hnp_support; - __entry->hnp_polling_support = g->hnp_polling_support; - __entry->host_request_flag = g->host_request_flag; - __entry->quirk_ep_out_aligned_size = g->quirk_ep_out_aligned_size; - __entry->quirk_altset_not_supp = g->quirk_altset_not_supp; - __entry->quirk_stall_not_supp = g->quirk_stall_not_supp; - __entry->quirk_zlp_not_supp = g->quirk_zlp_not_supp; - __entry->is_selfpowered = g->is_selfpowered; - __entry->deactivated = g->deactivated; - __entry->connected = g->connected; + __entry->gdw1 = g->dw1; __entry->ret = ret; ), - TP_printk("speed %d/%d state %d %dmA [%s%s%s%s%s%s%s%s%s%s%s%s%s%s] --> %d", + TP_printk("speed %d/%d state %d %dmA [%s] --> %d", __entry->speed, __entry->max_speed, __entry->state, __entry->mA, - __entry->sg_supported ? "sg:" : "", - __entry->is_otg ? "OTG:" : "", - __entry->is_a_peripheral ? "a_peripheral:" : "", - __entry->b_hnp_enable ? "b_hnp:" : "", - __entry->a_hnp_support ? "a_hnp:" : "", - __entry->hnp_polling_support ? "hnp_poll:" : "", - __entry->host_request_flag ? "hostreq:" : "", - __entry->quirk_ep_out_aligned_size ? "out_aligned:" : "", - __entry->quirk_altset_not_supp ? "no_altset:" : "", - __entry->quirk_stall_not_supp ? "no_stall:" : "", - __entry->quirk_zlp_not_supp ? "no_zlp" : "", - __entry->is_selfpowered ? "self-powered:" : "bus-powered:", - __entry->deactivated ? "deactivated:" : "activated:", - __entry->connected ? "connected" : "disconnected", + __print_flags(__entry->gdw1, ":", USB_GADGET_FLAGS), __entry->ret) ); @@ -145,34 +106,26 @@ DECLARE_EVENT_CLASS(udc_log_ep, TP_PROTO(struct usb_ep *ep, int ret), TP_ARGS(ep, ret), TP_STRUCT__entry( - __string(name, ep->name) - __field(unsigned, maxpacket) - __field(unsigned, maxpacket_limit) - __field(unsigned, max_streams) - __field(unsigned, mult) - __field(unsigned, maxburst) - __field(u8, address) - __field(bool, claimed) - __field(bool, enabled) + __field(u32, edw3) + __field(u32, edw1) + __field(u32, edw2) __field(int, ret) ), TP_fast_assign( - __assign_str(name, ep->name); - __entry->maxpacket = ep->maxpacket; - __entry->maxpacket_limit = ep->maxpacket_limit; - __entry->max_streams = ep->max_streams; - __entry->mult = ep->mult; - __entry->maxburst = ep->maxburst; - __entry->address = ep->address, - __entry->claimed = ep->claimed; - __entry->enabled = ep->enabled; + __entry->edw3 = ep->dw3; + __entry->edw1 = ep->dw1; + __entry->edw2 = ep->dw2; __entry->ret = ret; ), - TP_printk("%s: mps %d/%d streams %d mult %d burst %d addr %02x %s%s --> %d", - __get_str(name), __entry->maxpacket, __entry->maxpacket_limit, - __entry->max_streams, __entry->mult, __entry->maxburst, - __entry->address, __entry->claimed ? "claimed:" : "released:", - __entry->enabled ? "enabled" : "disabled", ret) + TP_printk("%s: mps %d/%d streams %d mult %d burst %d addr %02x %s --> %d", + usb_gadget_ep_name(__get_buf(USB_EP_MAX_NAME_LEN), __entry->edw3), + u32_get_bits(__entry->edw1, USB_EP_MAXPACKET), + u32_get_bits(__entry->edw1, USB_EP_MAXPACKET_LIMIT), + u32_get_bits(__entry->edw2, USB_EP_MAX_STREAMS), + u32_get_bits(__entry->edw2, USB_EP_MULT), + u32_get_bits(__entry->edw2, USB_EP_MAXBURST), + u32_get_bits(__entry->edw3, USB_EP_ADDRESS), + __print_flags(__entry->edw3, ":", USB_EP_FLAGS), ret) ); DEFINE_EVENT(udc_log_ep, usb_ep_set_maxpacket_limit, @@ -219,41 +172,34 @@ DECLARE_EVENT_CLASS(udc_log_req, TP_PROTO(struct usb_ep *ep, struct usb_request *req, int ret), TP_ARGS(ep, req, ret), TP_STRUCT__entry( - __string(name, ep->name) + __field(u32, edw3) __field(unsigned, length) __field(unsigned, actual) __field(unsigned, num_sgs) __field(unsigned, num_mapped_sgs) - __field(unsigned, stream_id) - __field(unsigned, no_interrupt) - __field(unsigned, zero) - __field(unsigned, short_not_ok) + __field(u32, rdw1) __field(int, status) __field(int, ret) __field(struct usb_request *, req) ), TP_fast_assign( - __assign_str(name, ep->name); + __entry->edw3 = ep->dw3; __entry->length = req->length; __entry->actual = req->actual; __entry->num_sgs = req->num_sgs; __entry->num_mapped_sgs = req->num_mapped_sgs; - __entry->stream_id = req->stream_id; - __entry->no_interrupt = req->no_interrupt; - __entry->zero = req->zero; - __entry->short_not_ok = req->short_not_ok; + __entry->rdw1 = req->dw1; __entry->status = req->status; __entry->ret = ret; __entry->req = req; ), - TP_printk("%s: req %p length %d/%d sgs %d/%d stream %d %s%s%s status %d --> %d", - __get_str(name),__entry->req, __entry->actual, __entry->length, - __entry->num_mapped_sgs, __entry->num_sgs, __entry->stream_id, - __entry->zero ? "Z" : "z", - __entry->short_not_ok ? "S" : "s", - __entry->no_interrupt ? "i" : "I", - __entry->status, __entry->ret - ) + TP_printk("%s: req %p length %d/%d sgs %d/%d stream %d %s status %d --> %d", + usb_gadget_ep_name(__get_buf(USB_EP_MAX_NAME_LEN), __entry->edw3), + __entry->req, __entry->actual, __entry->length, + __entry->num_mapped_sgs, __entry->num_sgs, + u32_get_bits(__entry->rdw1, USB_REQ_STREAM_ID), + __print_flags(__entry->rdw1, ":", USB_REQ_FLAGS), + __entry->status, __entry->ret) ); DEFINE_EVENT(udc_log_req, usb_ep_alloc_request, From patchwork Mon Sep 18 11:25:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linyu Yuan X-Patchwork-Id: 13389505 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (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 D050B38F8F for ; Mon, 18 Sep 2023 11:28:07 +0000 (UTC) Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 72EBA171C for ; Mon, 18 Sep 2023 04:26:21 -0700 (PDT) Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 38IAUX61019139; Mon, 18 Sep 2023 11:25:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=qcppdkim1; bh=vG3MOycD+ZTUyjbBirEcUduBOFBsZic3dakMOBshEXw=; b=KAEbh/8KsZcJenAqw0nAwRsYKvridjpBsRsdZWHu9D5CFN8GzEhSc+lMFlgB3gcmQkTy zIsRQScQSB/iKu5bL1oZPNRKpUJTzqcEOx4BLWJl2YmvDyzow9sBlQlLy4myV2rBc27d OgjW0eAg4WQv5U9NEFqAEEaq9RYTamxIQXXiFWxqwOjYqHJpQ0IQURhlzL7VS/ZlpRq4 KWzkL07Ifg9dRiSAMnNT6sOACZl3kjJJyGkabNkzjlIkAOpfrN25Z8hSMQxU01CiDoh8 bToMuQr+/gvF81F7QtR/Lb/nowvW4bxqbCBf9GXezM4BUhEMj753Se+FESf8yurNWyGd JA== Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3t6mv1r31w-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 18 Sep 2023 11:25:55 +0000 Received: from nalasex01c.na.qualcomm.com (nalasex01c.na.qualcomm.com [10.47.97.35]) by NALASPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 38IBPsst031896 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 18 Sep 2023 11:25:54 GMT Received: from linyyuan-gv.qualcomm.com (10.80.80.8) by nalasex01c.na.qualcomm.com (10.47.97.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.30; Mon, 18 Sep 2023 04:25:52 -0700 From: Linyu Yuan To: Thinh Nguyen , Alan Stern , Greg Kroah-Hartman CC: , Linyu Yuan Subject: [PATCH v7 4/4] usb: dwc3: trace: reduce buffer usage of trace event Date: Mon, 18 Sep 2023 19:25:34 +0800 Message-ID: <20230918112534.2108-5-quic_linyyuan@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230918112534.2108-1-quic_linyyuan@quicinc.com> References: <20230918112534.2108-1-quic_linyyuan@quicinc.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01c.na.qualcomm.com (10.47.97.35) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: k0Qgd-L5rIPLhPup6ObmYWw2uf4q167A X-Proofpoint-ORIG-GUID: k0Qgd-L5rIPLhPup6ObmYWw2uf4q167A X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.601,FMLib:17.11.176.26 definitions=2023-09-18_02,2023-09-18_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 malwarescore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 mlxlogscore=559 suspectscore=0 mlxscore=0 adultscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2308100000 definitions=main-2309180100 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Save u32 members into trace event ring buffer and parse it for bit fields. take below trace event class for explanation, save two u32 members and parse it to generate ep name and other information. old: DECLARE_EVENT_CLASS(dwc3_log_request, TP_PROTO(struct dwc3_request *req), TP_ARGS(req), TP_STRUCT__entry( __string(name, req->dep->name) __field(struct dwc3_request *, req) __field(unsigned int, actual) __field(unsigned int, length) __field(int, status) __field(int, zero) __field(int, short_not_ok) __field(int, no_interrupt) ), TP_fast_assign( __assign_str(name, req->dep->name); __entry->req = req; __entry->actual = req->request.actual; __entry->length = req->request.length; __entry->status = req->request.status; __entry->zero = req->request.zero; __entry->short_not_ok = req->request.short_not_ok; __entry->no_interrupt = req->request.no_interrupt; ), TP_printk("%s: req %p length %u/%u %s%s%s ==> %d", __get_str(name), __entry->req, __entry->actual, __entry->length, __entry->zero ? "Z" : "z", __entry->short_not_ok ? "S" : "s", __entry->no_interrupt ? "i" : "I", __entry->status ) ); new: DECLARE_EVENT_CLASS(dwc3_log_request, TP_PROTO(struct dwc3_request *req), TP_ARGS(req), TP_STRUCT__entry( __field(u32, edw3) __field(struct dwc3_request *, req) __field(unsigned int, actual) __field(unsigned int, length) __field(int, status) __field(u32, rdw1) ), TP_fast_assign( __entry->edw3 = req->dep->endpoint.dw3; __entry->req = req; __entry->actual = req->request.actual; __entry->length = req->request.length; __entry->status = req->request.status; __entry->rdw1 = req->request.dw1; ), TP_printk("%s: req %p length %u/%u %s ==> %d", usb_gadget_ep_name(__get_buf(USB_EP_MAX_NAME_LEN), __entry->edw3), __entry->req, __entry->actual, __entry->length, __print_flags(__entry->rdw1, ":", USB_REQ_FLAGS), __entry->status ) ); consider 32 bit ARCH, for old definition, one trace entry size is: 4 (ring buffer event header ) + 8 (trace event header ) + 32 (trace class header) + 9 (ep string name) = 53 bytes. for new definition, one trace entry size is: 4 (ring buffer event header ) + 8 (trace event header ) + 24 (trace class header) = 36 bytes. consider there is 1MB trace buffer space, for old definition, it can save 19784 entries, for new definition, it can save 29127 entries. Use new common trace event macro in gadget.h for output stage. Signed-off-by: Linyu Yuan --- drivers/usb/dwc3/trace.h | 63 ++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/drivers/usb/dwc3/trace.h b/drivers/usb/dwc3/trace.h index d2997d17cfbe..1dbd56e98463 100644 --- a/drivers/usb/dwc3/trace.h +++ b/drivers/usb/dwc3/trace.h @@ -102,30 +102,25 @@ DECLARE_EVENT_CLASS(dwc3_log_request, TP_PROTO(struct dwc3_request *req), TP_ARGS(req), TP_STRUCT__entry( - __string(name, req->dep->name) + __field(u32, edw3) __field(struct dwc3_request *, req) __field(unsigned int, actual) __field(unsigned int, length) __field(int, status) - __field(int, zero) - __field(int, short_not_ok) - __field(int, no_interrupt) + __field(u32, rdw1) ), TP_fast_assign( - __assign_str(name, req->dep->name); + __entry->edw3 = req->dep->endpoint.dw3; __entry->req = req; __entry->actual = req->request.actual; __entry->length = req->request.length; __entry->status = req->request.status; - __entry->zero = req->request.zero; - __entry->short_not_ok = req->request.short_not_ok; - __entry->no_interrupt = req->request.no_interrupt; + __entry->rdw1 = req->request.dw1; ), - TP_printk("%s: req %p length %u/%u %s%s%s ==> %d", - __get_str(name), __entry->req, __entry->actual, __entry->length, - __entry->zero ? "Z" : "z", - __entry->short_not_ok ? "S" : "s", - __entry->no_interrupt ? "i" : "I", + TP_printk("%s: req %p length %u/%u %s ==> %d", + usb_gadget_ep_name(__get_buf(USB_EP_MAX_NAME_LEN), __entry->edw3), + __entry->req, __entry->actual, __entry->length, + __print_flags(__entry->rdw1, ":", USB_REQ_FLAGS), __entry->status ) ); @@ -185,7 +180,7 @@ DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd, struct dwc3_gadget_ep_cmd_params *params, int cmd_status), TP_ARGS(dep, cmd, params, cmd_status), TP_STRUCT__entry( - __string(name, dep->name) + __field(u32, edw3) __field(unsigned int, cmd) __field(u32, param0) __field(u32, param1) @@ -193,7 +188,7 @@ DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd, __field(int, cmd_status) ), TP_fast_assign( - __assign_str(name, dep->name); + __entry->edw3 = dep->endpoint.dw3; __entry->cmd = cmd; __entry->param0 = params->param0; __entry->param1 = params->param1; @@ -201,7 +196,8 @@ DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd, __entry->cmd_status = cmd_status; ), TP_printk("%s: cmd '%s' [%x] params %08x %08x %08x --> status: %s", - __get_str(name), dwc3_gadget_ep_cmd_string(__entry->cmd), + usb_gadget_ep_name(__get_buf(USB_EP_MAX_NAME_LEN), __entry->edw3), + dwc3_gadget_ep_cmd_string(__entry->cmd), __entry->cmd, __entry->param0, __entry->param1, __entry->param2, dwc3_ep_cmd_status_string(__entry->cmd_status) @@ -218,7 +214,7 @@ DECLARE_EVENT_CLASS(dwc3_log_trb, TP_PROTO(struct dwc3_ep *dep, struct dwc3_trb *trb), TP_ARGS(dep, trb), TP_STRUCT__entry( - __string(name, dep->name) + __field(u32, edw3) __field(struct dwc3_trb *, trb) __field(u32, bpl) __field(u32, bph) @@ -229,7 +225,7 @@ DECLARE_EVENT_CLASS(dwc3_log_trb, __field(u32, dequeue) ), TP_fast_assign( - __assign_str(name, dep->name); + __entry->edw3 = dep->endpoint.dw3; __entry->trb = trb; __entry->bpl = trb->bpl; __entry->bph = trb->bph; @@ -240,7 +236,8 @@ DECLARE_EVENT_CLASS(dwc3_log_trb, __entry->dequeue = dep->trb_dequeue; ), TP_printk("%s: trb %p (E%d:D%d) buf %08x%08x size %s%d ctrl %08x sofn %08x (%c%c%c%c:%c%c:%s)", - __get_str(name), __entry->trb, __entry->enqueue, + usb_gadget_ep_name(__get_buf(USB_EP_MAX_NAME_LEN), __entry->edw3), + __entry->trb, __entry->enqueue, __entry->dequeue, __entry->bph, __entry->bpl, ({char *s; int pcm = ((__entry->size >> 24) & 3) + 1; @@ -272,7 +269,7 @@ DECLARE_EVENT_CLASS(dwc3_log_trb, __entry->ctrl & DWC3_TRB_CTRL_CSP ? 'S' : 's', __entry->ctrl & DWC3_TRB_CTRL_ISP_IMI ? 'S' : 's', __entry->ctrl & DWC3_TRB_CTRL_IOC ? 'C' : 'c', - dwc3_trb_type_string(DWC3_TRBCTL_TYPE(__entry->ctrl)) + dwc3_trb_type_string(DWC3_TRBCTL_TYPE(__entry->ctrl)) ) ); @@ -290,32 +287,30 @@ DECLARE_EVENT_CLASS(dwc3_log_ep, TP_PROTO(struct dwc3_ep *dep), TP_ARGS(dep), TP_STRUCT__entry( - __string(name, dep->name) - __field(unsigned int, maxpacket) - __field(unsigned int, maxpacket_limit) - __field(unsigned int, max_streams) - __field(unsigned int, maxburst) + __field(u32, edw3) + __field(u32, edw1) + __field(u32, edw2) __field(unsigned int, flags) __field(unsigned int, direction) __field(u8, trb_enqueue) __field(u8, trb_dequeue) ), TP_fast_assign( - __assign_str(name, dep->name); - __entry->maxpacket = dep->endpoint.maxpacket; - __entry->maxpacket_limit = dep->endpoint.maxpacket_limit; - __entry->max_streams = dep->endpoint.max_streams; - __entry->maxburst = dep->endpoint.maxburst; + __entry->edw3 = dep->endpoint.dw3; + __entry->edw1 = dep->endpoint.dw1; + __entry->edw2 = dep->endpoint.dw2; __entry->flags = dep->flags; __entry->direction = dep->direction; __entry->trb_enqueue = dep->trb_enqueue; __entry->trb_dequeue = dep->trb_dequeue; ), TP_printk("%s: mps %d/%d streams %d burst %d ring %d/%d flags %c:%c%c%c%c:%c", - __get_str(name), __entry->maxpacket, - __entry->maxpacket_limit, __entry->max_streams, - __entry->maxburst, __entry->trb_enqueue, - __entry->trb_dequeue, + usb_gadget_ep_name(__get_buf(USB_EP_MAX_NAME_LEN), __entry->edw3), + u32_get_bits(__entry->edw1, USB_EP_MAXPACKET), + u32_get_bits(__entry->edw1, USB_EP_MAXPACKET_LIMIT), + u32_get_bits(__entry->edw2, USB_EP_MAX_STREAMS), + u32_get_bits(__entry->edw2, USB_EP_MAXBURST), + __entry->trb_enqueue, __entry->trb_dequeue, __entry->flags & DWC3_EP_ENABLED ? 'E' : 'e', __entry->flags & DWC3_EP_STALL ? 'S' : 's', __entry->flags & DWC3_EP_WEDGE ? 'W' : 'w',