...
<devices>
<video>
- <model type='vga' vram='8192' heads='1'>
+ <model type='vga' vram='16384' heads='1'>
<acceleration accel3d='yes' accel2d='yes'/>
</model>
</video>
<dl>
<dt><code>video</code></dt>
<dd>
- The <code>video</code> element is the container for describing
- video devices. For backwards compatibility, if no <code>video</code>
- is set but there is a <code>graphics</code> in domain xml, then libvirt
- will add a default <code>video</code> according to the guest type.
- For a guest of type "kvm", the default <code>video</code> for it is:
- <code>type</code> with value "cirrus", <code>vram</code> with value
- "9216", and <code>heads</code> with value "1". By default, the first
- video device in domain xml is the primary one, but the optional
- attribute <code>primary</code> (<span class="since">since 1.0.2</span>)
- with value 'yes' can be used to mark the primary in cases of multiple
- video device. The non-primary must be type of "qxl". The optional
- attribute <code>ram</code> (<span class="since">since
- 1.0.2</span>) is allowed for "qxl" type only and specifies
- the size of the primary bar, while <code>vram</code> specifies the
- secondary bar size. If "ram" or "vram" are not supplied a default
- value is used.
+ <p>
+ The <code>video</code> element is the container for describing
+ video devices. For backwards compatibility, if no <code>video</code>
+ is set but there is a <code>graphics</code> in domain xml, then
+ libvirt will add a default <code>video</code> according to the guest
+ type.
+ </p>
+ <p>
+ For a guest of type "kvm", the default <code>video</code> is:
+ <code>type</code> with value "cirrus", <code>vram</code> with value
+ "16384" and <code>heads</code> with value "1". By default, the first
+ video device in domain xml is the primary one, but the optional
+ attribute <code>primary</code> (<span class="since">since 1.0.2</span>)
+ with value 'yes' can be used to mark the primary in cases of multiple
+ video device. The non-primary must be type of "qxl".
+ </p>
</dd>
<dt><code>model</code></dt>
<dd>
- The <code>model</code> element has a mandatory <code>type</code>
- attribute which takes the value "vga", "cirrus", "vmvga", "xen",
- "vbox", or "qxl" (<span class="since">since 0.8.6</span>)
- depending on the hypervisor features available.
- You can also provide the amount of video memory in kibibytes
- (blocks of 1024 bytes) using
- <code>vram</code> and the number of screen with <code>heads</code>.
+ <p>
+ The <code>model</code> element has a mandatory <code>type</code>
+ attribute which takes the value "vga", "cirrus", "vmvga", "xen",
+ "vbox", or "qxl" (<span class="since">since 0.8.6</span>) depending
+ on the hypervisor features available.
+ </p>
+ <p>
+ You can provide the amount of video memory in kibibytes (blocks of
+ 1024 bytes) using <code>vram</code>. This is supported only for guest
+ type of "libxl", "parallels", "qemu", "vbox", "vmx" and "xen". If no
+ value is provided the default is used. If the size is not a power of
+ two it will be rounded to closest one.
+ </p>
+ <p>
+ The number of screen can be set using <code>heads</code>. This is
+ supported only for guests type of "parallels", "kvm", "vbox" and "vmx".
+ </p>
+ <p>
+ For guest type of kvm the optional attribute <code>ram</code>
+ (<span class="since">since 1.0.2</span>) is allowed for "qxl" type
+ only and specifies the size of the primary bar, while the optional
+ attribute <code>vram</code> specifies the secondary bar size.
+ If "ram" or "vram" are not supplied a default value is used. The ram
+ should also be rounded to power of two as vram.
+ </p>
</dd>
<dt><code>acceleration</code></dt>
}
}
+ if (dev->type == VIR_DOMAIN_DEVICE_VIDEO) {
+ virDomainVideoDefPtr video = dev->data.video;
+ video->ram = VIR_ROUND_UP_POWER_OF_TWO(video->ram);
+ video->vram = VIR_ROUND_UP_POWER_OF_TWO(video->vram);
+ }
+
return 0;
}
goto cleanup;
}
-int
+unsigned int
virDomainVideoDefaultRAM(const virDomainDef *def,
- int type)
+ const virDomainVideoType type)
{
/* Defer setting default vram to the Xen drivers */
if (def->virtType == VIR_DOMAIN_VIRT_XEN)
return 0;
switch (type) {
- /* Weird, QEMU defaults to 9 MB ??! */
case VIR_DOMAIN_VIDEO_TYPE_VGA:
case VIR_DOMAIN_VIDEO_TYPE_CIRRUS:
case VIR_DOMAIN_VIDEO_TYPE_VMVGA:
else if (def->virtType == VIR_DOMAIN_VIRT_VMWARE)
return 4 * 1024;
else
- return 9 * 1024;
+ return 16 * 1024;
break;
case VIR_DOMAIN_VIDEO_TYPE_XEN:
if (vram) {
if (virStrToLong_ui(vram, NULL, 10, &def->vram) < 0) {
virReportError(VIR_ERR_XML_ERROR,
- _("cannot parse video ram '%s'"), vram);
+ _("cannot parse video vram '%s'"), vram);
goto error;
}
} else {
virDomainFSDefPtr virDomainFSRemove(virDomainDefPtr def, size_t i);
int virDomainVideoDefaultType(const virDomainDef *def);
-int virDomainVideoDefaultRAM(const virDomainDef *def, int type);
+unsigned int virDomainVideoDefaultRAM(const virDomainDef *def,
+ const virDomainVideoType type);
int virDomainObjListNumOfDomains(virDomainObjListPtr doms,
bool active,
goto error;
}
- /* QEMU accepts bytes for ram_size. */
- virBufferAsprintf(&buf, ",ram_size=%u", video->ram * 1024);
+ if (video->ram) {
+ /* QEMU accepts bytes for ram_size. */
+ virBufferAsprintf(&buf, ",ram_size=%u", video->ram * 1024);
+ }
- /* QEMU accepts bytes for vram_size. */
- virBufferAsprintf(&buf, ",vram_size=%u", video->vram * 1024);
+ if (video->vram) {
+ /* QEMU accepts bytes for vram_size. */
+ virBufferAsprintf(&buf, ",vram_size=%u", video->vram * 1024);
+ }
}
if (qemuBuildDeviceAddressStr(&buf, def, &video->info, qemuCaps) < 0)
virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) {
const char *dev = (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL_VGA)
? "qxl-vga" : "qxl");
- int ram = def->videos[0]->ram;
- int vram = def->videos[0]->vram;
+ unsigned int ram = def->videos[0]->ram;
+ unsigned int vram = def->videos[0]->vram;
if (vram > (UINT_MAX / 1024)) {
virReportError(VIR_ERR_OVERFLOW,
case VIR_DOMAIN_VIDEO_TYPE_VGA:
case VIR_DOMAIN_VIDEO_TYPE_CIRRUS:
case VIR_DOMAIN_VIDEO_TYPE_VMVGA:
- dev->data.video->vram = 9 * 1024;
+ dev->data.video->vram = 16 * 1024;
break;
case VIR_DOMAIN_VIDEO_TYPE_XEN:
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<hostdev mode='subsystem' type='usb' managed='yes'>
<listen type='network' network='Bobsnetwork'/>
</graphics>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='virtio'/>
</devices>
<listen type='network' network='Bobsnetwork'/>
</graphics>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='virtio'/>
</devices>
<input type='keyboard' bus='ps2'/>
<graphics type='sdl' display=':0.1' xauth='/root/.Xauthority' fullscreen='yes'/>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
<input type='keyboard' bus='ps2'/>
<graphics type='sdl' display=':0.1' xauth='/root/.Xauthority'/>
<video>
- <model type='vga' vram='9216' heads='1'/>
+ <model type='vga' vram='16384' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
<address type='virtio-serial' controller='1' bus='0' port='3'/>
</channel>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='virtio'/>
</devices>
image-compression=auto_glz,jpeg-wan-compression=auto,\
zlib-glz-wan-compression=auto,\
playback-compression=on,streaming-video=filter -vga \
-qxl -global qxl.ram_size=67108864 -global qxl.vram_size=18874368 \
+qxl -global qxl.ram_size=67108864 -global qxl.vram_size=33554432 \
-device qxl,id=video1,ram_size=67108864,vram_size=33554432,bus=pci.0,addr=0x4 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
<streaming mode='filter'/>
</graphics>
<video>
- <model type='qxl' ram='65536' vram='18432' heads='1'/>
+ <model type='qxl' ram='65536' vram='32768' heads='1'/>
</video>
<video>
<model type='qxl' ram='65536' vram='32768' heads='1'/>
-spice port=5903,tls-port=5904,sasl,addr=127.0.0.1,\
x509-dir=/etc/pki/libvirt-spice,tls-channel=default \
-vga qxl -global qxl.ram_size=67108864 -global \
-qxl.vram_size=18874368 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
+qxl.vram_size=33554432 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
<listen type='address' address='127.0.0.1'/>
</graphics>
<video>
- <model type='qxl' ram='65536' vram='18432' heads='1'/>
+ <model type='qxl' ram='65536' vram='32768' heads='1'/>
</video>
<memballoon model='virtio'/>
</devices>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</sound>
<video>
- <model type='vga' vram='9216' heads='1'/>
+ <model type='vga' vram='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
zlib-glz-wan-compression=auto,\
playback-compression=on,streaming-video=filter,disable-copy-paste,\
disable-agent-file-xfer -vga qxl -global qxl.ram_size=67108864 \
--global qxl.vram_size=18874368 \
+-global qxl.vram_size=33554432 \
-device qxl,id=video1,ram_size=67108864,vram_size=33554432,bus=pci.0,addr=0x4 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
<filetransfer enable='no'/>
</graphics>
<video>
- <model type='qxl' ram='65536' vram='18432' heads='1'/>
+ <model type='qxl' ram='65536' vram='32768' heads='1'/>
</video>
<video>
<model type='qxl' ram='65536' vram='32768' heads='1'/>
<listen type='address' address='127.0.0.1'/>
</graphics>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
<listen type='address' address='127.0.0.1'/>
</graphics>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' socket='/tmp/foo.socket'/>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
<listen type='address' address='127.0.0.1'/>
</graphics>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
<listen type='address' address='127.0.0.1'/>
</graphics>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
<listen type='address' address='2001:1:2:3:4:5:1234:1234'/>
</graphics>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</sound>
<video>
- <model type='vga' vram='9216' heads='1'/>
+ <model type='vga' vram='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
</controller>
<input type='mouse' bus='ps2'/>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<controller type='pci' index='8' model='pci-bridge'/>
<input type='mouse' bus='ps2'/>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<listen type='address' address='127.0.0.1'/>
</graphics>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x1 \
-drive file=/dev/HostVG/QEMUGuest1,if=none,id=drive-sata0-0-0 \
-device ide-drive,bus=ide.0,drive=drive-sata0-0-0,id=sata0-0-0 \
--vga qxl -global qxl.ram_size=67108864 -global qxl.vram_size=18874368
+-vga qxl -global qxl.ram_size=67108864 -global qxl.vram_size=33554432
<controller type='pci' index='2' model='pci-bridge'/>
<controller type='sata' index='0'/>
<video>
- <model type='qxl' ram='65536' vram='18432' heads='1'/>
+ <model type='qxl' ram='65536' vram='32768' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
<input type='mouse' bus='usb'/>
<graphics type='sdl'/>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x1 \
-drive file=/dev/HostVG/QEMUGuest1,if=none,id=drive-sata0-0-0 \
-device ide-drive,bus=ide.0,drive=drive-sata0-0-0,id=sata0-0-0 \
--vga qxl -global qxl.ram_size=67108864 -global qxl.vram_size=18874368
+-vga qxl -global qxl.ram_size=67108864 -global qxl.vram_size=33554432
<controller type='pci' index='1' model='dmi-to-pci-bridge'/>
<controller type='pci' index='2' model='pci-bridge'/>
<video>
- <model type='qxl' ram='65536' vram='18432' heads='1'/>
+ <model type='qxl' ram='65536' vram='32768' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
-device usb-tablet,id=input0 \
-spice port=5903,tls-port=5904,addr=127.0.0.1,x509-dir=/etc/pki/libvirt-spice \
-device \
-qxl-vga,id=video0,ram_size=67107840,vram_size=67107840,bus=pci.0,addr=0x2 \
+qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,bus=pci.0,addr=0x2 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
<listen type='address' address='127.0.0.1'/>
</graphics>
<video>
- <model type='qxl' ram='65535' vram='65535' heads='1'/>
+ <model type='qxl' ram='65536' vram='65536' heads='1'/>
</video>
<memballoon model='virtio'/>
</devices>
<listen type='network' network='Bobsnetwork'/>
</graphics>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
<memballoon model='virtio'/>
</devices>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</sound>
<video>
- <model type='vga' vram='9216' heads='1'/>
+ <model type='vga' vram='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<controller type='pci' index='8' model='pci-bridge'/>
<controller type='pci' index='0' model='pci-root'/>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<controller type='pci' index='2' model='pci-bridge'/>
<controller type='sata' index='0'/>
<video>
- <model type='qxl' ram='65536' vram='18432' heads='1'/>
+ <model type='qxl' ram='65536' vram='32768' heads='1'/>
</video>
<memballoon model='none'/>
</devices>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'/>
<video>
- <model type='cirrus' vram='9216' heads='1'/>
+ <model type='cirrus' vram='16384' heads='1'/>
</video>
</devices>
</domain>