On Thu, 23 May 2024 10:44:40 -0700 nifan....@gmail.com wrote: > From: Fan Ni <nifan....@gmail.com> > > A git tree of this series can be found here (with one extra commit on > top for printing out accepted/pending extent list for testing): > https://github.com/moking/qemu/tree/dcd-v8-qapi > > v7->v8: > > This version carries over the following two patches from Gregory. > 1. hw/cxl/mailbox: change CCI cmd set structure to be a member, not a > reference > https://gitlab.com/jic23/qemu/-/commit/f44ebc5a455ccdd6535879b0c5824e0d76b04da5 > 2. hw/cxl/mailbox: interface to add CCI commands to an existing CCI > https://gitlab.com/jic23/qemu/-/commit/00a4dd8b388add03c588298f665ee918626296a5 > > Note, the above two patches are not directly related to DCD emulation. > > All the following patches in this series are built on top of > mainstream QEMU and the above two patches. > > The most significant changes of v8 is in Patch 11 (Patch 9 in v7). > Based on feedback from Markus and Jonathan, the QMP interfaces for > adding and releasing DC extents have been redesigned and now they > look like below, > > # add a 128MB extent at offset 0 to region 0 > { "execute": "cxl-add-dynamic-capacity", > "arguments": { > "path": "/machine/peripheral/cxl-memdev0", > "host-id":0, > "selection-policy": 'prescriptive', > "region": 0, > "tag": "", > "extents": [ > { > "offset": 0, > "len": 134217728 > } > ] > } > } > > Note: tag is optional. > > # Release a 128MB extent at offset 0 from region 0 > { "execute": "cxl-release-dynamic-capacity", > "arguments": { > "path": "/machine/peripheral/cxl-memdev0", > "host-id":0, > "removal-policy":"prescriptive", > "forced-removal": false, > "sanitize-on-release": false, > "region": 0, > "tag": "", > "extents": [ > { > "offset": 0, > "len": 134217728 > } > ] > } > } > > Note: removal-policy, sanitize-on-release and tag are optional. > > Other changes include, > 1. Applied tags to patches. > 2. Replaced error_setq with error_append_hint for > cxl_create_dc_region error case in Patch 6 (Patch 4 in v7); (Zhijian > Li) 3. Updated the error message to include region size information in > cxl_create_dc_region. > 4. set range1_size_hi to 0 for DCD in build_dvsec. (Jonathan) > 5. Several minor format fixes. > > Thanks Markus, Jonathan, Gregory, and Zhijian for reviewing v7 and > svetly Todorov for testing v7. > > This series pass the same tests as v7 check the cover letter of v7 for > more details. Additionally, we tested the QAPI interface for > adding/releasing DC extents with optional input parameters. > > > v7: > https://lore.kernel.org/linux-cxl/5856b7a4-4082-465f-9f61-b1ec6c35e...@fujitsu.com/T/#mec4c85022ce28c80b241aaf2d5431cadaa45f097 > > > Fan Ni (12): > hw/cxl/cxl-mailbox-utils: Add dc_event_log_size field to output > payload of identify memory device command > hw/cxl/cxl-mailbox-utils: Add dynamic capacity region representative > and mailbox command support > include/hw/cxl/cxl_device: Rename mem_size as static_mem_size for > type3 memory devices > hw/mem/cxl_type3: Add support to create DC regions to type3 memory > devices > hw/mem/cxl-type3: Refactor ct3_build_cdat_entries_for_mr to take mr > size instead of mr as argument > hw/mem/cxl_type3: Add host backend and address space handling for DC > regions > hw/mem/cxl_type3: Add DC extent list representative and get DC > extent list mailbox support > hw/cxl/cxl-mailbox-utils: Add mailbox commands to support > add/release dynamic capacity response > hw/cxl/events: Add qmp interfaces to add/release dynamic capacity > extents > hw/mem/cxl_type3: Add DPA range validation for accesses to DC > regions hw/cxl/cxl-mailbox-utils: Add superset extent release mailbox > support hw/mem/cxl_type3: Allow to release extent superset in QMP > interface > > Gregory Price (2): > hw/cxl/mailbox: change CCI cmd set structure to be a member, not a > reference > hw/cxl/mailbox: interface to add CCI commands to an existing CCI > > hw/cxl/cxl-mailbox-utils.c | 658 > +++++++++++++++++++++++++++++++++++- hw/mem/cxl_type3.c | > 634 ++++++++++++++++++++++++++++++++-- hw/mem/cxl_type3_stubs.c | > 25 ++ include/hw/cxl/cxl_device.h | 85 ++++- > include/hw/cxl/cxl_events.h | 18 + > qapi/cxl.json | 143 ++++++++ > 6 files changed, 1511 insertions(+), 52 deletions(-) >
Hi Nifan, I am trying to test this patchset with Ira's set on DCD, and I am trying to work out everything by using sysfs rather than using tools instead. I am not sure where things are going of the rail. I am using this patchset (https://lore.kernel.org/qemu-devel/20240523174651.1089554-2-nifan....@gmail.com/) with Ira's v9 https://lore.kernel.org/all/20250413-dcd-type2-upstream-v9-0-1d4911a0b...@intel.com/ This my CXL config: return [ "-m", "6G,maxmem=20G,slots=10", "-object", "memory-backend-ram,id=vmem0,share=on,size=2G", "-device", "pxb-cxl,bus_nr=23,bus=pcie.0,id=cxl.1", "-device","cxl-rp,port=0,bus=cxl.1,id=root_port13,chassis=0,slot=2", "-device","cxl-type3,bus=root_port13,volatile-dc-memdev=vmem0,id=cxl-vmem0,num-dc-regions=2", "-M", "cxl=on,cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=4G" ] This is how I create a new CXL DC Region ready to work with. # creating a region region=$(cat /sys/bus/cxl/devices/decoder0.0/create_dynamic_ram_a_region) echo $region echo $region > /sys/bus/cxl/devices/decoder0.0/create_dynamic_ram_a_region echo 256 > /sys/bus/cxl/devices/$region/interleave_granularity echo 1 > /sys/bus/cxl/devices/$region/interleave_ways echo "dynamic_ram_a" > /sys/bus/cxl/devices/decoder2.0/mode echo $((256 << 20)) > /sys/bus/cxl/devices/decoder2.0/dpa_size echo $((256 << 20)) > /sys/bus/cxl/devices/$region/size echo "decoder2.0" > /sys/bus/cxl/devices/$region/target0 echo 1 > /sys/bus/cxl/devices/$region/commit echo $region > /sys/bus/cxl/drivers/cxl_region/bind After this I have two things created, region0 and dax_region0: root@localhost:~# ls /sys/bus/cxl/devices/ dax_region0/ decoder1.0/ decoder1.2/ decoder2.0/ decoder2.2/ endpoint2/ nvdimm-bridge0/ region0/ decoder0.0/ decoder1.1/ decoder1.3/ decoder2.1/ decoder2.3/ mem0/ port1/ root0/ This is what I have in dax_region0: root@localhost:~# ls /sys/bus/cxl/devices/dax_region0/ dax0.0 dax_region devtype driver modalias subsystem uevent Now I want to add an extent, and this is how I am doing it: { "execute": "cxl-add-dynamic-capacity", "arguments": { "path": "/machine/peripheral/cxl-memdev0", "host-id":0, "selection-policy": 'prescriptive', "region": 0, "tag": "", "extents": [ { "offset": 0, "len": 134217728 } ] } } Now I see the extent added in my region device: root@localhost:~# ls /sys/bus/cxl/devices/dax_region0/ dax0.0 dax_region devtype driver extent0.0 modalias subsystem uevent root@localhost:~# ls /sys/bus/cxl/devices/dax_region0/extent0.0/ length offset uevent This is where things will go off the rails, at this point I want to create a new dax device to use, but this part is unsuccessful. Here I first add some size to the dax region created before: root@localhost:~# echo 67108864 > /sys/bus/dax/devices/dax0.0/size [264.539280] dax:alloc_dev_dax_range:1015: dax dax0.0: alloc range[0]: 0x0000000810000000:0x0000000813ffffff When I check the size everything looks OK: root@localhost:~# cat /sys/bus/dax/devices/dax0.0/size 67108864 But when I want to bind it then it does not work: root@localhost:~# echo "dax0.0" > /sys/bus/dax/drivers/device_dax/bind -bash: echo: write error: No such device I believe I am missing something here. Would be good if you can help out here. Thanks, Alireza