From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751309AbeAVPXE (ORCPT ); Mon, 22 Jan 2018 10:23:04 -0500 Received: from verein.lst.de ([213.95.11.211]:53030 "EHLO newverein.lst.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751086AbeAVPXD (ORCPT ); Mon, 22 Jan 2018 10:23:03 -0500 Date: Mon, 22 Jan 2018 16:23:01 +0100 From: Christoph Hellwig To: Johannes Thumshirn Cc: Christoph Hellwig , Sagi Grimberg , Keith Busch , Linux Kernel Mailinglist , Hannes Reinecke , Linux NVMe Mailinglist , "Martin K . Petersen" Subject: Re: [PATCH v4 1/2] nvme: add tracepoint for nvme_setup_cmd Message-ID: <20180122152301.GA5818@lst.de> References: <20180119141819.11938-1-jthumshirn@suse.de> <20180119141819.11938-2-jthumshirn@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180119141819.11938-2-jthumshirn@suse.de> User-Agent: Mutt/1.5.17 (2007-11-01) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jan 19, 2018 at 03:18:18PM +0100, Johannes Thumshirn wrote: > Signed-off-by: Johannes Thumshirn > Reviewed-by: Hannes Reinecke > Reviewed-by: Martin K. Petersen > Reviewed-by: Keith Busch This could really use a changelog explaining what you're tracing, and most importantly why. > +struct rw_cmd { > + __le64 slba; > + __le16 length; > + __le16 control; > + __le32 dsmgmt; > + __le32 reftag; > + __le16 apptag; > + __le16 appmask; > +}; > + > +struct dsm_cmd { > + __le32 nr; > + __le32 attributes; > + __u32 rsvd12[4]; > +}; Why do we need all these different defintions? Just use cdw2/3/10/11/12/13 for the fields and decode those __le32 on a per-command basis where needed. > +const char *nvme_trace_parse_cmd(struct trace_seq *p, bool admin, > + u8 opcode, __le32 *cdw10) > +{ > + if (admin) { > + switch (opcode) { > + case nvme_admin_create_sq: > + return nvme_trace_create_sq(p, cdw10); > + case nvme_admin_create_cq: > + return nvme_trace_create_cq(p, cdw10); > + case nvme_admin_identify: > + return nvme_trace_admin_identify(p, cdw10); > + default: > + return nvme_trace_common(p, cdw10); > + } > + } else { > + switch (opcode) { > + case nvme_cmd_read: > + case nvme_cmd_write: > + case nvme_cmd_write_zeroes: > + return nvme_trace_read_write(p, cdw10); > + case nvme_cmd_dsm: > + return nvme_trace_dsm(p, cdw10); > + default: > + return nvme_trace_common(p, cdw10); > + } > + } > +} Wouldn't it be easier to have separate tracepoints for admin vs I/O commands? Especially as people might often want to trace only one or the other.