All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] hw/block/nvme: add support for telemetry log pages
@ 2021-02-08 14:10 Klaus Jensen
  2021-02-08 14:10 ` [PATCH 1/2] hw/block/nvme: use locally assigned QEMU IEEE OUI Klaus Jensen
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Klaus Jensen @ 2021-02-08 14:10 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Fam Zheng, qemu-block, Klaus Jensen,
	Gollu Appalanaidu, Max Reitz, Keith Busch, Stefan Hajnoczi,
	Klaus Jensen

From: Klaus Jensen <k.jensen@samsung.com>

This adds support for the telemetry log pages and fixes up the
controller IEEE OUI.

Gollu Appalanaidu (2):
  hw/block/nvme: use locally assigned QEMU IEEE OUI
  hw/block/nvme: add nvme telemetry log support

 include/block/nvme.h  | 23 ++++++++++++++++++++---
 hw/block/nvme.c       | 37 ++++++++++++++++++++++++++++++++++---
 hw/block/trace-events |  1 +
 3 files changed, 55 insertions(+), 6 deletions(-)

-- 
2.30.0



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] hw/block/nvme: use locally assigned QEMU IEEE OUI
  2021-02-08 14:10 [PATCH 0/2] hw/block/nvme: add support for telemetry log pages Klaus Jensen
@ 2021-02-08 14:10 ` Klaus Jensen
  2021-02-08 18:56   ` Philippe Mathieu-Daudé
  2021-02-08 14:10 ` [PATCH 2/2] hw/block/nvme: add nvme telemetry log support Klaus Jensen
  2021-02-08 15:40 ` [PATCH 0/2] hw/block/nvme: add support for telemetry log pages Keith Busch
  2 siblings, 1 reply; 7+ messages in thread
From: Klaus Jensen @ 2021-02-08 14:10 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Fam Zheng, qemu-block, Klaus Jensen,
	Gollu Appalanaidu, Max Reitz, Keith Busch, Stefan Hajnoczi,
	Klaus Jensen

From: Gollu Appalanaidu <anaidu.gollu@samsung.com>

Commit 6eb7a071292a ("hw/block/nvme: change controller pci id") changed
the controller to use a Red Hat assigned PCI Device and Vendor ID, but
did not change the IEEE OUI away from the Intel IEEE OUI.

Fix that and use the locally assigned QEMU IEEE OUI instead.

Signed-off-by: Gollu Appalanaidu <anaidu.gollu@samsung.com>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/block/nvme.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index c2f0c88fbf39..547a3073ef1b 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -4686,8 +4686,8 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pci_dev)
 
     id->rab = 6;
     id->ieee[0] = 0x00;
-    id->ieee[1] = 0x02;
-    id->ieee[2] = 0xb3;
+    id->ieee[1] = 0x54;
+    id->ieee[2] = 0x52;
     id->mdts = n->params.mdts;
     id->ver = cpu_to_le32(NVME_SPEC_VER);
     id->oacs = cpu_to_le16(0);
-- 
2.30.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] hw/block/nvme: add nvme telemetry log support
  2021-02-08 14:10 [PATCH 0/2] hw/block/nvme: add support for telemetry log pages Klaus Jensen
  2021-02-08 14:10 ` [PATCH 1/2] hw/block/nvme: use locally assigned QEMU IEEE OUI Klaus Jensen
@ 2021-02-08 14:10 ` Klaus Jensen
  2021-02-08 15:40 ` [PATCH 0/2] hw/block/nvme: add support for telemetry log pages Keith Busch
  2 siblings, 0 replies; 7+ messages in thread
From: Klaus Jensen @ 2021-02-08 14:10 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Fam Zheng, qemu-block, Klaus Jensen,
	Gollu Appalanaidu, Max Reitz, Keith Busch, Stefan Hajnoczi,
	Klaus Jensen

From: Gollu Appalanaidu <anaidu.gollu@samsung.com>

This adds basic support for Telemetry Host Initiated and Controller
Initiated log pages. The controller does not record any telemetry but
provides the log pages.

Signed-off-by: Gollu Appalanaidu <anaidu.gollu@samsung.com>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 include/block/nvme.h  | 23 ++++++++++++++++++++---
 hw/block/nvme.c       | 33 ++++++++++++++++++++++++++++++++-
 hw/block/trace-events |  1 +
 3 files changed, 53 insertions(+), 4 deletions(-)

diff --git a/include/block/nvme.h b/include/block/nvme.h
index f82b5ffc2c1d..95ffe4412679 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -922,6 +922,19 @@ typedef struct NvmeEffectsLog {
     uint8_t     resv[2048];
 } NvmeEffectsLog;
 
+typedef struct NvmeTelemetry {
+    uint8_t     lid;
+    uint8_t     rsvd1[4];
+    uint8_t     ieee[3];
+    uint16_t    tda1lb;
+    uint16_t    tda2lb;
+    uint16_t    tda3lb;
+    uint8_t     rsvd14[368];
+    uint8_t     tda;
+    uint8_t     tdgn;
+    uint8_t     ri[128];
+} NvmeTelemetry;
+
 enum {
     NVME_CMD_EFF_CSUPP      = 1 << 0,
     NVME_CMD_EFF_LBCC       = 1 << 1,
@@ -937,6 +950,8 @@ enum NvmeLogIdentifier {
     NVME_LOG_SMART_INFO     = 0x02,
     NVME_LOG_FW_SLOT_INFO   = 0x03,
     NVME_LOG_CMD_EFFECTS    = 0x05,
+    NVME_LOG_TEL_HOST_INIT  = 0x07,
+    NVME_LOG_TEL_CTRL_INIT  = 0x08,
 };
 
 typedef struct QEMU_PACKED NvmePSD {
@@ -1067,9 +1082,10 @@ enum NvmeIdCtrlFrmw {
 };
 
 enum NvmeIdCtrlLpa {
-    NVME_LPA_NS_SMART = 1 << 0,
-    NVME_LPA_CSE      = 1 << 1,
-    NVME_LPA_EXTENDED = 1 << 2,
+    NVME_LPA_NS_SMART   = 1 << 0,
+    NVME_LPA_CSE        = 1 << 1,
+    NVME_LPA_EXTENDED   = 1 << 2,
+    NVME_LPA_TELEMETRY  = 1 << 3,
 };
 
 enum NvmeIdCtrlCmic {
@@ -1395,5 +1411,6 @@ static inline void _nvme_check_size(void)
     QEMU_BUILD_BUG_ON(sizeof(NvmeSglDescriptor) != 16);
     QEMU_BUILD_BUG_ON(sizeof(NvmeIdNsDescr) != 4);
     QEMU_BUILD_BUG_ON(sizeof(NvmeZoneDescr) != 64);
+    QEMU_BUILD_BUG_ON(sizeof(NvmeTelemetry) != 512);
 }
 #endif
diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index 547a3073ef1b..01b92a6f66c8 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -2908,6 +2908,33 @@ static uint16_t nvme_cmd_effects(NvmeCtrl *n, uint8_t csi, uint32_t buf_len,
                     DMA_DIRECTION_FROM_DEVICE, req);
 }
 
+static uint16_t nvme_telemetry(NvmeCtrl *n, uint8_t lid, uint32_t buf_len,
+                               uint64_t off, NvmeRequest *req)
+{
+    NvmeTelemetry telemetry = {
+        .lid     = lid,
+        .ieee[0] = 0x00,
+        .ieee[1] = 0x54,
+        .ieee[2] = 0x52,
+    };
+
+    uint32_t trans_len;
+
+    if (buf_len & 0x1ff || off & 0x1ff) {
+        trace_pci_nvme_telemetry_log_invalid(buf_len, off);
+        return NVME_INVALID_FIELD | NVME_DNR;
+    }
+
+    if (off >= sizeof(telemetry)) {
+        return NVME_INVALID_FIELD | NVME_DNR;
+    }
+
+    trans_len = MIN(sizeof(telemetry) - off, buf_len);
+
+    return nvme_dma(n, (uint8_t *)&telemetry + off, trans_len,
+                    DMA_DIRECTION_FROM_DEVICE, req);
+}
+
 static uint16_t nvme_get_log(NvmeCtrl *n, NvmeRequest *req)
 {
     NvmeCmd *cmd = &req->cmd;
@@ -2954,6 +2981,9 @@ static uint16_t nvme_get_log(NvmeCtrl *n, NvmeRequest *req)
         return nvme_fw_log_info(n, len, off, req);
     case NVME_LOG_CMD_EFFECTS:
         return nvme_cmd_effects(n, csi, len, off, req);
+    case NVME_LOG_TEL_HOST_INIT:
+    case NVME_LOG_TEL_CTRL_INIT:
+        return nvme_telemetry(n, lid, len, off, req);
     default:
         trace_pci_nvme_err_invalid_log_page(nvme_cid(req), lid);
         return NVME_INVALID_FIELD | NVME_DNR;
@@ -4707,7 +4737,8 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pci_dev)
     id->acl = 3;
     id->aerl = n->params.aerl;
     id->frmw = (NVME_NUM_FW_SLOTS << 1) | NVME_FRMW_SLOT1_RO;
-    id->lpa = NVME_LPA_NS_SMART | NVME_LPA_CSE | NVME_LPA_EXTENDED;
+    id->lpa = NVME_LPA_NS_SMART | NVME_LPA_CSE | NVME_LPA_EXTENDED |
+        NVME_LPA_TELEMETRY;
 
     /* recommended default value (~70 C) */
     id->wctemp = cpu_to_le16(NVME_TEMPERATURE_WARNING);
diff --git a/hw/block/trace-events b/hw/block/trace-events
index b6e972d733a6..500d991a0a14 100644
--- a/hw/block/trace-events
+++ b/hw/block/trace-events
@@ -110,6 +110,7 @@ pci_nvme_set_descriptor_extension(uint64_t slba, uint32_t zone_idx) "set zone de
 pci_nvme_zd_extension_set(uint32_t zone_idx) "set descriptor extension for zone_idx=%"PRIu32""
 pci_nvme_clear_ns_close(uint32_t state, uint64_t slba) "zone state=%"PRIu32", slba=%"PRIu64" transitioned to Closed state"
 pci_nvme_clear_ns_reset(uint32_t state, uint64_t slba) "zone state=%"PRIu32", slba=%"PRIu64" transitioned to Empty state"
+pci_nvme_telemetry_log_invalid(size_t len, uint64_t offset) "len %zu offset %"PRIu64""
 
 # nvme traces for error conditions
 pci_nvme_err_mdts(uint16_t cid, size_t len) "cid %"PRIu16" len %zu"
-- 
2.30.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] hw/block/nvme: add support for telemetry log pages
  2021-02-08 14:10 [PATCH 0/2] hw/block/nvme: add support for telemetry log pages Klaus Jensen
  2021-02-08 14:10 ` [PATCH 1/2] hw/block/nvme: use locally assigned QEMU IEEE OUI Klaus Jensen
  2021-02-08 14:10 ` [PATCH 2/2] hw/block/nvme: add nvme telemetry log support Klaus Jensen
@ 2021-02-08 15:40 ` Keith Busch
  2021-02-08 17:47   ` Klaus Jensen
  2 siblings, 1 reply; 7+ messages in thread
From: Keith Busch @ 2021-02-08 15:40 UTC (permalink / raw)
  To: Klaus Jensen
  Cc: Kevin Wolf, Fam Zheng, qemu-block, Klaus Jensen,
	Gollu Appalanaidu, qemu-devel, Max Reitz, Stefan Hajnoczi

On Mon, Feb 08, 2021 at 03:10:10PM +0100, Klaus Jensen wrote:
> From: Klaus Jensen <k.jensen@samsung.com>
> 
> This adds support for the telemetry log pages and fixes up the
> controller IEEE OUI.

Patch 1 is fine.

I don't see the point for patch 2. We don't need an empty implementation
for every optional spec feature just because it's there. The features
we do implement ought to provide something useful, yeah?


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] hw/block/nvme: add support for telemetry log pages
  2021-02-08 15:40 ` [PATCH 0/2] hw/block/nvme: add support for telemetry log pages Keith Busch
@ 2021-02-08 17:47   ` Klaus Jensen
  0 siblings, 0 replies; 7+ messages in thread
From: Klaus Jensen @ 2021-02-08 17:47 UTC (permalink / raw)
  To: Keith Busch
  Cc: Kevin Wolf, Fam Zheng, qemu-block, Klaus Jensen,
	Gollu Appalanaidu, qemu-devel, Max Reitz, Stefan Hajnoczi

[-- Attachment #1: Type: text/plain, Size: 513 bytes --]

On Feb  9 00:40, Keith Busch wrote:
> On Mon, Feb 08, 2021 at 03:10:10PM +0100, Klaus Jensen wrote:
> > From: Klaus Jensen <k.jensen@samsung.com>
> > 
> > This adds support for the telemetry log pages and fixes up the
> > controller IEEE OUI.
> 
> Patch 1 is fine.
> 
> I don't see the point for patch 2. We don't need an empty implementation
> for every optional spec feature just because it's there. The features
> we do implement ought to provide something useful, yeah?

Alright, point taken :)

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] hw/block/nvme: use locally assigned QEMU IEEE OUI
  2021-02-08 14:10 ` [PATCH 1/2] hw/block/nvme: use locally assigned QEMU IEEE OUI Klaus Jensen
@ 2021-02-08 18:56   ` Philippe Mathieu-Daudé
  2021-02-08 19:01     ` Klaus Jensen
  0 siblings, 1 reply; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-02-08 18:56 UTC (permalink / raw)
  To: Klaus Jensen, qemu-devel
  Cc: Kevin Wolf, Fam Zheng, qemu-block, Klaus Jensen,
	Gollu Appalanaidu, Max Reitz, Stefan Hajnoczi, Keith Busch

On 2/8/21 3:10 PM, Klaus Jensen wrote:
> From: Gollu Appalanaidu <anaidu.gollu@samsung.com>
> 
> Commit 6eb7a071292a ("hw/block/nvme: change controller pci id") changed
> the controller to use a Red Hat assigned PCI Device and Vendor ID, but
> did not change the IEEE OUI away from the Intel IEEE OUI.
> 
> Fix that and use the locally assigned QEMU IEEE OUI instead.
> 
> Signed-off-by: Gollu Appalanaidu <anaidu.gollu@samsung.com>
> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
> ---
>  hw/block/nvme.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/block/nvme.c b/hw/block/nvme.c
> index c2f0c88fbf39..547a3073ef1b 100644
> --- a/hw/block/nvme.c
> +++ b/hw/block/nvme.c
> @@ -4686,8 +4686,8 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pci_dev)
>  
>      id->rab = 6;
>      id->ieee[0] = 0x00;
> -    id->ieee[1] = 0x02;
> -    id->ieee[2] = 0xb3;
> +    id->ieee[1] = 0x54;
> +    id->ieee[2] = 0x52;

Shouldn't this be conditional on 'use-intel-id'?

>      id->mdts = n->params.mdts;
>      id->ver = cpu_to_le32(NVME_SPEC_VER);
>      id->oacs = cpu_to_le16(0);
> 



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] hw/block/nvme: use locally assigned QEMU IEEE OUI
  2021-02-08 18:56   ` Philippe Mathieu-Daudé
@ 2021-02-08 19:01     ` Klaus Jensen
  0 siblings, 0 replies; 7+ messages in thread
From: Klaus Jensen @ 2021-02-08 19:01 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Kevin Wolf, Fam Zheng, qemu-block, Klaus Jensen,
	Gollu Appalanaidu, qemu-devel, Max Reitz, Stefan Hajnoczi,
	Keith Busch

[-- Attachment #1: Type: text/plain, Size: 1313 bytes --]

On Feb  8 19:56, Philippe Mathieu-Daudé wrote:
> On 2/8/21 3:10 PM, Klaus Jensen wrote:
> > From: Gollu Appalanaidu <anaidu.gollu@samsung.com>
> > 
> > Commit 6eb7a071292a ("hw/block/nvme: change controller pci id") changed
> > the controller to use a Red Hat assigned PCI Device and Vendor ID, but
> > did not change the IEEE OUI away from the Intel IEEE OUI.
> > 
> > Fix that and use the locally assigned QEMU IEEE OUI instead.
> > 
> > Signed-off-by: Gollu Appalanaidu <anaidu.gollu@samsung.com>
> > Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
> > ---
> >  hw/block/nvme.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/hw/block/nvme.c b/hw/block/nvme.c
> > index c2f0c88fbf39..547a3073ef1b 100644
> > --- a/hw/block/nvme.c
> > +++ b/hw/block/nvme.c
> > @@ -4686,8 +4686,8 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pci_dev)
> >  
> >      id->rab = 6;
> >      id->ieee[0] = 0x00;
> > -    id->ieee[1] = 0x02;
> > -    id->ieee[2] = 0xb3;
> > +    id->ieee[1] = 0x54;
> > +    id->ieee[2] = 0x52;
> 
> Shouldn't this be conditional on 'use-intel-id'?
> 

It definitely should! Thanks!

> >      id->mdts = n->params.mdts;
> >      id->ver = cpu_to_le32(NVME_SPEC_VER);
> >      id->oacs = cpu_to_le16(0);
> > 
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-02-08 23:57 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-08 14:10 [PATCH 0/2] hw/block/nvme: add support for telemetry log pages Klaus Jensen
2021-02-08 14:10 ` [PATCH 1/2] hw/block/nvme: use locally assigned QEMU IEEE OUI Klaus Jensen
2021-02-08 18:56   ` Philippe Mathieu-Daudé
2021-02-08 19:01     ` Klaus Jensen
2021-02-08 14:10 ` [PATCH 2/2] hw/block/nvme: add nvme telemetry log support Klaus Jensen
2021-02-08 15:40 ` [PATCH 0/2] hw/block/nvme: add support for telemetry log pages Keith Busch
2021-02-08 17:47   ` Klaus Jensen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.