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