All of lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: Haozhong Zhang <haozhong.zhang@intel.com>
Cc: qemu-devel@nongnu.org,
	Xiao Guangrong <xiaoguangrong.eric@gmail.com>,
	mst@redhat.com, Markus Armbruster <armbru@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	dgilbert@redhat.com, Stefan Hajnoczi <stefanha@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Marcel Apfelbaum <marcel@redhat.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH v3 2/5] qmp: distinguish PC-DIMM and NVDIMM in MemoryDeviceInfoList
Date: Wed, 7 Mar 2018 11:21:33 +0100	[thread overview]
Message-ID: <20180307112133.47a676e6@redhat.com> (raw)
In-Reply-To: <20180305065710.25876-3-haozhong.zhang@intel.com>

On Mon,  5 Mar 2018 14:57:07 +0800
Haozhong Zhang <haozhong.zhang@intel.com> wrote:

> It may need to treat PC-DIMM and NVDIMM differently, e.g., when
> deciding the necessity of non-volatile flag bit in SRAT memory
> affinity structures.
> 
> NVDIMMDeviceInfo, which inherits from PCDIMMDeviceInfo, is added to
> union type MemoryDeviceInfo to record information of NVDIMM devices.
> The NVDIMM-specific data is currently left empty and will be filled
> when necessary in the future.
Maybe add to commit message that:

It also fixes "info memory-devices"/query-memory-devices
which currently show nvdimm devices as dimm devices since
object_dynamic_cast(obj, TYPE_PC_DIMM) happily cast nvdimm
to TYPE_PC_DIMM which it's been inherited from.

Otherwise patch looks good,
I'll ack it after rebase with is necessary for this patch.

> Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
> ---
>  hmp.c            | 14 +++++++++++---
>  hw/mem/pc-dimm.c | 20 ++++++++++++++++++--
>  numa.c           | 19 +++++++++++++------
>  qapi-schema.json | 18 +++++++++++++++++-
>  4 files changed, 59 insertions(+), 12 deletions(-)
> 
> diff --git a/hmp.c b/hmp.c
> index ae86bfbade..3f06407c5e 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -2413,7 +2413,18 @@ void hmp_info_memory_devices(Monitor *mon, const QDict *qdict)
>              switch (value->type) {
>              case MEMORY_DEVICE_INFO_KIND_DIMM:
>                  di = value->u.dimm.data;
> +                break;
> +
> +            case MEMORY_DEVICE_INFO_KIND_NVDIMM:
> +                di = qapi_NVDIMMDeviceInfo_base(value->u.nvdimm.data);
> +                break;
> +
> +            default:
> +                di = NULL;
> +                break;
> +            }
>  
> +            if (di) {
>                  monitor_printf(mon, "Memory device [%s]: \"%s\"\n",
>                                 MemoryDeviceInfoKind_str(value->type),
>                                 di->id ? di->id : "");
> @@ -2426,9 +2437,6 @@ void hmp_info_memory_devices(Monitor *mon, const QDict *qdict)
>                                 di->hotplugged ? "true" : "false");
>                  monitor_printf(mon, "  hotpluggable: %s\n",
>                                 di->hotpluggable ? "true" : "false");
> -                break;
> -            default:
> -                break;
>              }
>          }
>      }
> diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c
> index 4d050fe2cd..866ecc699a 100644
> --- a/hw/mem/pc-dimm.c
> +++ b/hw/mem/pc-dimm.c
> @@ -20,6 +20,7 @@
>  
>  #include "qemu/osdep.h"
>  #include "hw/mem/pc-dimm.h"
> +#include "hw/mem/nvdimm.h"
>  #include "qapi/error.h"
>  #include "qemu/config-file.h"
>  #include "qapi/visitor.h"
> @@ -249,10 +250,19 @@ MemoryDeviceInfoList *qmp_pc_dimm_device_list(void)
>          Object *obj = OBJECT(dimm);
>          MemoryDeviceInfoList *elem = g_new0(MemoryDeviceInfoList, 1);
>          MemoryDeviceInfo *info = g_new0(MemoryDeviceInfo, 1);
> -        PCDIMMDeviceInfo *di = g_new0(PCDIMMDeviceInfo, 1);
> +        PCDIMMDeviceInfo *di;
> +        NVDIMMDeviceInfo *ndi;
> +        bool is_nvdimm = object_dynamic_cast(obj, TYPE_NVDIMM);
>          DeviceClass *dc = DEVICE_GET_CLASS(obj);
>          DeviceState *dev = DEVICE(obj);
>  
> +        if (!is_nvdimm) {
> +            di = g_new0(PCDIMMDeviceInfo, 1);
> +        } else {
> +            ndi = g_new0(NVDIMMDeviceInfo, 1);
> +            di = qapi_NVDIMMDeviceInfo_base(ndi);
> +        }
> +
>          if (dev->id) {
>              di->has_id = true;
>              di->id = g_strdup(dev->id);
> @@ -265,7 +275,13 @@ MemoryDeviceInfoList *qmp_pc_dimm_device_list(void)
>          di->size = object_property_get_uint(obj, PC_DIMM_SIZE_PROP, NULL);
>          di->memdev = object_get_canonical_path(OBJECT(dimm->hostmem));
>  
> -        info->u.dimm.data = di;
> +        if (!is_nvdimm) {
> +            info->u.dimm.data = di;
> +            info->type = MEMORY_DEVICE_INFO_KIND_DIMM;
> +        } else {
> +            info->u.nvdimm.data = ndi;
> +            info->type = MEMORY_DEVICE_INFO_KIND_NVDIMM;
> +        }
>          elem->value = info;
>          elem->next = NULL;
>          if (prev) {
> diff --git a/numa.c b/numa.c
> index c6734ceb8c..23c4371e51 100644
> --- a/numa.c
> +++ b/numa.c
> @@ -529,18 +529,25 @@ static void numa_stat_memory_devices(NumaNodeMem node_mem[])
>  
>          if (value) {
>              switch (value->type) {
> -            case MEMORY_DEVICE_INFO_KIND_DIMM: {
> +            case MEMORY_DEVICE_INFO_KIND_DIMM:
>                  pcdimm_info = value->u.dimm.data;
> +                break;
> +
> +            case MEMORY_DEVICE_INFO_KIND_NVDIMM:
> +                pcdimm_info = qapi_NVDIMMDeviceInfo_base(value->u.nvdimm.data);
> +                break;
> +
> +            default:
> +                pcdimm_info = NULL;
> +                break;
> +            }
> +
> +            if (pcdimm_info) {
>                  node_mem[pcdimm_info->node].node_mem += pcdimm_info->size;
>                  if (pcdimm_info->hotpluggable && pcdimm_info->hotplugged) {
>                      node_mem[pcdimm_info->node].node_plugged_mem +=
>                          pcdimm_info->size;
>                  }
> -                break;
> -            }
> -
> -            default:
> -                break;
>              }
>          }
>      }
> diff --git a/qapi-schema.json b/qapi-schema.json
> index cd98a94388..1c2d281749 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -2920,6 +2920,18 @@
>            }
>  }
>  
> +##
> +# @NVDIMMDeviceInfo:
> +#
> +# NVDIMMDevice state information
> +#
> +# Since: 2.12
> +##
> +{ 'struct': 'NVDIMMDeviceInfo',
> +  'base': 'PCDIMMDeviceInfo',
> +  'data': {}
> +}
> +
>  ##
>  # @MemoryDeviceInfo:
>  #
> @@ -2927,7 +2939,11 @@
>  #
>  # Since: 2.1
>  ##
> -{ 'union': 'MemoryDeviceInfo', 'data': {'dimm': 'PCDIMMDeviceInfo'} }
> +{ 'union': 'MemoryDeviceInfo',
> +  'data': { 'dimm': 'PCDIMMDeviceInfo',
> +            'nvdimm': 'NVDIMMDeviceInfo'
> +          }
> +}
>  
>  ##
>  # @query-memory-devices:

  parent reply	other threads:[~2018-03-07 10:21 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-05  6:57 [Qemu-devel] [PATCH v3 0/5] hw/acpi-build: build SRAT memory affinity structures for DIMM devices Haozhong Zhang
2018-03-05  6:57 ` [Qemu-devel] [PATCH v3 1/5] pc-dimm: refactor qmp_pc_dimm_device_list Haozhong Zhang
2018-03-07 10:10   ` Igor Mammedov
2018-03-05  6:57 ` [Qemu-devel] [PATCH v3 2/5] qmp: distinguish PC-DIMM and NVDIMM in MemoryDeviceInfoList Haozhong Zhang
2018-03-05 19:14   ` Eric Blake
2018-03-06  0:24     ` Haozhong Zhang
2018-03-06 12:34     ` Igor Mammedov
2018-03-07 10:21   ` Igor Mammedov [this message]
2018-03-05  6:57 ` [Qemu-devel] [PATCH v3 3/5] hw/acpi-build: build SRAT memory affinity structures for DIMM devices Haozhong Zhang
2018-03-07 10:30   ` Igor Mammedov
2018-03-05  6:57 ` [Qemu-devel] [PATCH v3 4/5] tests/bios-tables-test: allow setting extra machine options Haozhong Zhang
2018-03-07 10:40   ` Igor Mammedov
2018-03-05  6:57 ` [Qemu-devel] [PATCH v3 5/5] tests/bios-tables-test: add test cases for DIMM proximity Haozhong Zhang
2018-03-07 12:02   ` Igor Mammedov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180307112133.47a676e6@redhat.com \
    --to=imammedo@redhat.com \
    --cc=armbru@redhat.com \
    --cc=dan.j.williams@intel.com \
    --cc=dgilbert@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=haozhong.zhang@intel.com \
    --cc=marcel@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=stefanha@redhat.com \
    --cc=xiaoguangrong.eric@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.