Received: by 10.213.65.68 with SMTP id h4csp246568imn; Wed, 28 Mar 2018 02:48:15 -0700 (PDT) X-Google-Smtp-Source: AIpwx484BYl9VSx01I4hw9lN4LDDDflnWdnucYaViHOKnVu5mbVqvhmQDbcMuw/CQ1imcuMArf0q X-Received: by 10.99.113.85 with SMTP id b21mr555399pgn.415.1522230495839; Wed, 28 Mar 2018 02:48:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522230495; cv=none; d=google.com; s=arc-20160816; b=mL8SfJu3VTiHMQIe24pNJ3mlXaMAaqNI6xmQ2N+HTeu160m8hjXy5+G5ey4e52RZxt uwWs31GoewXkqDyBP3xtSnsfq5IGoyIHEDWRKnGHW3zI80bxQ+653MFMTBnBKUVbhZoS HJZD1IMhuB+oZOb2HsciEpZQD59dUWatUSutw2WNyghHtex32ICec635OHnj1ce+QRhc yYCXID7fnPWPexfYSC6qDUzq+KfgYhee6MwfoX+VDPFOGGxWc98J5lMVK3dn2nX3a1J5 6S5NvobYWnWw9nM9f6JbKMmCNDGpXPt5XqAtGmDk7kiIoRJBSNWP60N6POeDbMJUJRpu WDEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=kkc6S80IQgKjv+VOT32QXVCcJXoPxpogLjwmuCjCK3Q=; b=BQOFL6cB6G8rVWB02B3clPR08Elsyorhj0nxYAc/bcznmrAZZABwyZ5NqCfDhLXYqa ctc8kNq26w14s0WwcM4lqd6A372GHTUrIXl5P3jJttl8dRmvi3GrWlpQ3t8udKvV6118 uw8pqjWgMrMAWA8gRIwUqfYNNeA9wPfL0g0dnXGVfwDyz02nh2g/Ou9K/1EQxtbfOTqi GakdUvQBeQsi4HVSbK/N9N99P4huOf6ZaV3Y3bqBac+txd8B1+gYpWu9RznuXKNwox6B BF2NHRqsFb4l5EUc03Eeerx9czWmyMS2UeAdO8n3MMmgLTCvd9QqIcKgX/Rq/mgBE3jQ AiLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@sandisk.com header.s=dkim.sandisk.com header.b=cdfMUToc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o5-v6si3311984plh.432.2018.03.28.02.47.59; Wed, 28 Mar 2018 02:48:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@sandisk.com header.s=dkim.sandisk.com header.b=cdfMUToc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752065AbeC1Jme (ORCPT + 99 others); Wed, 28 Mar 2018 05:42:34 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:65535 "EHLO esa2.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751182AbeC1Jmc (ORCPT ); Wed, 28 Mar 2018 05:42:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=sandisk.com; i=@sandisk.com; q=dns/txt; s=dkim.sandisk.com; t=1522230429; x=1553766429; h=from:to:cc:subject:date:message-id; bh=vi0yMrSbwSW8YWI4WS7ftkMXaryVPZfQl3Uf91CzjpY=; b=cdfMUTocAq2igbaO1f386knfY2z5jCEPNWeD5x59yYRcti9dyni4QuYk PzTi5I5t+NJLAaJr20N0taPdUmTYbOLIUHQkckg306EqYSlGTMDSPW26Q kdCt6kRmlFj6qzCGwCXGVczdT3u9+Bzzj4FFxA4ANZC5aleQsw/8ePxhs DWfW3ESYKZ0+Ca1fWWJr6lILk65cQsEJKzFvy82jnU+f5+rAndbTQYMyc z+iievbLwyR3mbIAxsoyZhT86+HM2RcCfl3WyePKGCU0t5hgUvn9qXo4p +Wdo4oBO9p98BvMRq826MYU08PaVyO3/DOvDPJiSEu0afaLMIzEtFPVfP A==; X-IronPort-AV: E=Sophos;i="5.48,370,1517846400"; d="scan'208";a="171247099" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 28 Mar 2018 17:47:08 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP; 28 Mar 2018 02:35:41 -0700 Received: from ile419070.sdcorp.global.sandisk.com ([10.0.230.165]) by uls-op-cesaip01.wdc.com with ESMTP; 28 Mar 2018 02:42:30 -0700 From: Ohad Sharabi To: stanislav.nijnikov@wdc.com, jejb@linux.vnet.ibm.com, martin.petersen@oracle.com, gregkh@linuxfoundation.org Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, alex.lemberg@wdc.com, Ohad Sharabi Subject: [PATCH v3] scsi: ufs: add trace event for ufs upiu Date: Wed, 28 Mar 2018 12:42:18 +0300 Message-Id: <1522230138-27674-1-git-send-email-ohad.sharabi@sandisk.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Reviewed-by: Stanislav Nijnikov Reviewed-by: Bart Van Assche --- v2->v3: - modify args 3,4 of trace_ufshcd_upiu to be void * v1->v2: - split to transaction specific functions (fix warnings and simplifies code) - adding traces when sending query command drivers/scsi/ufs/ufshcd.c | 40 ++++++++++++++++++++++++++++++++++++++++ include/trace/events/ufs.h | 27 +++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index c7da2c1..23ffaed 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -274,6 +274,35 @@ static inline void ufshcd_remove_non_printable(char *val) *val = ' '; } +static void ufshcd_add_cmd_upiu_trace(struct ufs_hba *hba, unsigned int tag, + const char *str) +{ + struct utp_upiu_req *rq = hba->lrb[tag].ucd_req_ptr; + + trace_ufshcd_upiu(dev_name(hba->dev), str, &rq->header, &rq->sc.cdb); +} + +static void ufshcd_add_query_upiu_trace(struct ufs_hba *hba, unsigned int tag, + const char *str) +{ + struct utp_upiu_req *rq = hba->lrb[tag].ucd_req_ptr; + + trace_ufshcd_upiu(dev_name(hba->dev), str, &rq->header, &rq->qr); +} + +static void ufshcd_add_tm_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; + int off = (int)tag - hba->nutrs; + + descp = &hba->utmrdl_base_addr[off]; + task_req = (struct utp_upiu_task_req *)descp->task_req_upiu; + trace_ufshcd_upiu(dev_name(hba->dev), str, &task_req->header, + &task_req->input_param1); +} + static void ufshcd_add_command_trace(struct ufs_hba *hba, unsigned int tag, const char *str) { @@ -283,6 +312,9 @@ static void ufshcd_add_command_trace(struct ufs_hba *hba, struct ufshcd_lrb *lrbp; int transfer_len = -1; + /* trace UPIU also */ + ufshcd_add_cmd_upiu_trace(hba, tag, str); + if (!trace_ufshcd_command_enabled()) return; @@ -2584,6 +2616,7 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba, hba->dev_cmd.complete = &wait; + ufshcd_add_query_upiu_trace(hba, tag, "query_send"); /* Make sure descriptors are ready before ringing the doorbell */ wmb(); spin_lock_irqsave(hba->host->host_lock, flags); @@ -2593,6 +2626,9 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba, err = ufshcd_wait_for_dev_cmd(hba, lrbp, timeout); + ufshcd_add_query_upiu_trace(hba, tag, + err ? "query_complete_err" : "query_complete"); + out_put_tag: ufshcd_put_dev_cmd_tag(hba, tag); wake_up(&hba->dev_cmd.tag_wq); @@ -5464,11 +5500,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_tm_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_tm_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)) @@ -5477,6 +5516,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_tm_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..f8260e5 100644 --- a/include/trace/events/ufs.h +++ b/include/trace/events/ufs.h @@ -257,6 +257,33 @@ ) ); +TRACE_EVENT(ufshcd_upiu, + TP_PROTO(const char *dev_name, const char *str, void *hdr, void *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 */ -- 1.9.1