cli: Add --memdev target.address_base for virtio-mem and virtio-pmem

Libvirt(since 9.4.0) allows to control this attribute for virtio-{mem,pmem}.
Now add it into virt-install.

Example:
virt-install \
--name test \
--os-variant opensusetumbleweed \
--cdrom /isos/openSUSE-Tumbleweed-DVD-x86_64-Current.iso \
--disk /vms/tw/disk0.qcow2 \
--vcpu 2 \
--cpu cell0.cpus=0,cell0.memory=4194304,\
cell1.cpus=1,cell1.memory=4194304 \
--memory maxMemory=65536,maxMemory.slots=8 \
--memdev model=virtio-mem,\
target.node=0,\
target.block=2048,\
target.size=8192,\
target.requested=2097152,\
target.address_base=0x280000000 \
--memdev model=virtio-pmem,\
source.path=/tmp/virtio_pmem,\
target.size=4096,\
target.address_base=0x480000000

It results in the following domain XML snippet:
    <memory model='virtio-mem'>
      <target>
        <size unit='KiB'>8388608</size>
        <node>0</node>
        <block unit='KiB'>2048</block>
        <requested unit='KiB'>2097152</requested>
        <current unit='KiB'>0</current>
        <address base='0x280000000'/>
      </target>
      <alias name='virtiomem0'/>
      <address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
    </memory>
    <memory model='virtio-pmem' access='shared'>
      <source>
        <path>/tmp/virtio_pmem</path>
      </source>
      <target>
        <size unit='KiB'>2097152</size>
        <address base='0x480000000'/>
      </target>
      <alias name='virtiopmem0'/>
      <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/>
    </memory>

Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Lin Ma <lma@suse.de>
This commit is contained in:
Lin Ma 2023-07-11 08:26:50 +08:00 committed by Cole Robinson
parent 7a974a3a72
commit febddd4b01
4 changed files with 47 additions and 3 deletions

View File

@ -6,7 +6,7 @@
<libosinfo:os id="http://fedoraproject.org/fedora/unknown"/>
</libosinfo:libosinfo>
</metadata>
<maxMemory slots="3">2097152</maxMemory>
<maxMemory slots="3">4194304</maxMemory>
<vcpu>2</vcpu>
<os>
<type arch="x86_64" machine="q35">hvm</type>
@ -122,6 +122,24 @@
<readonly/>
</target>
</memory>
<memory model="virtio-mem">
<target>
<size>524288</size>
<node>0</node>
<block>2048</block>
<requested>524288</requested>
<address base="0x180000000"/>
</target>
</memory>
<memory model="virtio-pmem">
<source>
<path>/tmp/virtio_pmem</path>
</source>
<target>
<size>524288</size>
<address base="0x1a0000000"/>
</target>
</memory>
</devices>
<on_reboot>destroy</on_reboot>
</domain>
@ -133,7 +151,7 @@
<libosinfo:os id="http://fedoraproject.org/fedora/unknown"/>
</libosinfo:libosinfo>
</metadata>
<maxMemory slots="3">2097152</maxMemory>
<maxMemory slots="3">4194304</maxMemory>
<vcpu>2</vcpu>
<os>
<type arch="x86_64" machine="q35">hvm</type>
@ -248,5 +266,23 @@
<readonly/>
</target>
</memory>
<memory model="virtio-mem">
<target>
<size>524288</size>
<node>0</node>
<block>2048</block>
<requested>524288</requested>
<address base="0x180000000"/>
</target>
</memory>
<memory model="virtio-pmem">
<source>
<path>/tmp/virtio_pmem</path>
</source>
<target>
<size>524288</size>
<address base="0x1a0000000"/>
</target>
</memory>
</devices>
</domain>

View File

@ -898,7 +898,7 @@ c.add_compare(""
# --memdev setup has a lot of interconnected validation, it's easier to keep this separate
c.add_compare("--pxe "
"--memory hotplugmemorymax=2048,hotplugmemoryslots=3 "
"--memory hotplugmemorymax=4096,hotplugmemoryslots=3 "
"--cpu cell0.cpus=0,cell0.memory=1048576 "
"--memdev dimm,access=private,target_size=256,target_node=0,"
@ -912,6 +912,12 @@ c.add_compare("--pxe "
"address.type=dimm,address.base=0x100000000,address.slot=1,"
"source.pmem=on,source.alignsize=2048,target.readonly=on "
"--memdev virtio-mem,target_node=0,target.block=2048,"
"target_size=512,target.requested=524288,target.address_base=0x180000000 "
"--memdev virtio-pmem,source.path=/tmp/virtio_pmem,"
"target_size=512,target.address_base=0x1a0000000 "
"", "memory-hotplug", precompare_check="5.3.0")

View File

@ -4366,6 +4366,7 @@ class ParserMemdev(VirtCLIParser):
cls.add_arg("target.current", "target.current")
cls.add_arg("target.requested", "target.requested")
cls.add_arg("target.readonly", "target.readonly", is_onoff=True)
cls.add_arg("target.address_base", "target.address_base")
cls.add_arg("source.pagesize", "source.pagesize")
cls.add_arg("source.path", "source.path")
cls.add_arg("source.nodemask", "source.nodemask", can_comma=True)

View File

@ -19,6 +19,7 @@ class _DeviceMemoryTarget(XMLBuilder):
block = XMLProperty("./block", is_int=True)
requested = XMLProperty("./requested", is_int=True)
current = XMLProperty("./current", is_int=True)
address_base = XMLProperty("./address/@base")
class _DeviceMemorySource(XMLBuilder):