qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v6 0/4] ppc: spapr: virtual NVDIMM support


From: David Gibson
Subject: Re: [PATCH v6 0/4] ppc: spapr: virtual NVDIMM support
Date: Wed, 12 Feb 2020 16:23:30 +1100

On Sun, Feb 09, 2020 at 10:55:51PM -0600, Shivaprasad G Bhat wrote:
> The patchset attempts to implement the virtual NVDIMM for pseries.
> 
> PAPR semantics is such that each NVDIMM device is comprising of
> multiple SCM(Storage Class Memory) blocks. The hypervisor is expected
> to prepare the FDT for the NVDIMM device and send guest a hotplug
> interrupt with new type RTAS_LOG_V6_HP_TYPE_PMEM currently handled by
> the upstream kernel. In response to that interrupt, the guest requests
> the hypervisor to bind each of the SCM blocks of the NVDIMM device
> using hcalls. There can be SCM block unbind requests in case of driver
> errors or unplug(not supported now) use cases. The NVDIMM label
> read/writes are done through hcalls.
> 
> Since each virtual NVDIMM device is divided into multiple SCM blocks,
> the bind, unbind, and queries using hcalls on those blocks can come
> independently. This doesnt fit well into the qemu device semantics,
> where the map/unmap are done at the (whole)device/object level
> granularity. The patchset uses the existing NVDIMM class structures
> for the implementation. The bind/unbind is left to happen at the
> device_add/del phase itself instead of at hcalls on-demand.
> 
> The guest kernel makes bind/unbind requests for the virtual NVDIMM
> device at the region level granularity. Without interleaving, each
> virtual NVDIMM device is presented as separate region. Hence it is
> safe to do bind/unbind everything during the object_add/del.
> 
> The free device-memory region which is used for memory hotplug are
> done using multiple LMBs of size(256MiB) and are expected to be
> aligned to 256 MiB. As the SCM blocks are mapped to the same region,
> the SCM blocks also need to be aligned to this size for the subsequent
> memory hotplug to work. The minimum SCM block size is set to this size
> for that reason and can be made user configurable in future if required.
> 
> The first patch moves around the existing static function to common
> area for using it in the subsequent patches. Second patch adds new uuid
> property to the nvdimm device. Third patch adds FDT entries and basic
> device support, the fourth patch adds the hcalls implementation.
> 
> The patches are also available at
> https://github.com/ShivaprasadGBhat/qemu.git - pseries-nvdimm-v6 branch
> and can be used with the upstream kernel. ndctl can be used for
> configuring the nvdimms inside the guest.
> This is how it can be used ..
> Ex :
> For coldplug, the device to be added in qemu command line as shown below
> -object 
> memory-backend-file,id=memnvdimm0,prealloc=yes,mem-path=/tmp/nvdimm0,share=yes,size=1073872896
> -device 
> nvdimm,label-size=128k,uuid=75a3cdd7-6a2f-4791-8d15-fe0a920e8e9e,memdev=memnvdimm0,id=nvdimm0,slot=0
> 
> For hotplug, the device to be added from monitor as below
> object_add 
> memory-backend-file,id=memnvdimm0,prealloc=yes,mem-path=/tmp/nvdimm0,share=yes,size=1073872896
> device_add 
> nvdimm,label-size=128k,uuid=75a3cdd7-6a2f-4791-8d15-fe0a920e8e9e,memdev=memnvdimm0,id=nvdimm0,slot=0

Applied to ppc-for-5.0, thanks.

> 
> ---
> v5: https://lists.nongnu.org/archive/html/qemu-devel/2020-01/msg07472.html
> Changes from v5:
>      - Moved most of the nvdimm code from spapr.c to spapr_nvdimm.c
>      - Addressed all style/logic comments.
> v4: https://lists.gnu.org/archive/html/qemu-devel/2019-12/msg03455.html
> Changes from v4:
>      - The nvdimm occupied GPA area is marked as available for hotplug, the
>        existing code takes care of if the dimm device is actually present 
> there
>        or used by nvdimm.
>      - fixed all comments for hcall implementation code on style/logic issues.
> v3: https://lists.gnu.org/archive/html/qemu-devel/2019-10/msg03452.html
> Changes from v3:
>      - Moved NVDIMM uuid property addition to new patch.
>      - Moved the SCM hcalls to new file
>      - Changed the metadata read/write hcalls to use st/ldX_be_p macros.
>      - Fixed all comments on v3
> v2: https://lists.gnu.org/archive/html/qemu-devel/2019-05/msg02785.html
> Changes from v2:
>      - Creating the drc indices for the nvdimm devices in advance as
>        suggested based on the number of user specified max slots property.
>      - Removed the hard dependency on -machine nvdimm=on, enabled by
>        default on the current latest pseries machine version.
>      - Renamed the functions to spapr_dt_X as suggested.
>      - Metadata is byteswapped before read/write to take care of endianness
>        semantics during the hcall.
> v1 : http://lists.nongnu.org/archive/html/qemu-devel/2019-02/msg01545.html
> Changes from v1:
>      - Rebased to upstream, this required required dt_populate implementation
>        for nvdimm hotplug support
>      - Added uuid option to nvdimm device
>      - Removed the memory region sizing down code as suggested by Igor,
>        now erroring out if NVDIMM size excluding the label area is not
>        aligned to 256MB, so patch 2 from previous series no longer needed.
>      - Removed un-implemented hcalls
>      - Changed the hcalls to different kinds of checks and return
>        different values.
>      - Addressed comments for v1
> ---
> 
> Shivaprasad G Bhat (4):
>       mem: move nvdimm_device_list to utilities
>       nvdimm: add uuid property to nvdimm
>       spapr: Add NVDIMM device support
>       spapr: Add Hcalls to support PAPR NVDIMM device
> 
> 
>  default-configs/ppc64-softmmu.mak |    1 
>  hw/acpi/nvdimm.c                  |   28 --
>  hw/mem/Kconfig                    |    2 
>  hw/mem/nvdimm.c                   |   40 +++
>  hw/ppc/Makefile.objs              |    2 
>  hw/ppc/spapr.c                    |   69 +++++
>  hw/ppc/spapr_drc.c                |   19 +
>  hw/ppc/spapr_events.c             |    4 
>  hw/ppc/spapr_nvdimm.c             |  475 
> +++++++++++++++++++++++++++++++++++++
>  include/hw/mem/nvdimm.h           |    7 +
>  include/hw/ppc/spapr.h            |    8 +
>  include/hw/ppc/spapr_drc.h        |    9 +
>  include/hw/ppc/spapr_nvdimm.h     |   37 +++
>  include/qemu/nvdimm-utils.h       |    7 +
>  util/Makefile.objs                |    1 
>  util/nvdimm-utils.c               |   29 ++
>  16 files changed, 699 insertions(+), 39 deletions(-)
>  create mode 100644 hw/ppc/spapr_nvdimm.c
>  create mode 100644 include/hw/ppc/spapr_nvdimm.h
>  create mode 100644 include/qemu/nvdimm-utils.h
>  create mode 100644 util/nvdimm-utils.c
> 

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]