Messages in this thread Patch in this message | | | Date | Wed, 6 Jul 2022 10:26:09 -0600 | From | Keith Busch <> | Subject | Re: [PATCH] nvme: Fix nvme_setup_command metadata trace event for cdw10 |
| |
On Wed, Jul 06, 2022 at 06:18:25PM +0200, Christoph Hellwig wrote: > On Wed, Jul 06, 2022 at 10:13:22AM -0600, Keith Busch wrote: > > Did you test what the trace looks like afte this? We're losing valuable trace > > data here. The field is supposed to get CDW's 10 - 15, so that's 24 bytes. I > > don't know why it cares that the address of the field being read is only 4 > > bytes; we want everything that comes after it too. > > Because accesses should not spawn boundaries of members in structs unless > copying the entire struct. If we want to trace the various fields we > need to individually assign them. > > Anyway, I'm dropping this patch from nvme-5.19 for now to let the > discussion conclude.
How about this instead?
--- diff --git a/drivers/nvme/host/trace.h b/drivers/nvme/host/trace.h index b5f85259461a..3c5e7fa03707 100644 --- a/drivers/nvme/host/trace.h +++ b/drivers/nvme/host/trace.h @@ -69,7 +69,7 @@ TRACE_EVENT(nvme_setup_cmd, __entry->metadata = !!blk_integrity_rq(req); __entry->fctype = cmd->fabrics.fctype; __assign_disk_name(__entry->disk, req->q->disk); - memcpy(__entry->cdw10, &cmd->common.cdw10, + memcpy(__entry->cdw10, &cmd->common.bytes, sizeof(__entry->cdw10)); ), TP_printk("nvme%d: %sqid=%d, cmdid=%u, nsid=%u, flags=0x%x, meta=0x%x, cmd=(%s %s)", diff --git a/include/linux/nvme.h b/include/linux/nvme.h index e3934003f239..1be226871763 100644 --- a/include/linux/nvme.h +++ b/include/linux/nvme.h @@ -906,12 +906,17 @@ struct nvme_common_command { __le32 cdw2[2]; __le64 metadata; union nvme_data_ptr dptr; - __le32 cdw10; - __le32 cdw11; - __le32 cdw12; - __le32 cdw13; - __le32 cdw14; - __le32 cdw15; + union { + struct { + __le32 cdw10; + __le32 cdw11; + __le32 cdw12; + __le32 cdw13; + __le32 cdw14; + __le32 cdw15; + }; + __u8 bytes[24]; + }; }; struct nvme_rw_command { --
| |