[libvirt] [RFC v3 1/4] nvdimm: introduce more config elements into xml for NVDIMM memory

Luyao Zhong luyao.zhong at intel.com
Mon Dec 17 02:06:41 UTC 2018



On 2018/12/14 上午9:07, John Ferlan wrote:
> 
> 
> On 12/12/18 7:52 AM, Luyao Zhong wrote:
>> 1.alignsize
>> The 'alignsize' option allows users to specify the proper alignment.
>>
>> 2.pmem
>> The 'pmem' option allows users to specify whether the backend storage of
>> memory-backend-file is a real persistent memory.
>>
>> 3.unarmed
>> The 'unarmed' option allows users to mark vNVDIMM read-only.
>>
>> These options can be configured respectively or simultaneously in domain
>> xml file, here is an example:
>> <devices>
>>    ...
>>    <memory model='nvdimm' access='shared'>
>>        <source>
>>            <path>/dev/dax0.0</path>
>>            <alignsize unit='MiB'>2</alignsize>
>>            <pmem/>
>>        </source>
>>        <target>
>>            <size unit='MiB'>4094</size>
>>            <node>0</node>
>>            <label>
>>                <size unit='MiB'>2</size>
>>            </label>
>>            <unarmed/>
>>        </target>
>>    </memory>
>>    ...
>> </devices>
>>
>> Signed-off-by: Luyao Zhong <luyao.zhong at intel.com>
>> ---
>>   docs/formatdomain.html.in                          | 80 ++++++++++++++++++----
>>   docs/schemas/domaincommon.rng                      | 23 ++++++-
>>   src/conf/domain_conf.c                             | 61 +++++++++++++++--
>>   src/conf/domain_conf.h                             |  3 +
>>   .../memory-hotplug-nvdimm-align.xml                | 58 ++++++++++++++++
>>   .../memory-hotplug-nvdimm-pmem.xml                 | 58 ++++++++++++++++
>>   .../memory-hotplug-nvdimm-unarmed.xml              | 58 ++++++++++++++++
>>   .../memory-hotplug-nvdimm-align.xml                |  1 +
>>   .../memory-hotplug-nvdimm-pmem.xml                 |  1 +
>>   .../memory-hotplug-nvdimm-unarmed.xml              |  1 +
>>   tests/qemuxml2xmltest.c                            |  3 +
>>   11 files changed, 322 insertions(+), 25 deletions(-)
>>   create mode 100644 tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
>>   create mode 100644 tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
>>   create mode 100644 tests/qemuxml2argvdata/memory-hotplug-nvdimm-unarmed.xml
>>   create mode 120000 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-align.xml
>>   create mode 120000 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-pmem.xml
>>   create mode 120000 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-unarmed.xml
>>
> 
> fails syntax-check
> 
I‘ll fix this.

> Adding 3 things at one time borders on separation of concepts, but it's
> also a pain to repeat the same process. Still it's also easier to review
> and bisect if/when issues arise, separation is preferred.
> 
Got it. I'll split this patch.
> 
>> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
>> index 428b0e8..3f813f2 100644
>> --- a/docs/formatdomain.html.in
>> +++ b/docs/formatdomain.html.in
>> @@ -8322,6 +8322,8 @@ qemu-kvm -net nic,model=? /dev/null
>>     <memory model='nvdimm'>
>>       <source>
>>         <path>/tmp/nvdimm</path>
>> +      <alignsize unit='KiB'>2048</alignsize>
>> +      <pmem/>
>>       </source>
>>       <target>
>>         <size unit='KiB'>524288</size>
>> @@ -8329,6 +8331,7 @@ qemu-kvm -net nic,model=? /dev/null
>>         <label>
>>           <size unit='KiB'>128</size>
>>         </label>
>> +      <unarmed/>
>>       </target>
>>     </memory>
>>   </devices>
>> @@ -8403,10 +8406,37 @@ qemu-kvm -net nic,model=? /dev/null
>>           </dl>
>>   
>>           <p>
>> -          For model <code>nvdimm</code> this element is mandatory and has a
>> -          single child element <code>path</code> that represents a path
>> -          in the host that backs the nvdimm module in the guest.
>> +          For model <code>nvdimm</code> this element is mandatory. The
>> +          mandatory child element <code>path</code> represents a path in
>> +          the host that backs the nvdimm module in the guest. If
>> +          <code>nvdimm</code> is provided, then the following optional
>> +          elements can be provided as well:
>>           </p>
>> +
>> +        <dl>
>> +          <dt><code>alignsize</code></dt>
>> +          <dd>
>> +            <p>
>> +              This element can be used to specify a proper alignment.
>> +              When mmap(2) the backend files, QEMU uses the host page
>> +              size by default as the alignment of mapping address. However,
>> +              some backends may require alignments different from the page.
>> +              For example, mmap a real NVDIMM device maybe 2M-aligned required.
>> +              <span class="since">Since 4.9.0</span>
> 
> At the earliest 5.0.0 (the next release)...
> 
Got it. I forgot to update this.

>> +            </p>
>> +          </dd>
>> +
>> +          <dt><code>pmem</code></dt>
>> +          <dd>
>> +            <p>
>> +              This element can be used to specify whether the backend storage
>> +              of memory-backend-file is a real persistent memory. If the backend
> 
> "is a real"  should that be "is using real" ??
> 
>> +              is a real persistence memory and <code>pmem</code> is set, QEMU
>> +              will guarantee the persistence of its own writes to the vNVDIMM
>> +              backend.<span class="since">Since 4.9.0</span>
> 
> Add a space between .<
> 
Got it, it's my mistake.

> Same
> 
>> +            </p>
>> +          </dd>
>> +        </dl>
>>         </dd>
>>   
>>         <dt><code>target</code></dt>
>> @@ -8425,19 +8455,39 @@ qemu-kvm -net nic,model=? /dev/null
>>             NUMA nodes configured.
>>           </p>
>>           <p>
>> -          For NVDIMM type devices one can optionally use
>> -          <code>label</code> and its subelement <code>size</code>
>> -          to configure the size of namespaces label storage
>> -          within the NVDIMM module. The <code>size</code> element
>> -          has usual meaning described
>> -          <a href="#elementsMemoryAllocation">here</a>.
>> -          For QEMU domains the following restrictions apply:
>> +          Besides, the following optional elements can be provided as well for
>> +          NVDIMM type devices:
>>           </p>
>> -        <ol>
>> -          <li>the minimum label size is 128KiB,</li>
>> -          <li>the remaining size (total-size - label-size) has to be aligned to
>> -            4KiB</li>
>> -        </ol>
>> +
>> +        <dl>
>> +          <dt><code>label</code></dt>
>> +          <dd>
>> +            <p>
>> +              For NVDIMM type devices one can optionally use
>> +              <code>label</code> and its subelement <code>size</code>
>> +              to configure the size of namespaces label storage
>> +              within the NVDIMM module. The <code>size</code> element
>> +              has usual meaning described
>> +              <a href="#elementsMemoryAllocation">here</a>.
>> +              For QEMU domains the following restrictions apply:
>> +            </p>
>> +            <ol>
>> +              <li>the minimum label size is 128KiB,</li>
>> +              <li>the remaining size (total-size - label-size) will be aligned to
>> +                4KiB as default.</li>
>> +            </ol>
>> +          </dd>
>> +
>> +          <dt><code>unarmed</code></dt>
>> +          <dd>
>> +            <p>
>> +              The <code>unarmed</code> element can be used to mark vNVDIMM read-only.
>> +              Currently, only real NVDIMM device backend can guarantee the guest write
>> +              persistence, so please set <code>unarmed</code> when using other types
>> +              of backends.<span class="since">Since 4.9.0</span>
> 
> Similar w/ ".<" and usage of 5.0.0 instead.
> 
Got it.

>> +            </p>
>> +          </dd>
>> +        </dl>
>>         </dd>
>>       </dl>
>>   
>> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
>> index 5a6c48f..de098a5 100644
>> --- a/docs/schemas/domaincommon.rng
>> +++ b/docs/schemas/domaincommon.rng
>> @@ -5384,9 +5384,21 @@
>>             </interleave>
>>           </group>
>>           <group>
>> -          <element name="path">
>> -            <ref name="absFilePath"/>
>> -          </element>
>> +          <interleave>
>> +            <element name="path">
>> +              <ref name="absFilePath"/>
>> +            </element>
>> +            <optional>
>> +              <element name="alignsize">
>> +                <ref name="scaledInteger"/>
>> +              </element>
>> +            </optional>
>> +            <optional>
>> +              <element name="pmem">
>> +                <empty/>
>> +              </element>
>> +            </optional>
>> +          </interleave>
>>           </group>
>>         </choice>
>>       </element>
>> @@ -5410,6 +5422,11 @@
>>               </element>
>>             </element>
>>           </optional>
>> +        <optional>
>> +          <element name="unarmed">
>> +            <empty/>
>> +          </element>
>> +        </optional>
>>         </interleave>
>>       </element>
>>     </define>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index efa0a94..e16262b 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -15757,6 +15757,16 @@ virDomainMemorySourceDefParseXML(xmlNodePtr node,
>>                              _("path is required for model 'nvdimm'"));
>>               goto cleanup;
>>           }
>> +
>> +        if (virDomainParseMemory("./alignsize", "./alignsize/@unit", ctxt,
>> +                                 &def->alignsize, false, false) < 0)
>> +            goto cleanup;
>> +
>> +        if (virXPathBoolean("boolean(./pmem)", ctxt))
>> +            def->nvdimmPmem = true;
>> +        else
>> +            def->nvdimmPmem = false;
>> +
> 
> The else is unnecessary since the default is false
> 
Got it.

>>           break;
>>   
>>       case VIR_DOMAIN_MEMORY_MODEL_NONE:
>> @@ -15813,6 +15823,11 @@ virDomainMemoryTargetDefParseXML(xmlNodePtr node,
>>                              _("label size must be smaller than NVDIMM size"));
>>               goto cleanup;
>>           }
>> +
>> +        if (virXPathBoolean("boolean(./unarmed)", ctxt))
>> +            def->nvdimmUnarmed = true;
>> +        else
>> +            def->nvdimmUnarmed = false;
> 
> The else is unnecessary since the default is false.
> 
Got it.

>>       }
>>   
>>       ret = 0;
>> @@ -22712,13 +22727,36 @@ virDomainMemoryDefCheckABIStability(virDomainMemoryDefPtr src,
>>           return false;
>>       }
>>   
>> -    if (src->model == VIR_DOMAIN_MEMORY_MODEL_NVDIMM &&
>> -        src->labelsize != dst->labelsize) {
>> -        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>> -                       _("Target NVDIMM label size '%llu' doesn't match "
>> -                         "source NVDIMM label size '%llu'"),
>> -                       src->labelsize, dst->labelsize);
>> -        return false;
>> +    if (src->model == VIR_DOMAIN_MEMORY_MODEL_NVDIMM) {
>> +        if (src->labelsize != dst->labelsize) {
>> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>> +                           _("Target NVDIMM label size '%llu' doesn't match "
>> +                             "source NVDIMM label size '%llu'"),
>> +                           src->labelsize, dst->labelsize);
>> +            return false;
>> +        }
>> +
>> +        if (src->alignsize != dst->alignsize) {
>> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>> +                           _("Target NVDIMM alignment '%llu' doesn't match "
>> +                             "source NVDIMM alignment '%llu'"),
>> +                           src->alignsize, dst->alignsize);
>> +            return false;
>> +        }
>> +
>> +        if (src->nvdimmPmem != dst->nvdimmPmem) {
>> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> 
> Since there's nothing to format you need a "%s", as 2nd arg
> 
Got it.

>> +                           _("Target NVDIMM pmem flag doesn't match "
>> +                             "source NVDIMM pmem flag "));
> 
> Remove the trailing space after flag
> 
Got it.
>> +            return false;
>> +        }
>> +
>> +        if (src->nvdimmUnarmed != dst->nvdimmUnarmed) {
>> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>> +                           _("Target NVDIMM unarmed flag doesn't match "
>> +                             "source NVDIMM unarmed flag "));
> 
> same for this one too.
> 
>> +            return false;
>> +        }
>>       }
>>   
>>       return virDomainDeviceInfoCheckABIStability(&src->info, &dst->info);
>> @@ -26255,6 +26293,13 @@ virDomainMemorySourceDefFormat(virBufferPtr buf,
>>   
>>       case VIR_DOMAIN_MEMORY_MODEL_NVDIMM:
>>           virBufferEscapeString(buf, "<path>%s</path>\n", def->nvdimmPath);
>> +
>> +        if (def->alignsize)
>> +            virBufferAsprintf(buf, "<alignsize unit='KiB'>%llu</alignsize>\n",
>> +                              def->alignsize);
>> +
>> +        if (def->nvdimmPmem)
>> +            virBufferAddLit(buf, "<pmem/>\n");
>>           break;
>>   
>>       case VIR_DOMAIN_MEMORY_MODEL_NONE:
>> @@ -26290,6 +26335,8 @@ virDomainMemoryTargetDefFormat(virBufferPtr buf,
>>           virBufferAdjustIndent(buf, -2);
>>           virBufferAddLit(buf, "</label>\n");
>>       }
>> +    if (def->nvdimmUnarmed)
>> +        virBufferAddLit(buf, "<unarmed/>\n");
>>   
>>       virBufferAdjustIndent(buf, -2);
>>       virBufferAddLit(buf, "</target>\n");
>> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
>> index b24e6ec..e921f00 100644
>> --- a/src/conf/domain_conf.h
>> +++ b/src/conf/domain_conf.h
>> @@ -2149,12 +2149,15 @@ struct _virDomainMemoryDef {
>>       virBitmapPtr sourceNodes;
>>       unsigned long long pagesize; /* kibibytes */
>>       char *nvdimmPath;
>> +    unsigned long long alignsize; /* kibibytes; valid only for NVDIMM */
>> +    bool nvdimmPmem; /* valid only for NVDIMM */
>>   
>>       /* target */
>>       int model; /* virDomainMemoryModel */
>>       int targetNode;
>>       unsigned long long size; /* kibibytes */
>>       unsigned long long labelsize; /* kibibytes; valid only for NVDIMM */
>> +    bool nvdimmUnarmed; /* valid only for NVDIMM */
>>   
>>       virDomainDeviceInfo info;
>>   };
>> diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
>> new file mode 100644
>> index 0000000..a8c5198
>> --- /dev/null
>> +++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
>> @@ -0,0 +1,58 @@
>> +<domain type='qemu'>
>> +  <name>QEMUGuest1</name>
>> +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>> +  <maxMemory slots='16' unit='KiB'>1099511627776</maxMemory>
>> +  <memory unit='KiB'>1267710</memory>
>> +  <currentMemory unit='KiB'>1267710</currentMemory>
>> +  <vcpu placement='static' cpuset='0-1'>2</vcpu>
>> +  <os>
>> +    <type arch='i686' machine='pc'>hvm</type>
>> +    <boot dev='hd'/>
>> +  </os>
>> +  <idmap>
>> +    <uid start='0' target='1000' count='10'/>
>> +    <gid start='0' target='1000' count='10'/>
>> +  </idmap>
> 
> I know thiese are copies of memory-hotplug-nvdimm-access.xml, but rather
> than just be copies can "trim" out the excess stuff.  I would think
> idmap is unnecessary.
> 
> Same for other .xml additions.
> 
I want to use DO_TEST_CAPS_LATEST, so there'll still be many unnecessary 
configuration in *.xml file.

> John
> 
I found this email in my trash mailbox. Sorry for this reply is a bit 
late. Thank you for your comments.

Luyao Zhong

>> +  <cpu>
>> +    <topology sockets='2' cores='1' threads='1'/>
>> +    <numa>
>> +      <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
>> +    </numa>
>> +  </cpu>
>> +  <clock offset='utc'/>
>> +  <on_poweroff>destroy</on_poweroff>
>> +  <on_reboot>restart</on_reboot>
>> +  <on_crash>destroy</on_crash>
>> +  <devices>
>> +    <emulator>/usr/bin/qemu-system-i686</emulator>
>> +    <disk type='block' device='disk'>
>> +      <driver name='qemu' type='raw'/>
>> +      <source dev='/dev/HostVG/QEMUGuest1'/>
>> +      <target dev='hda' bus='ide'/>
>> +      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
>> +    </disk>
>> +    <controller type='ide' index='0'>
>> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
>> +    </controller>
>> +    <controller type='usb' index='0'>
>> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
>> +    </controller>
>> +    <controller type='pci' index='0' model='pci-root'/>
>> +    <input type='mouse' bus='ps2'/>
>> +    <input type='keyboard' bus='ps2'/>
>> +    <memballoon model='virtio'>
>> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>> +    </memballoon>
>> +    <memory model='nvdimm' access='private'>
>> +      <source>
>> +        <path>/tmp/nvdimm</path>
>> +        <alignsize unit='KiB'>2048</alignsize>
>> +      </source>
>> +      <target>
>> +        <size unit='KiB'>523264</size>
>> +        <node>0</node>
>> +      </target>
>> +      <address type='dimm' slot='0'/>
>> +    </memory>
>> +  </devices>
>> +</domain>
>> diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
>> new file mode 100644
>> index 0000000..060d75c
>> --- /dev/null
>> +++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
>> @@ -0,0 +1,58 @@
>> +<domain type='qemu'>
>> +  <name>QEMUGuest1</name>
>> +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>> +  <maxMemory slots='16' unit='KiB'>1099511627776</maxMemory>
>> +  <memory unit='KiB'>1267710</memory>
>> +  <currentMemory unit='KiB'>1267710</currentMemory>
>> +  <vcpu placement='static' cpuset='0-1'>2</vcpu>
>> +  <os>
>> +    <type arch='i686' machine='pc'>hvm</type>
>> +    <boot dev='hd'/>
>> +  </os>
>> +  <idmap>
>> +    <uid start='0' target='1000' count='10'/>
>> +    <gid start='0' target='1000' count='10'/>
>> +  </idmap>
>> +  <cpu>
>> +    <topology sockets='2' cores='1' threads='1'/>
>> +    <numa>
>> +      <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
>> +    </numa>
>> +  </cpu>
>> +  <clock offset='utc'/>
>> +  <on_poweroff>destroy</on_poweroff>
>> +  <on_reboot>restart</on_reboot>
>> +  <on_crash>destroy</on_crash>
>> +  <devices>
>> +    <emulator>/usr/bin/qemu-system-i686</emulator>
>> +    <disk type='block' device='disk'>
>> +      <driver name='qemu' type='raw'/>
>> +      <source dev='/dev/HostVG/QEMUGuest1'/>
>> +      <target dev='hda' bus='ide'/>
>> +      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
>> +    </disk>
>> +    <controller type='ide' index='0'>
>> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
>> +    </controller>
>> +    <controller type='usb' index='0'>
>> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
>> +    </controller>
>> +    <controller type='pci' index='0' model='pci-root'/>
>> +    <input type='mouse' bus='ps2'/>
>> +    <input type='keyboard' bus='ps2'/>
>> +    <memballoon model='virtio'>
>> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>> +    </memballoon>
>> +    <memory model='nvdimm' access='private'>
>> +      <source>
>> +        <path>/tmp/nvdimm</path>
>> +        <pmem/>
>> +      </source>
>> +      <target>
>> +        <size unit='KiB'>523264</size>
>> +        <node>0</node>
>> +      </target>
>> +      <address type='dimm' slot='0'/>
>> +    </memory>
>> +  </devices>
>> +</domain>
>> diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-unarmed.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-unarmed.xml
>> new file mode 100644
>> index 0000000..7ddbb01
>> --- /dev/null
>> +++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-unarmed.xml
>> @@ -0,0 +1,58 @@
>> +<domain type='qemu'>
>> +  <name>QEMUGuest1</name>
>> +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>> +  <maxMemory slots='16' unit='KiB'>1099511627776</maxMemory>
>> +  <memory unit='KiB'>1267710</memory>
>> +  <currentMemory unit='KiB'>1267710</currentMemory>
>> +  <vcpu placement='static' cpuset='0-1'>2</vcpu>
>> +  <os>
>> +    <type arch='i686' machine='pc'>hvm</type>
>> +    <boot dev='hd'/>
>> +  </os>
>> +  <idmap>
>> +    <uid start='0' target='1000' count='10'/>
>> +    <gid start='0' target='1000' count='10'/>
>> +  </idmap>
>> +  <cpu>
>> +    <topology sockets='2' cores='1' threads='1'/>
>> +    <numa>
>> +      <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
>> +    </numa>
>> +  </cpu>
>> +  <clock offset='utc'/>
>> +  <on_poweroff>destroy</on_poweroff>
>> +  <on_reboot>restart</on_reboot>
>> +  <on_crash>destroy</on_crash>
>> +  <devices>
>> +    <emulator>/usr/bin/qemu-system-i686</emulator>
>> +    <disk type='block' device='disk'>
>> +      <driver name='qemu' type='raw'/>
>> +      <source dev='/dev/HostVG/QEMUGuest1'/>
>> +      <target dev='hda' bus='ide'/>
>> +      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
>> +    </disk>
>> +    <controller type='ide' index='0'>
>> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
>> +    </controller>
>> +    <controller type='usb' index='0'>
>> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
>> +    </controller>
>> +    <controller type='pci' index='0' model='pci-root'/>
>> +    <input type='mouse' bus='ps2'/>
>> +    <input type='keyboard' bus='ps2'/>
>> +    <memballoon model='virtio'>
>> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>> +    </memballoon>
>> +    <memory model='nvdimm' access='private'>
>> +      <source>
>> +        <path>/tmp/nvdimm</path>
>> +      </source>
>> +      <target>
>> +        <size unit='KiB'>523264</size>
>> +        <node>0</node>
>> +        <unarmed/>
>> +      </target>
>> +      <address type='dimm' slot='0'/>
>> +    </memory>
>> +  </devices>
>> +</domain>
>> diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-align.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-align.xml
>> new file mode 120000
>> index 0000000..9fc6001
>> --- /dev/null
>> +++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-align.xml
>> @@ -0,0 +1 @@
>> +../qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
>> \ No newline at end of file
>> diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-pmem.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-pmem.xml
>> new file mode 120000
>> index 0000000..3e57c1e
>> --- /dev/null
>> +++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-pmem.xml
>> @@ -0,0 +1 @@
>> +../qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
>> \ No newline at end of file
>> diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-unarmed.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-unarmed.xml
>> new file mode 120000
>> index 0000000..1793347
>> --- /dev/null
>> +++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-unarmed.xml
>> @@ -0,0 +1 @@
>> +../qemuxml2argvdata/memory-hotplug-nvdimm-unarmed.xml
>> \ No newline at end of file
>> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
>> index c98b957..01e3730 100644
>> --- a/tests/qemuxml2xmltest.c
>> +++ b/tests/qemuxml2xmltest.c
>> @@ -1112,6 +1112,9 @@ mymain(void)
>>       DO_TEST("memory-hotplug-nvdimm", NONE);
>>       DO_TEST("memory-hotplug-nvdimm-access", NONE);
>>       DO_TEST("memory-hotplug-nvdimm-label", NONE);
>> +    DO_TEST("memory-hotplug-nvdimm-align", NONE);
>> +    DO_TEST("memory-hotplug-nvdimm-pmem", NONE);
>> +    DO_TEST("memory-hotplug-nvdimm-unarmed", NONE);
>>       DO_TEST("net-udp", NONE);
>>   
>>       DO_TEST("video-virtio-gpu-device", NONE);
>>




More information about the libvir-list mailing list