[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
signature.asc
Description: PGP signature