From patchwork Thu Dec 14 09:23:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ohad Sharabi X-Patchwork-Id: 10111717 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 95216602B3 for ; Thu, 14 Dec 2017 09:24:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 89BF629B6A for ; Thu, 14 Dec 2017 09:24:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7C7C029BBD; Thu, 14 Dec 2017 09:24:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 10FB929B6A for ; Thu, 14 Dec 2017 09:24:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750858AbdLNJXh (ORCPT ); Thu, 14 Dec 2017 04:23:37 -0500 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:16120 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750808AbdLNJXg (ORCPT ); Thu, 14 Dec 2017 04:23:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=sandisk.com; i=@sandisk.com; q=dns/txt; s=dkim.sandisk.com; t=1513243415; x=1544779415; h=from:to:cc:subject:date:message-id:mime-version; bh=E+4J8vm/e3AkxWnznLaGaFtDW5RWCX8yEf8EAB0KPkw=; b=QdkJ/RtUS9vqRadVXD/NM4yStH5oBvMo7xw4zHNguub4Jm6epcLX85Uz ZaScMMfj00WvRwlkvbBKR+mcfNDquRNnjRMmYpO8ptUwRa4BIstzvGXC2 DlIEB5/HFfDiqGrYlYGqq7aXeGKI+K2OudxD/hExD/QsuvflYvZR+pPJn QkkpIhpggWvkLxjekVJHdGt/mRNXUd7mUuGWIQJ1TLNVMJ2XTf7tsPzmu jZHTeLfMNgqeYY707uyRK/db4N4JqJp88oPzupfI5j1o0GKLn2G9DXjfy Akwc92u5Yvy4lze2W1Y6PxBg9y5LQtYisozNme7jhkxYaOzjm3zYkKuqe g==; X-IronPort-AV: E=Sophos;i="5.45,400,1508774400"; d="scan'208";a="167737978" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 14 Dec 2017 17:23:35 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP; 14 Dec 2017 01:19:59 -0800 Received: from unknown (HELO MILHUBIP03.sdcorp.global.sandisk.com) ([10.177.9.96]) by uls-op-cesaip01.wdc.com with ESMTP; 14 Dec 2017 01:23:36 -0800 Received: from milsmgip11.sandisk.com (10.177.9.6) by MILHUBIP03.sdcorp.global.sandisk.com (10.177.9.96) with Microsoft SMTP Server id 14.3.319.2; Thu, 14 Dec 2017 01:23:35 -0800 X-AuditID: 0ab10959-097ff70000002c97-b6-5a3243124f5b Received: from ile419070.sdcorp.global.sandisk.com ( [10.177.9.6]) by (Symantec Messaging Gateway) with SMTP id F6.8C.11415.213423A5; Thu, 14 Dec 2017 01:23:34 -0800 (PST) From: Ohad Sharabi To: , CC: , , , Ohad Sharabi Subject: [PATCH] scsi: ufs: add trace event for ufs upiu Date: Thu, 14 Dec 2017 11:23:24 +0200 Message-ID: <1513243404-9503-1-git-send-email-ohad.sharabi@sandisk.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprIJMWRmVeSWpSXmKPExsXCtZGTTVfM2SjK4MUBc4tr64ItVk3Ms7i8 aw6bRff1HWwWy4//Y7LoeqvlwObx4NBmFo+PT2+xeExbc57J4/MmOY/2A91MAaxRXDYpqTmZ ZalF+nYJXBkHjrQzFhxTqji3vIWpgfGwTBcjJ4eEgInE31eHGLsYuTiEBNYxSmyd+p8dJMEm oCvxZ+kKJhBbRMBSYu2uXiaQImaBRkaJK+cfMIMkhAUsJD5v2csIYrMIqErM/N/EBmLzCrhL TN/ZzQKxQU7i5LHJrBMYORcwMqxiFMvNzCnOTc8sMDTUK07MS8ksztZLzs/dxAjxdOQOxqcT zQ8xMnFwSjUweksxBnuq/KpnaCzjN1vjz/F9sbLXk/kv9J+sjHbIFXwuZ1i1bvd5kykR9aad fFu+HYvTF2LOdSye+HGHQgHjnQcLGK1fCmz4w9U0ZX9J8Kbf1+uWsVRNbbogbh7TciYia7b8 vnsu7btZWNc8lTmyctO+iCjv6/EH3Ccmu1Qvs/s8xcvV+qO1EktxRqKhFnNRcSIAPZiLbaQB AAA= MIME-Version: 1.0 Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add UFS Protocol Information Units(upiu) trace events for ufs driver, used to trace various ufs transaction types- command, task-management and device management. The trace-point format is generic and can be easily adapted to trace other upius if needed. Currently tracing ufs transaction of type 'device management', which this patch introduce, cannot be obtained from any other trace. Device management transactions are used for communication with the device such as reading and writing descriptor or attributes etc. Signed-off-by: Ohad Sharabi --- drivers/scsi/ufs/ufshcd.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++ include/trace/events/ufs.h | 28 +++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index a355d98..6d79c99 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -274,6 +274,47 @@ static inline void ufshcd_remove_non_printable(char *val) *val = ' '; } +static void ufshcd_add_upiu_trace(struct ufs_hba *hba, unsigned int tag, + const char *str) +{ + struct utp_task_req_desc *descp; + struct utp_upiu_task_req *task_req; + struct utp_upiu_req *rq; + u8 tx_code, *hdr, *tsf; + int off; + + if (!trace_ufshcd_upiu_enabled()) + return; + + off = (int)tag - hba->nutrs; + if (off < 0) { + rq = hba->lrb[tag].ucd_req_ptr; + hdr = (u8 *)&rq->header; + } else { + descp = &hba->utmrdl_base_addr[off]; + task_req = (struct utp_upiu_task_req *)descp->task_req_upiu; + hdr = (u8 *)&task_req->header; + } + + tx_code = hdr[0] & 0x3f; + switch (hdr[0] & 0x3f) { + case UPIU_TRANSACTION_COMMAND: + tsf = (u8 *)&rq->sc.cdb; + break; + case UPIU_TRANSACTION_TASK_REQ: + tsf = (u8 *)&task_req->input_param1; + break; + case UPIU_TRANSACTION_QUERY_REQ: + tsf = (u8 *)&rq->qr; + break; + default: + return; + } + + /* trace UPIU header and Transaction Specific Fields (TSF) */ + trace_ufshcd_upiu(dev_name(hba->dev), str, hdr, tsf); +} + static void ufshcd_add_command_trace(struct ufs_hba *hba, unsigned int tag, const char *str) { @@ -283,6 +324,9 @@ static void ufshcd_add_command_trace(struct ufs_hba *hba, struct ufshcd_lrb *lrbp; int transfer_len = -1; + /* trace UPIU also */ + ufshcd_add_upiu_trace(hba, tag, str); + if (!trace_ufshcd_command_enabled()) return; @@ -5462,11 +5506,14 @@ static int ufshcd_issue_tm_cmd(struct ufs_hba *hba, int lun_id, int task_id, spin_unlock_irqrestore(host->host_lock, flags); + ufshcd_add_upiu_trace(hba, task_tag, "tm_send"); + /* wait until the task management command is completed */ err = wait_event_timeout(hba->tm_wq, test_bit(free_slot, &hba->tm_condition), msecs_to_jiffies(TM_CMD_TIMEOUT)); if (!err) { + ufshcd_add_upiu_trace(hba, task_tag, "tm_complete_err"); dev_err(hba->dev, "%s: task management cmd 0x%.2x timed-out\n", __func__, tm_function); if (ufshcd_clear_tm_cmd(hba, free_slot)) @@ -5475,6 +5522,7 @@ static int ufshcd_issue_tm_cmd(struct ufs_hba *hba, int lun_id, int task_id, err = -ETIMEDOUT; } else { err = ufshcd_task_req_compl(hba, free_slot, tm_response); + ufshcd_add_upiu_trace(hba, task_tag, "tm_complete"); } clear_bit(free_slot, &hba->tm_condition); diff --git a/include/trace/events/ufs.h b/include/trace/events/ufs.h index bf6f826..0b2ff5d 100644 --- a/include/trace/events/ufs.h +++ b/include/trace/events/ufs.h @@ -257,6 +257,34 @@ ) ); +TRACE_EVENT(ufshcd_upiu, + TP_PROTO(const char *dev_name, const char *str, unsigned char *hdr, + unsigned char *tsf), + + TP_ARGS(dev_name, str, hdr, tsf), + + TP_STRUCT__entry( + __string(dev_name, dev_name) + __string(str, str) + __array(unsigned char, hdr, 12) + __array(unsigned char, tsf, 16) + ), + + TP_fast_assign( + __assign_str(dev_name, dev_name); + __assign_str(str, str); + memcpy(__entry->hdr, hdr, sizeof(__entry->hdr)); + memcpy(__entry->tsf, tsf, sizeof(__entry->tsf)); + ), + + TP_printk( + "%s: %s: HDR:%s, CDB:%s", + __get_str(str), __get_str(dev_name), + __print_hex(__entry->hdr, sizeof(__entry->hdr)), + __print_hex(__entry->tsf, sizeof(__entry->tsf)) + ) +); + #endif /* if !defined(_TRACE_UFS_H) || defined(TRACE_HEADER_MULTI_READ) */ /* This part must be outside protection */