vdev shmem

Provide an inter-guest system shared memory device

Synopsis:

vdev shmem options

Options:

allow fnpattern
Allow the guest to create or attach to any shared memory region whose name matches the pattern specified by fnpattern.
You can repeat this option multiple times to specify whatever name patterns you need to manage the guest's access to shared memory regions.
create name,size
Pre-create a shared memory object named name of size bytes.
You can repeat the create option multiple times to pre-create multiple shared memory regions.
deny fnpattern
Deny the guest access to any shared memory region whose name matches the pattern specified by fnpattern.
You can repeat this option multiple times to specify whatever name patterns you need to manage the guest's access to shared memory regions.
intr intr
If the loc option is specified, you must also specify the value of intr; this sets the guest interrupt that is generated when another guest sends a notification of an update to shared memory.
loc addr
The base address of the factory page for the vdev. If addr isn't specified, the vdev appears as a PCI device, and the qvm process automatically assigns the factory page location and adds this location to the PCI BAR register.
If you specify this option, you must also specify the intr option (see above).
sched priority
Use the priority specified by priority for pulses indicating that input is available.
subst [match],prefix
Specify a prefix to add to shared memory region names (see Using the subst option below).
match
The character string in the shared memory region name to substitute, if found, by the character string specified by prefix.
prefix
The character string to substitute for the character string specified by match, or to simply prefix to the shared region name if match isn't specified.

For a list of options available to all vdevs, see Common vdev options at the beginning of this chapter.

Description:

ARM and x86. Normally this device appears as a PCI device, but if the loc and intr options are specified, the guest will see it as a memory-mapped I/O (MMIO) device at the specified location.

Restrictions list

You can use the allow and deny options to establish a list of shared memory regions the guest may and may not access.

The fnpattern argument for these options can use wildcards, with the same syntax as shell file name expansion. For example, specifying allow test* will allow the guest to create or attach to any shared memory region whose name begins with test. Similarly, deny live* will forbid the guest access to any shared memory region whose name begins with live.

If you use the allow option, the configuration will include an implicit deny* check at the end of the restrictions list. The guest will be denied access to all shared memory regions not specified by allow options. For example:

vdev shmem
	allow test*
	allow pluto

allows the guest to create or attach to any shared memory region whose name begins with test, as well as to the shared memory region called pluto. The guest is denied access to all other shared memory regions.

Conversely:

vdev shmem
	deny live*
	deny pluto

denies the guest access to any shared memory region whose name begins with live, as well as to the shared memory called pluto. The guest is allowed to attach to any other shared memory region, however.

Finally, you can use the allow and deny options together to specify exactly which shared memory regions a guest may or may not access. For example:

vdev shmem
	deny pluto
	allow pluto*

denies the guest access to a shared memory region called pluto, but allows it to connect to other shared memory regions whose names begin with pluto (e.g., plutoplanet).

Note: If you use the command line to enter vdev shmem configuration information that includes allow or deny options with wildcard entries for fnpattern, use the “\” escape character before the asterisk to get the instruction through the shell (e.g., vdev shmem allow test\*).

For more information about using the shared memory vdev, see Memory sharing in the “Using a QNX Hypervisor System” chapter.

Using the subst option

You can use the subst option to present the host with different names for shared memory regions for each guest, while presenting the same name to each guest so you can use the same executables in the different guests. For example, each guest might see a shared memory region called “foomem”, but the host would see these regions as “guest0mem”, “guest1mem”, etc.

The following VM configurations would produce the result presented above by substituting guest* for foo:

VM 0
vdev shmem
    subst foo,guest0
    create foomem,0xf0000
    ...
VM 1
vdev shmem
    subst foo,guest1
    ...

An equivalent result could be achieved by simply adding the guest* prefix, as follows:

VM 0
vdev shmem
    subst ,guest0
    create mem,0xf0000
    ...
VM 1
vdev shmem
    subst ,guest1
    ...
Note:
  • Only one instance of the subst option may be specified per shmem vdev.
  • If you want the subst option to affect the name specified by a create option, you must place the subst before the create.
  • The length of the memory region name (name + prefix) must not exceed the value of GUEST_SHM_MAX_NAME (see Virtual registers (guest_shm.h) in the Using a QNX Hypervisor System chapter).