set

Set the value of the user-specified variable

Synopsis:

set var val

Options:

The set option supports the following variables types:

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.
Note: For more information about the host-* arguments, see About the set host-* arguments below.

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:

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:

Note: Other boards might use different values. Check your board manufacturer's documentation.