Set the value of the user-specified variable
Options:
The set option supports the following variables types:
- address – use any of the forms permitted for memory sizes
when you specify val (e.g., 4K, 0d16384 (see About notation in the
Configuration chapter))
- boolean – any of the following values are equivalent; the
first term turns on the feature, the second turns it off:
1/0,
yes/no,
on/off,
true/false
- number – any positive integer that can be expressed with
64-bits; decimal notation (no prefix) and hexadecimal notation (prefixed with
0x) are permitted
- string – a text string, used as is
Common arguments
The following arguments are supported on both ARM and x86 platforms:
- exit-on-halt
- Context: guest – applies to the current context only
- Variable type: boolean
- Default: on (guest exits on WFI or HLT instruction)
- Control if a WFI or HLT instruction causes a guest exit.
- grow-heap
- Context: global – applies to the entire qvm
process instance
- Variable type: address
- Default: don't grow the heap
Grow the heap by the amount specified by val. For
example:
set grow-heap 0x4000
will increase the heap by 16384 bytes.
- message-block-timeout
-
- Context: global – applies to the entire qvm
process instance
- Variable type: number
- Default: 10000 milliseconds (10 seconds)
Set the maximum allowed time, in milliseconds, that a message from the
qvm process may be blocked before the service
sends an unblock pulse to the receiving server. For example:
set message-block-timeout 200
configures the qvm process to send an unblock pulse to
any server that doesn't respond to a message within 200
milliseconds.
- The set
message-block-timeout variable must be a value from 5
through 10000, or 0 (zero). A 0 makes the timeout infinite (never time
out).
- Depending on the server's response (or non-response), the
qvm service may terminate with an error. You can use
server-monitor to handle situations where a server
doesn't respond to an unblock pulse (see server-monitor in
the QNX Neutrino Utilities Reference).
- slog-buffer
-
- Context: global – applies to the entire qvm
process instance
- Variable type: address
- Default: 4K
- If entries to the slog require more space than is allocated for the slog
buffer, older entries are dropped to make room for new entries. Use the
set option's slog-buffer argument to
change the buffer size from the default 4K; for example: set
slog-buffer 8K.
Note that:
- The buffer size must be a multiple of 4K (e.g., 8K, 12K).
- This option must be specifed before the logger option in the
VM configuration.
- vdev-message-block-timeout
-
- Context: vdev – applies to the vdev currently being
configured
- Variable type: number
- Default: value specified by
message-block-timeout
- The vdev-message-block-timeout argument functions exactly
like the message-block-timeout option, but applies
only to the vdev currently being configured. If the
vdev-message-block-timeout argument isn't used in a
vdev's configuration, the value specifed by
message-block-timeout is assumed.
ARM arguments
The following arguments are supported on ARM platforms only:
- gic-hwassist
- Context: global – applies to the entire qvm
process instance
- Variable type: boolean
- Default: true
- If gic-hwassist is set to true (default), the
qvm process instance will try to use the GIC hardware
assistance support. If this argument is set to false, the
qvm process instance won't try to use the GIC
hardware assistance.
- host-paddr-gicd
-
- Context: global – applies to the entire qvm
process instance
- Variable type: address
- Default: the gicd entry in the system page
asinfo section
- Set the host-physical address of the GIC distributor registers.
- host-paddr-gich
-
- Context: global – applies to the entire qvm
process instance
- Variable type: string
- Default: the gich[.cpunum] entry
in the host's system page asinfo section
Set the host-physical addresses of the GIC hypervisor control registers.
The string should be formed as follows:
host_address[/cpu/spacing]{,host_address[/cpu/spacing]}
-
- host_address
- The host-physical address of the current physical CPU's GICH
registers.
- cpu
- If present, the number of the physical CPU whose registers are
located at the address specified by
host_address.
- spacing
- If present, the number of bytes to increase the offset to get
the address of each subsequent physical CPU's registers.
- host-paddr-gicr
-
- Context: global – applies to the entire qvm
process instance
- Variable type: address
- Default: the gicr entry in the host's system page
asinfo section
- Set the host-physical address of the GIC re-distributor registers.
- host-paddr-gicv
-
- Context: global – applies to the entire qvm
process instance
- Variable type: address
- Default: the gicv entry in the host's system page
asinfo section
- Set the host-physical address of the GIC virtual CPU interface
registers.
- host-ppi-gic-hwassist
-
- Context: global – applies to the entire qvm
process instance
- Variable type: number
- Default: 25
- Set the host interrupt number for the GIC hardware assist maintenance
interrupt.
- host-ppi-hcnt
-
- Context: global – applies to the entire qvm
process instance
- Variable type: number
- Default: 26
- Set the host interrupt number for the hypervisor counter interrupt.
- host-ppi-vcnt
-
- Context: global – applies to the entire qvm
process instance
- Variable type: number
- Default: 27
- Set the host interrupt number for the virtual counter hardware.
- trace-psci
-
- Context: global – applies to the entire qvm
process instance
- Variable type: boolean
- Default: false
- Some optimizations to the guest exit mechanisms will cause some guest PSCI
requests to not appear in a host trace log. Setting
trace-psci to true disables the optimizations,
allowing the omitted guest PSCI requests to appear in the host trace
log.
- trace-spectre-workaround
-
- Context: global – applies to the entire qvm
process instance
- Variable type: boolean
- Default: false
- Some optimizations to the guest exit mechanisms will cause some guest
spectre errata workaround requests to not appear in a host trace log.
Setting trace-spectre-workaround to true disables
the optimizations, allowing the omitted guest trace-spectre-workaround
requests to appear in the host trace log.
- trace-vtimer
-
- Context: global – applies to the entire qvm
process instance
- Variable type: boolean
- Default: false
- Some optimizations to the guest exit mechanisms will cause some guest
virtual timer interrupt deliveries to not appear in a host trace log.
Setting trace-vtimer to true disables the
optimizations, allowing the omitted guest virtual timer interrupt deliveries
to appear in the host trace log.
- trace-wfe
-
- Context: global – applies to the entire qvm
process instance
- Variable type: boolean
- Default: off
- Some optimizations to the guest exit mechanisms will cause some guest
executions of a WFE instruction to not appear in a host trace log. Setting
trace-wfe to true disables the optimizations,
allowing the omitted guest executions of a WFE instruction to appear in the
host trace log.
x86 arguments
The following arguments are supported on x86 platforms only:
- legacy-free
-
- Context: guest – applies to the current context only
- Variable type: boolean
- Default: off – don't permit arbitrary memory layout (i.e.,
require ACPI tables, etc.)
- The set option's legacy-free argument
can be used to assemble a VM that hosts an x86 guest with an arbitrary
memory layout. Most notably, with legacy-free set to
on the VM can be assembled for a guest that doesn't require
memory in the BIOS area (where the ACPI and SMBIOS tables are stored).
- If you use the set option's legacy-free
argument you should also use the suppress option to
suppress generation of the ACPI system information table for the x86 guest
(see suppress in this chapter).
- posted-interrupts
-
- Context: guest – applies to the current context only
- Variable type: boolean
- Default: on
- If posted-interrupts is set to on (default), the
qvm process instance will try to use the hardware's
posted interrupt support, if such support is available. If this argument is
set to off, the qvm process instance won't try to
use the hardware's posted interrupt support.
- virtual-interrupts
-
- Context: guest – applies to the current context only
- Variable type: boolean
- Default: on
- If virtual-interrupts is set to on (default), the
qvm process instance will try to use the hardware's
virtual interrupt support, if such support is available. If this argument is
set to off, the qvm process instance won't try to
use the hardware's virtual interrupt support.
Description:
Each set argument (or variable) applies to an implicit context.
These contexts are noted in the descriptions for each argument. Supported contexts
include:
- global – applies to the VM (qvm process instance
currently being configured)
- guest – applies to the context currently being configured (see Contexts in the Assembling and configuring VMs chapter)
- cpu – applies to the vCPU currently being configured
- vdev – applies to the vdev currently being configured
You can display currently permitted variables and their contexts. For example, from a
shell prompt in the host, type:
# qvm set ?
You should see the currently permitted variables in a listing like the following:
allowed set variables
grow-heap (address, global)
legacy-free (boolean, guest)
message-block-timeout (number, global)
posted-interrupts (boolean, guest)
virtual-interrupts (boolean, guest)
Note:
A question mark (?) is a shell wildcard character, so you may
need to escape it.
If a vdev defines its own user-specified variables, ? will list
these only after a vdev option has loaded the vdev where these
variables are specified.
About the set
host-* arguments
The set
host-* arguments separate the configuration of the host system
from the configuration of the VMs. You can have a single configuration file that
provides all the host-specific configuration that can be re-used for multiple
VMs.
For example, for a fictious foo SoC, your can create a
foo.qvmconf file that includes:
set host-ppi-hcnt 16
set host-ppi-vcnt 19
set host-ppi-gic-hwassist 24
set host-paddr-gich 0x0ac01000
which you re-use for all your VMs, in addition to the VM-specific configuration
files. For example:
qvm @guest1.qvmconf @foo.qvmconf
qvm @guest2.qvmconf @foo.qvmconf
Note: Note that for each VM the VM-specific configuration file
(
guest*.qvmconf) appears before the common configuration
file. The VM-specific configuration files are likely to start with the
system option, which if it appears must be the first option
specified for a VM configuration (see
system in this
chapter).
Example of set
host-paddr-gic* configuration
Below is an example of how the set option's
host-paddr-gic* arguments are used for a Renesas R-Car H3
board:
set host-paddr-gicv 0xf1060000
set host-paddr-gich 0xf1040000,0xf1050000/0/0x200
where host-paddr-gicv 0xf1060000 specifies the host-physical address
of the GIC virtual CPU registers, and host-paddr-gich specifies the
location of the hypervisor control (GICH) registers:
- host-paddr-gich 0xf1040000,0xf1050000/0/0x200 –
the host-physical address of the GICH registers that the hardware's
virtualization assistance allocates to the current physical CPU
- host-paddr-gich 0xf1040000,0xf1050000/0/0x200 –
the host-physical address of physical CPU 0's GICH registers
- host-paddr-gich 0xf1040000,0xf1050000/0/0x200 –
the CPU number whose GICH registers are at 0xf1050000, in this
case CPU 0
- host-paddr-gich 0xf1040000,0xf1050000/0/0x200 –
the spacing between the physical CPU registers. With CPU 0 at
0xf1050000 and a spacing of 0x200 as in
this example, the host-physical address to access the registers for physical CPU
1 is 0xf1050200, the address to access the registers for
physical CPU 2 is 0xf1050400, and so on.
Note: Other boards might use different values. Check your board manufacturer's
documentation.