target-arm queue:
* incorporate 'orphan' rST docs into manuals * linux-user/arm: Deliver SIGTRAP for UDF patterns used as breakpoints * target/arm: Make SYS_HEAPINFO work with RAM that doesn't start at 0 * document raspi boards and tosa * docs/system: Deprecate raspi2/raspi3 machine aliases * docs/system/arm: Document OpenPOWER Witherspoon BMC model Front LEDs * MAINTAINERS: add lines for docs files for Arm boards * hw/intc: fix heap-buffer-overflow in rxicu_realize() * hw/arm: Fix bad print format specifiers * target/arm: fix stage 2 page-walks in 32-bit emulation -----BEGIN PGP SIGNATURE----- iQJNBAABCAA3FiEE4aXFk81BneKOgxXPPCUl7RQ2DN4FAl+7oAoZHHBldGVyLm1h eWRlbGxAbGluYXJvLm9yZwAKCRA8JSXtFDYM3ro1D/0fpKWY+ysjrn+ZDpTUSKFp 06/fyxCrIIWcqFGOeDKWCJXlXgmbMozjDZc9dYn0qR04Sj9DQvJNEgJq+cozt8+M Bkc1khc/3Tve1dfa45F5fg+rYIPsIaquIg2sE1EjHW9VFaUCgj/AZpcU0Gkvp0Fa ezdpzxh0SY5m8vOwQlDHqJaaIjgKB2Tpnx/cGCbtZlYU8J1hRCBvdailSPhDahk7 Y27K7snUezwN3LXdw3KS7yV5hiRtDdRo0soHLltfZOpIOuKtRkmlN9OhAgolXlgK 3lkIN2UFtOVIPizp7tB/aJ8AKYZlrAnDxDs3c7QwTiWANLEFSEiDpjBkGMTzHq3f DCOLx1UtbwSlxCbDcVkFPVDJ9Sh9+RaBNpYAtm2pbw7zR4NoeZzpJE00HIlLjokK juqRu6gCry1PwZ4RpGfpjMvNDU6YCYaVcF9KpeavzplYBEY9gNQZAc1udRdWx1iA 7tWpdq5U3BC1gIovsVWqTgWqMqrMPhqJ9+/EhEGbe3pucgezZ+B5vBecgoXPXKfN KM5OkHiIXnYgPelfrYgoQr26F4NdgP7ANqjA0cfYEZgfmFQxYMIavQR35QHViu7t GJRVGKig9g55Qvwuhr1oupKM85vYn5wJVK15GXcygNeOLLaAm4S8LZx4q5XxnFbj Cj9Vho2hMbxwWrvjTvD5dA== =yzKV -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20201123' into staging target-arm queue: * incorporate 'orphan' rST docs into manuals * linux-user/arm: Deliver SIGTRAP for UDF patterns used as breakpoints * target/arm: Make SYS_HEAPINFO work with RAM that doesn't start at 0 * document raspi boards and tosa * docs/system: Deprecate raspi2/raspi3 machine aliases * docs/system/arm: Document OpenPOWER Witherspoon BMC model Front LEDs * MAINTAINERS: add lines for docs files for Arm boards * hw/intc: fix heap-buffer-overflow in rxicu_realize() * hw/arm: Fix bad print format specifiers * target/arm: fix stage 2 page-walks in 32-bit emulation # gpg: Signature made Mon 23 Nov 2020 11:42:02 GMT # gpg: using RSA key E1A5C593CD419DE28E8315CF3C2525ED14360CDE # gpg: issuer "peter.maydell@linaro.org" # gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" [ultimate] # gpg: aka "Peter Maydell <pmaydell@gmail.com>" [ultimate] # gpg: aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>" [ultimate] # Primary key fingerprint: E1A5 C593 CD41 9DE2 8E83 15CF 3C25 25ED 1436 0CDE * remotes/pmaydell/tags/pull-target-arm-20201123: (24 commits) docs/system/pr-manager.rst: Fix minor docs nits docs: Split qemu-pr-helper documentation into tools manual docs: Move pr-manager.rst into the system manual docs: Move microvm.rst into the system manual docs: Split out 'pc' machine model docs into their own file docs/system/virtio-pmem.rst: Fix minor style issues docs: Move virtio-pmem.rst into the system manual docs: Move cpu-hotplug.rst into the system manual docs: Move virtio-net-failover.rst into the system manual linux-user/arm: Deliver SIGTRAP for UDF patterns used as breakpoints target/arm: Make SYS_HEAPINFO work with RAM that doesn't start at 0 docs/system/arm: Document the Sharp Zaurus SL-6000 docs/system/arm: Document OpenPOWER Witherspoon BMC model Front LEDs docs/system/arm: Document the various raspi boards docs/system: Deprecate raspi2/raspi3 machine aliases MAINTAINERS: Cover system/arm/sx1.rst with OMAP machines MAINTAINERS: Cover system/arm/sbsa.rst with SBSA-REF machine MAINTAINERS: Fix system/arm/orangepi.rst path MAINTAINERS: Cover system/arm/nuvoton.rst with Nuvoton NPCM7xx MAINTAINERS: Cover system/arm/aspeed.rst with ASPEED BMC machines ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
272fa7491f
@ -158,6 +158,7 @@ F: disas/arm.c
|
|||||||
F: disas/arm-a64.cc
|
F: disas/arm-a64.cc
|
||||||
F: disas/libvixl/
|
F: disas/libvixl/
|
||||||
F: docs/system/target-arm.rst
|
F: docs/system/target-arm.rst
|
||||||
|
F: docs/system/arm/cpu-features.rst
|
||||||
|
|
||||||
ARM SMMU
|
ARM SMMU
|
||||||
M: Eric Auger <eric.auger@redhat.com>
|
M: Eric Auger <eric.auger@redhat.com>
|
||||||
@ -558,7 +559,7 @@ S: Maintained
|
|||||||
F: hw/*/allwinner-h3*
|
F: hw/*/allwinner-h3*
|
||||||
F: include/hw/*/allwinner-h3*
|
F: include/hw/*/allwinner-h3*
|
||||||
F: hw/arm/orangepi.c
|
F: hw/arm/orangepi.c
|
||||||
F: docs/system/orangepi.rst
|
F: docs/system/arm/orangepi.rst
|
||||||
|
|
||||||
ARM PrimeCell and CMSDK devices
|
ARM PrimeCell and CMSDK devices
|
||||||
M: Peter Maydell <peter.maydell@linaro.org>
|
M: Peter Maydell <peter.maydell@linaro.org>
|
||||||
@ -762,6 +763,7 @@ F: include/hw/*/npcm7xx*
|
|||||||
F: tests/qtest/npcm7xx*
|
F: tests/qtest/npcm7xx*
|
||||||
F: pc-bios/npcm7xx_bootrom.bin
|
F: pc-bios/npcm7xx_bootrom.bin
|
||||||
F: roms/vbootrom
|
F: roms/vbootrom
|
||||||
|
F: docs/system/arm/nuvoton.rst
|
||||||
|
|
||||||
nSeries
|
nSeries
|
||||||
M: Andrzej Zaborowski <balrogg@gmail.com>
|
M: Andrzej Zaborowski <balrogg@gmail.com>
|
||||||
@ -801,6 +803,7 @@ F: hw/arm/raspi_platform.h
|
|||||||
F: hw/*/bcm283*
|
F: hw/*/bcm283*
|
||||||
F: include/hw/arm/raspi*
|
F: include/hw/arm/raspi*
|
||||||
F: include/hw/*/bcm283*
|
F: include/hw/*/bcm283*
|
||||||
|
F: docs/system/arm/raspi.rst
|
||||||
|
|
||||||
Real View
|
Real View
|
||||||
M: Peter Maydell <peter.maydell@linaro.org>
|
M: Peter Maydell <peter.maydell@linaro.org>
|
||||||
@ -855,6 +858,7 @@ R: Leif Lindholm <leif@nuviainc.com>
|
|||||||
L: qemu-arm@nongnu.org
|
L: qemu-arm@nongnu.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: hw/arm/sbsa-ref.c
|
F: hw/arm/sbsa-ref.c
|
||||||
|
F: docs/system/arm/sbsa.rst
|
||||||
|
|
||||||
Sharp SL-5500 (Collie) PDA
|
Sharp SL-5500 (Collie) PDA
|
||||||
M: Peter Maydell <peter.maydell@linaro.org>
|
M: Peter Maydell <peter.maydell@linaro.org>
|
||||||
@ -999,6 +1003,7 @@ F: include/hw/*/*aspeed*
|
|||||||
F: include/hw/misc/pca9552*.h
|
F: include/hw/misc/pca9552*.h
|
||||||
F: hw/net/ftgmac100.c
|
F: hw/net/ftgmac100.c
|
||||||
F: include/hw/net/ftgmac100.h
|
F: include/hw/net/ftgmac100.h
|
||||||
|
F: docs/system/arm/aspeed.rst
|
||||||
|
|
||||||
NRF51
|
NRF51
|
||||||
M: Joel Stanley <joel@jms.id.au>
|
M: Joel Stanley <joel@jms.id.au>
|
||||||
@ -1603,6 +1608,7 @@ L: qemu-arm@nongnu.org
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: hw/*/omap*
|
F: hw/*/omap*
|
||||||
F: include/hw/arm/omap.h
|
F: include/hw/arm/omap.h
|
||||||
|
F: docs/system/arm/sx1.rst
|
||||||
|
|
||||||
IPack
|
IPack
|
||||||
M: Alberto Garcia <berto@igalia.com>
|
M: Alberto Garcia <berto@igalia.com>
|
||||||
|
@ -60,6 +60,7 @@ if build_docs
|
|||||||
'tools': {
|
'tools': {
|
||||||
'qemu-img.1': (have_tools ? 'man1' : ''),
|
'qemu-img.1': (have_tools ? 'man1' : ''),
|
||||||
'qemu-nbd.8': (have_tools ? 'man8' : ''),
|
'qemu-nbd.8': (have_tools ? 'man8' : ''),
|
||||||
|
'qemu-pr-helper.8': (have_tools ? 'man8' : ''),
|
||||||
'qemu-trace-stap.1': (config_host.has_key('CONFIG_TRACE_SYSTEMTAP') ? 'man1' : ''),
|
'qemu-trace-stap.1': (config_host.has_key('CONFIG_TRACE_SYSTEMTAP') ? 'man1' : ''),
|
||||||
'virtfs-proxy-helper.1': (have_virtfs_proxy_helper ? 'man1' : ''),
|
'virtfs-proxy-helper.1': (have_virtfs_proxy_helper ? 'man1' : ''),
|
||||||
'virtiofsd.1': (have_virtiofsd ? 'man1' : ''),
|
'virtiofsd.1': (have_virtiofsd ? 'man1' : ''),
|
||||||
|
@ -47,6 +47,7 @@ Supported devices
|
|||||||
* GPIO Controller (Master only)
|
* GPIO Controller (Master only)
|
||||||
* UART
|
* UART
|
||||||
* Ethernet controllers
|
* Ethernet controllers
|
||||||
|
* Front LEDs (PCA9552 on I2C bus)
|
||||||
|
|
||||||
|
|
||||||
Missing devices
|
Missing devices
|
||||||
|
43
docs/system/arm/raspi.rst
Normal file
43
docs/system/arm/raspi.rst
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
Raspberry Pi boards (``raspi0``, ``raspi1ap``, ``raspi2b``, ``raspi3ap``, ``raspi3b``)
|
||||||
|
======================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
QEMU provides models of the following Raspberry Pi boards:
|
||||||
|
|
||||||
|
``raspi0`` and ``raspi1ap``
|
||||||
|
ARM1176JZF-S core, 512 MiB of RAM
|
||||||
|
``raspi2b``
|
||||||
|
Cortex-A7 (4 cores), 1 GiB of RAM
|
||||||
|
``raspi3ap``
|
||||||
|
Cortex-A53 (4 cores), 512 MiB of RAM
|
||||||
|
``raspi3b``
|
||||||
|
Cortex-A53 (4 cores), 1 GiB of RAM
|
||||||
|
|
||||||
|
|
||||||
|
Implemented devices
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* ARM1176JZF-S, Cortex-A7 or Cortex-A53 CPU
|
||||||
|
* Interrupt controller
|
||||||
|
* DMA controller
|
||||||
|
* Clock and reset controller (CPRMAN)
|
||||||
|
* System Timer
|
||||||
|
* GPIO controller
|
||||||
|
* Serial ports (BCM2835 AUX - 16550 based - and PL011)
|
||||||
|
* Random Number Generator (RNG)
|
||||||
|
* Frame Buffer
|
||||||
|
* USB host (USBH)
|
||||||
|
* GPIO controller
|
||||||
|
* SD/MMC host controller
|
||||||
|
* SoC thermal sensor
|
||||||
|
* USB2 host controller (DWC2 and MPHI)
|
||||||
|
* MailBox controller (MBOX)
|
||||||
|
* VideoCore firmware (property)
|
||||||
|
|
||||||
|
|
||||||
|
Missing devices
|
||||||
|
---------------
|
||||||
|
|
||||||
|
* Peripheral SPI controller (SPI)
|
||||||
|
* Analog to Digital Converter (ADC)
|
||||||
|
* Pulse Width Modulation (PWM)
|
@ -1,16 +1,22 @@
|
|||||||
Sharp XScale-based PDA models (``akita``, ``borzoi``, ``spitz``, ``terrier``)
|
Sharp XScale-based PDA models (``akita``, ``borzoi``, ``spitz``, ``terrier``, ``tosa``)
|
||||||
=============================================================================
|
=======================================================================================
|
||||||
|
|
||||||
The XScale-based clamshell PDA models (\"Spitz\", \"Akita\", \"Borzoi\"
|
The Sharp Zaurus are PDAs based on XScale, able to run Linux ('SL series').
|
||||||
and \"Terrier\") emulation includes the following peripherals:
|
|
||||||
|
|
||||||
- Intel PXA270 System-on-chip (ARMv5TE core)
|
The SL-6000 (\"Tosa\"), released in 2005, uses a PXA255 System-on-chip.
|
||||||
|
|
||||||
- NAND Flash memory
|
The SL-C3000 (\"Spitz\"), SL-C1000 (\"Akita\"), SL-C3100 (\"Borzoi\") and
|
||||||
|
SL-C3200 (\"Terrier\") use a PXA270.
|
||||||
|
|
||||||
|
The clamshell PDA models emulation includes the following peripherals:
|
||||||
|
|
||||||
|
- Intel PXA255/PXA270 System-on-chip (ARMv5TE core)
|
||||||
|
|
||||||
|
- NAND Flash memory - not in \"Tosa\"
|
||||||
|
|
||||||
- IBM/Hitachi DSCM microdrive in a PXA PCMCIA slot - not in \"Akita\"
|
- IBM/Hitachi DSCM microdrive in a PXA PCMCIA slot - not in \"Akita\"
|
||||||
|
|
||||||
- On-chip OHCI USB controller
|
- On-chip OHCI USB controller - not in \"Tosa\"
|
||||||
|
|
||||||
- On-chip LCD controller
|
- On-chip LCD controller
|
||||||
|
|
||||||
|
@ -346,6 +346,13 @@ This machine has been renamed ``fuloong2e``.
|
|||||||
These machine types are very old and likely can not be used for live migration
|
These machine types are very old and likely can not be used for live migration
|
||||||
from old QEMU versions anymore. A newer machine type should be used instead.
|
from old QEMU versions anymore. A newer machine type should be used instead.
|
||||||
|
|
||||||
|
Raspberry Pi ``raspi2`` and ``raspi3`` machines (since 5.2)
|
||||||
|
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
The Raspberry Pi machines come in various models (A, A+, B, B+). To be able
|
||||||
|
to distinguish which model QEMU is implementing, the ``raspi2`` and ``raspi3``
|
||||||
|
machines have been renamed ``raspi2b`` and ``raspi3b``.
|
||||||
|
|
||||||
Device options
|
Device options
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
====================
|
'microvm' virtual platform (``microvm``)
|
||||||
microvm Machine Type
|
========================================
|
||||||
====================
|
|
||||||
|
|
||||||
``microvm`` is a machine type inspired by ``Firecracker`` and
|
``microvm`` is a machine type inspired by ``Firecracker`` and
|
||||||
constructed after its machine model.
|
constructed after its machine model.
|
7
docs/system/i386/pc.rst
Normal file
7
docs/system/i386/pc.rst
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
i440fx PC (``pc-i440fx``, ``pc``)
|
||||||
|
=================================
|
||||||
|
|
||||||
|
Peripherals
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. include:: ../target-i386-desc.rst.inc
|
@ -21,6 +21,7 @@ Contents:
|
|||||||
monitor
|
monitor
|
||||||
images
|
images
|
||||||
net
|
net
|
||||||
|
virtio-net-failover
|
||||||
usb
|
usb
|
||||||
ivshmem
|
ivshmem
|
||||||
linuxboot
|
linuxboot
|
||||||
@ -28,6 +29,9 @@ Contents:
|
|||||||
tls
|
tls
|
||||||
gdb
|
gdb
|
||||||
managed-startup
|
managed-startup
|
||||||
|
cpu-hotplug
|
||||||
|
virtio-pmem
|
||||||
|
pr-manager
|
||||||
targets
|
targets
|
||||||
security
|
security
|
||||||
deprecated
|
deprecated
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
======================================
|
===============================
|
||||||
Persistent reservation managers
|
Persistent reservation managers
|
||||||
======================================
|
===============================
|
||||||
|
|
||||||
SCSI persistent Reservations allow restricting access to block devices
|
SCSI persistent reservations allow restricting access to block devices
|
||||||
to specific initiators in a shared storage setup. When implementing
|
to specific initiators in a shared storage setup. When implementing
|
||||||
clustering of virtual machines, it is a common requirement for virtual
|
clustering of virtual machines, it is a common requirement for virtual
|
||||||
machines to send persistent reservation SCSI commands. However,
|
machines to send persistent reservation SCSI commands. However,
|
||||||
@ -50,39 +50,11 @@ Alternatively, using ``-blockdev``::
|
|||||||
-blockdev node-name=hd,driver=raw,file.driver=host_device,file.filename=/dev/sdb,file.pr-manager=helper0
|
-blockdev node-name=hd,driver=raw,file.driver=host_device,file.filename=/dev/sdb,file.pr-manager=helper0
|
||||||
-device scsi-block,drive=hd
|
-device scsi-block,drive=hd
|
||||||
|
|
||||||
----------------------------------
|
You will also need to ensure that the helper program
|
||||||
Invoking :program:`qemu-pr-helper`
|
:command:`qemu-pr-helper` is running, and that it has been
|
||||||
----------------------------------
|
set up to use the same socket filename as your QEMU commandline
|
||||||
|
specifies. See the qemu-pr-helper documentation or manpage for
|
||||||
QEMU provides an implementation of the persistent reservation helper,
|
further details.
|
||||||
called :program:`qemu-pr-helper`. The helper should be started as a
|
|
||||||
system service and supports the following option:
|
|
||||||
|
|
||||||
-d, --daemon run in the background
|
|
||||||
-q, --quiet decrease verbosity
|
|
||||||
-v, --verbose increase verbosity
|
|
||||||
-f, --pidfile=path PID file when running as a daemon
|
|
||||||
-k, --socket=path path to the socket
|
|
||||||
-T, --trace=trace-opts tracing options
|
|
||||||
|
|
||||||
By default, the socket and PID file are placed in the runtime state
|
|
||||||
directory, for example :file:`/var/run/qemu-pr-helper.sock` and
|
|
||||||
:file:`/var/run/qemu-pr-helper.pid`. The PID file is not created
|
|
||||||
unless :option:`-d` is passed too.
|
|
||||||
|
|
||||||
:program:`qemu-pr-helper` can also use the systemd socket activation
|
|
||||||
protocol. In this case, the systemd socket unit should specify a
|
|
||||||
Unix stream socket, like this::
|
|
||||||
|
|
||||||
[Socket]
|
|
||||||
ListenStream=/var/run/qemu-pr-helper.sock
|
|
||||||
|
|
||||||
After connecting to the socket, :program:`qemu-pr-helper`` can optionally drop
|
|
||||||
root privileges, except for those capabilities that are needed for
|
|
||||||
its operation. To do this, add the following options:
|
|
||||||
|
|
||||||
-u, --user=user user to drop privileges to
|
|
||||||
-g, --group=group group to drop privileges to
|
|
||||||
|
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
Multipath devices and persistent reservations
|
Multipath devices and persistent reservations
|
@ -90,6 +90,7 @@ undocumented; you can get a complete list by running
|
|||||||
arm/nuvoton
|
arm/nuvoton
|
||||||
arm/orangepi
|
arm/orangepi
|
||||||
arm/palm
|
arm/palm
|
||||||
|
arm/raspi
|
||||||
arm/xscale
|
arm/xscale
|
||||||
arm/collie
|
arm/collie
|
||||||
arm/sx1
|
arm/sx1
|
||||||
|
@ -1,14 +1,23 @@
|
|||||||
.. _QEMU-PC-System-emulator:
|
.. _QEMU-PC-System-emulator:
|
||||||
|
|
||||||
x86 (PC) System emulator
|
x86 System emulator
|
||||||
------------------------
|
-------------------
|
||||||
|
|
||||||
.. _pcsys_005fdevices:
|
.. _pcsys_005fdevices:
|
||||||
|
|
||||||
Peripherals
|
Board-specific documentation
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. include:: target-i386-desc.rst.inc
|
..
|
||||||
|
This table of contents should be kept sorted alphabetically
|
||||||
|
by the title text of each file, which isn't the same ordering
|
||||||
|
as an alphabetical sort by filename.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
i386/microvm
|
||||||
|
i386/pc
|
||||||
|
|
||||||
.. include:: cpu-models-x86.rst.inc
|
.. include:: cpu-models-x86.rst.inc
|
||||||
|
|
||||||
|
76
docs/system/virtio-pmem.rst
Normal file
76
docs/system/virtio-pmem.rst
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
|
||||||
|
===========
|
||||||
|
virtio pmem
|
||||||
|
===========
|
||||||
|
|
||||||
|
This document explains the setup and usage of the virtio pmem device.
|
||||||
|
The virtio pmem device is a paravirtualized persistent memory device
|
||||||
|
on regular (i.e non-NVDIMM) storage.
|
||||||
|
|
||||||
|
Usecase
|
||||||
|
-------
|
||||||
|
|
||||||
|
Virtio pmem allows to bypass the guest page cache and directly use
|
||||||
|
host page cache. This reduces guest memory footprint as the host can
|
||||||
|
make efficient memory reclaim decisions under memory pressure.
|
||||||
|
|
||||||
|
How does virtio-pmem compare to the nvdimm emulation?
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
NVDIMM emulation on regular (i.e. non-NVDIMM) host storage does not
|
||||||
|
persist the guest writes as there are no defined semantics in the device
|
||||||
|
specification. The virtio pmem device provides guest write persistence
|
||||||
|
on non-NVDIMM host storage.
|
||||||
|
|
||||||
|
virtio pmem usage
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
A virtio pmem device backed by a memory-backend-file can be created on
|
||||||
|
the QEMU command line as in the following example::
|
||||||
|
|
||||||
|
-object memory-backend-file,id=mem1,share,mem-path=./virtio_pmem.img,size=4G
|
||||||
|
-device virtio-pmem-pci,memdev=mem1,id=nv1
|
||||||
|
|
||||||
|
where:
|
||||||
|
|
||||||
|
- "object memory-backend-file,id=mem1,share,mem-path=<image>, size=<image size>"
|
||||||
|
creates a backend file with the specified size.
|
||||||
|
|
||||||
|
- "device virtio-pmem-pci,id=nvdimm1,memdev=mem1" creates a virtio pmem
|
||||||
|
pci device whose storage is provided by above memory backend device.
|
||||||
|
|
||||||
|
Multiple virtio pmem devices can be created if multiple pairs of "-object"
|
||||||
|
and "-device" are provided.
|
||||||
|
|
||||||
|
Hotplug
|
||||||
|
-------
|
||||||
|
|
||||||
|
Virtio pmem devices can be hotplugged via the QEMU monitor. First, the
|
||||||
|
memory backing has to be added via 'object_add'; afterwards, the virtio
|
||||||
|
pmem device can be added via 'device_add'.
|
||||||
|
|
||||||
|
For example, the following commands add another 4GB virtio pmem device to
|
||||||
|
the guest::
|
||||||
|
|
||||||
|
(qemu) object_add memory-backend-file,id=mem2,share=on,mem-path=virtio_pmem2.img,size=4G
|
||||||
|
(qemu) device_add virtio-pmem-pci,id=virtio_pmem2,memdev=mem2
|
||||||
|
|
||||||
|
Guest Data Persistence
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Guest data persistence on non-NVDIMM requires guest userspace applications
|
||||||
|
to perform fsync/msync. This is different from a real nvdimm backend where
|
||||||
|
no additional fsync/msync is required. This is to persist guest writes in
|
||||||
|
host backing file which otherwise remains in host page cache and there is
|
||||||
|
risk of losing the data in case of power failure.
|
||||||
|
|
||||||
|
With virtio pmem device, MAP_SYNC mmap flag is not supported. This provides
|
||||||
|
a hint to application to perform fsync for write persistence.
|
||||||
|
|
||||||
|
Limitations
|
||||||
|
-----------
|
||||||
|
|
||||||
|
- Real nvdimm device backend is not supported.
|
||||||
|
- virtio pmem hotunplug is not supported.
|
||||||
|
- ACPI NVDIMM features like regions/namespaces are not supported.
|
||||||
|
- ndctl command is not supported.
|
@ -22,6 +22,8 @@ man_pages = [
|
|||||||
['Fabrice Bellard'], 1),
|
['Fabrice Bellard'], 1),
|
||||||
('qemu-nbd', 'qemu-nbd', u'QEMU Disk Network Block Device Server',
|
('qemu-nbd', 'qemu-nbd', u'QEMU Disk Network Block Device Server',
|
||||||
['Anthony Liguori <anthony@codemonkey.ws>'], 8),
|
['Anthony Liguori <anthony@codemonkey.ws>'], 8),
|
||||||
|
('qemu-pr-helper', 'qemu-pr-helper', 'QEMU persistent reservation helper',
|
||||||
|
[], 8),
|
||||||
('qemu-trace-stap', 'qemu-trace-stap', u'QEMU SystemTap trace tool',
|
('qemu-trace-stap', 'qemu-trace-stap', u'QEMU SystemTap trace tool',
|
||||||
[], 1),
|
[], 1),
|
||||||
('virtfs-proxy-helper', 'virtfs-proxy-helper',
|
('virtfs-proxy-helper', 'virtfs-proxy-helper',
|
||||||
|
@ -12,6 +12,7 @@ Contents:
|
|||||||
|
|
||||||
qemu-img
|
qemu-img
|
||||||
qemu-nbd
|
qemu-nbd
|
||||||
|
qemu-pr-helper
|
||||||
qemu-trace-stap
|
qemu-trace-stap
|
||||||
virtfs-proxy-helper
|
virtfs-proxy-helper
|
||||||
virtiofsd
|
virtiofsd
|
||||||
|
90
docs/tools/qemu-pr-helper.rst
Normal file
90
docs/tools/qemu-pr-helper.rst
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
QEMU persistent reservation helper
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
|
||||||
|
**qemu-pr-helper** [*OPTION*]
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Implements the persistent reservation helper for QEMU.
|
||||||
|
|
||||||
|
SCSI persistent reservations allow restricting access to block devices
|
||||||
|
to specific initiators in a shared storage setup. When implementing
|
||||||
|
clustering of virtual machines, it is a common requirement for virtual
|
||||||
|
machines to send persistent reservation SCSI commands. However,
|
||||||
|
the operating system restricts sending these commands to unprivileged
|
||||||
|
programs because incorrect usage can disrupt regular operation of the
|
||||||
|
storage fabric. QEMU's SCSI passthrough devices ``scsi-block``
|
||||||
|
and ``scsi-generic`` support passing guest persistent reservation
|
||||||
|
requests to a privileged external helper program. :program:`qemu-pr-helper`
|
||||||
|
is that external helper; it creates a socket which QEMU can
|
||||||
|
connect to to communicate with it.
|
||||||
|
|
||||||
|
If you want to run VMs in a setup like this, this helper should be
|
||||||
|
started as a system service, and you should read the QEMU manual
|
||||||
|
section on "persistent reservation managers" to find out how to
|
||||||
|
configure QEMU to connect to the socket created by
|
||||||
|
:program:`qemu-pr-helper`.
|
||||||
|
|
||||||
|
After connecting to the socket, :program:`qemu-pr-helper` can
|
||||||
|
optionally drop root privileges, except for those capabilities that
|
||||||
|
are needed for its operation.
|
||||||
|
|
||||||
|
:program:`qemu-pr-helper` can also use the systemd socket activation
|
||||||
|
protocol. In this case, the systemd socket unit should specify a
|
||||||
|
Unix stream socket, like this::
|
||||||
|
|
||||||
|
[Socket]
|
||||||
|
ListenStream=/var/run/qemu-pr-helper.sock
|
||||||
|
|
||||||
|
Options
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. program:: qemu-pr-helper
|
||||||
|
|
||||||
|
.. option:: -d, --daemon
|
||||||
|
|
||||||
|
run in the background (and create a PID file)
|
||||||
|
|
||||||
|
.. option:: -q, --quiet
|
||||||
|
|
||||||
|
decrease verbosity
|
||||||
|
|
||||||
|
.. option:: -v, --verbose
|
||||||
|
|
||||||
|
increase verbosity
|
||||||
|
|
||||||
|
.. option:: -f, --pidfile=PATH
|
||||||
|
|
||||||
|
PID file when running as a daemon. By default the PID file
|
||||||
|
is created in the system runtime state directory, for example
|
||||||
|
:file:`/var/run/qemu-pr-helper.pid`.
|
||||||
|
|
||||||
|
.. option:: -k, --socket=PATH
|
||||||
|
|
||||||
|
path to the socket. By default the socket is created in
|
||||||
|
the system runtime state directory, for example
|
||||||
|
:file:`/var/run/qemu-pr-helper.sock`.
|
||||||
|
|
||||||
|
.. option:: -T, --trace [[enable=]PATTERN][,events=FILE][,file=FILE]
|
||||||
|
|
||||||
|
.. include:: ../qemu-option-trace.rst.inc
|
||||||
|
|
||||||
|
.. option:: -u, --user=USER
|
||||||
|
|
||||||
|
user to drop privileges to
|
||||||
|
|
||||||
|
.. option:: -g, --group=GROUP
|
||||||
|
|
||||||
|
group to drop privileges to
|
||||||
|
|
||||||
|
.. option:: -h, --help
|
||||||
|
|
||||||
|
Display a help message and exit.
|
||||||
|
|
||||||
|
.. option:: -V, --version
|
||||||
|
|
||||||
|
Display version information and exit.
|
@ -1,76 +0,0 @@
|
|||||||
|
|
||||||
========================
|
|
||||||
QEMU virtio pmem
|
|
||||||
========================
|
|
||||||
|
|
||||||
This document explains the setup and usage of the virtio pmem device
|
|
||||||
which is available since QEMU v4.1.0.
|
|
||||||
|
|
||||||
The virtio pmem device is a paravirtualized persistent memory device
|
|
||||||
on regular (i.e non-NVDIMM) storage.
|
|
||||||
|
|
||||||
Usecase
|
|
||||||
--------
|
|
||||||
|
|
||||||
Virtio pmem allows to bypass the guest page cache and directly use
|
|
||||||
host page cache. This reduces guest memory footprint as the host can
|
|
||||||
make efficient memory reclaim decisions under memory pressure.
|
|
||||||
|
|
||||||
o How does virtio-pmem compare to the nvdimm emulation supported by QEMU?
|
|
||||||
|
|
||||||
NVDIMM emulation on regular (i.e. non-NVDIMM) host storage does not
|
|
||||||
persist the guest writes as there are no defined semantics in the device
|
|
||||||
specification. The virtio pmem device provides guest write persistence
|
|
||||||
on non-NVDIMM host storage.
|
|
||||||
|
|
||||||
virtio pmem usage
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
A virtio pmem device backed by a memory-backend-file can be created on
|
|
||||||
the QEMU command line as in the following example::
|
|
||||||
|
|
||||||
-object memory-backend-file,id=mem1,share,mem-path=./virtio_pmem.img,size=4G
|
|
||||||
-device virtio-pmem-pci,memdev=mem1,id=nv1
|
|
||||||
|
|
||||||
where:
|
|
||||||
|
|
||||||
- "object memory-backend-file,id=mem1,share,mem-path=<image>, size=<image size>"
|
|
||||||
creates a backend file with the specified size.
|
|
||||||
|
|
||||||
- "device virtio-pmem-pci,id=nvdimm1,memdev=mem1" creates a virtio pmem
|
|
||||||
pci device whose storage is provided by above memory backend device.
|
|
||||||
|
|
||||||
Multiple virtio pmem devices can be created if multiple pairs of "-object"
|
|
||||||
and "-device" are provided.
|
|
||||||
|
|
||||||
Hotplug
|
|
||||||
-------
|
|
||||||
|
|
||||||
Virtio pmem devices can be hotplugged via the QEMU monitor. First, the
|
|
||||||
memory backing has to be added via 'object_add'; afterwards, the virtio
|
|
||||||
pmem device can be added via 'device_add'.
|
|
||||||
|
|
||||||
For example, the following commands add another 4GB virtio pmem device to
|
|
||||||
the guest::
|
|
||||||
|
|
||||||
(qemu) object_add memory-backend-file,id=mem2,share=on,mem-path=virtio_pmem2.img,size=4G
|
|
||||||
(qemu) device_add virtio-pmem-pci,id=virtio_pmem2,memdev=mem2
|
|
||||||
|
|
||||||
Guest Data Persistence
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
Guest data persistence on non-NVDIMM requires guest userspace applications
|
|
||||||
to perform fsync/msync. This is different from a real nvdimm backend where
|
|
||||||
no additional fsync/msync is required. This is to persist guest writes in
|
|
||||||
host backing file which otherwise remains in host page cache and there is
|
|
||||||
risk of losing the data in case of power failure.
|
|
||||||
|
|
||||||
With virtio pmem device, MAP_SYNC mmap flag is not supported. This provides
|
|
||||||
a hint to application to perform fsync for write persistence.
|
|
||||||
|
|
||||||
Limitations
|
|
||||||
------------
|
|
||||||
- Real nvdimm device backend is not supported.
|
|
||||||
- virtio pmem hotunplug is not supported.
|
|
||||||
- ACPI NVDIMM features like regions/namespaces are not supported.
|
|
||||||
- ndctl command is not supported.
|
|
@ -675,7 +675,7 @@ static void pxa2xx_ssp_write(void *opaque, hwaddr addr,
|
|||||||
if (value & SSCR0_MOD)
|
if (value & SSCR0_MOD)
|
||||||
printf("%s: Attempt to use network mode\n", __func__);
|
printf("%s: Attempt to use network mode\n", __func__);
|
||||||
if (s->enable && SSCR0_DSS(value) < 4)
|
if (s->enable && SSCR0_DSS(value) < 4)
|
||||||
printf("%s: Wrong data size: %i bits\n", __func__,
|
printf("%s: Wrong data size: %u bits\n", __func__,
|
||||||
SSCR0_DSS(value));
|
SSCR0_DSS(value));
|
||||||
if (!(value & SSCR0_SSE)) {
|
if (!(value & SSCR0_SSE)) {
|
||||||
s->sssr = 0;
|
s->sssr = 0;
|
||||||
|
@ -586,7 +586,7 @@ struct SpitzLCDTG {
|
|||||||
static void spitz_bl_update(SpitzLCDTG *s)
|
static void spitz_bl_update(SpitzLCDTG *s)
|
||||||
{
|
{
|
||||||
if (s->bl_power && s->bl_intensity)
|
if (s->bl_power && s->bl_intensity)
|
||||||
zaurus_printf("LCD Backlight now at %i/63\n", s->bl_intensity);
|
zaurus_printf("LCD Backlight now at %u/63\n", s->bl_intensity);
|
||||||
else
|
else
|
||||||
zaurus_printf("LCD Backlight now off\n");
|
zaurus_printf("LCD Backlight now off\n");
|
||||||
}
|
}
|
||||||
|
@ -150,7 +150,7 @@ static void tosa_gpio_setup(PXA2xxState *cpu,
|
|||||||
|
|
||||||
static uint32_t tosa_ssp_tansfer(SSISlave *dev, uint32_t value)
|
static uint32_t tosa_ssp_tansfer(SSISlave *dev, uint32_t value)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "TG: %d %02x\n", value >> 5, value & 0x1f);
|
fprintf(stderr, "TG: %u %02x\n", value >> 5, value & 0x1f);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,22 +300,20 @@ static const MemoryRegionOps icu_ops = {
|
|||||||
static void rxicu_realize(DeviceState *dev, Error **errp)
|
static void rxicu_realize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
RXICUState *icu = RX_ICU(dev);
|
RXICUState *icu = RX_ICU(dev);
|
||||||
int i, j;
|
int i;
|
||||||
|
|
||||||
if (icu->init_sense == NULL) {
|
if (icu->init_sense == NULL) {
|
||||||
qemu_log_mask(LOG_GUEST_ERROR,
|
qemu_log_mask(LOG_GUEST_ERROR,
|
||||||
"rx_icu: trigger-level property must be set.");
|
"rx_icu: trigger-level property must be set.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (i = j = 0; i < NR_IRQS; i++) {
|
|
||||||
if (icu->init_sense[j] == i) {
|
for (i = 0; i < NR_IRQS; i++) {
|
||||||
icu->src[i].sense = TRG_LEVEL;
|
|
||||||
if (j < icu->nr_sense) {
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
icu->src[i].sense = TRG_PEDGE;
|
icu->src[i].sense = TRG_PEDGE;
|
||||||
}
|
}
|
||||||
|
for (i = 0; i < icu->nr_sense; i++) {
|
||||||
|
uint8_t irqno = icu->init_sense[i];
|
||||||
|
icu->src[irqno].sense = TRG_LEVEL;
|
||||||
}
|
}
|
||||||
icu->req_irq = -1;
|
icu->req_irq = -1;
|
||||||
}
|
}
|
||||||
|
@ -205,6 +205,24 @@ do_kernel_trap(CPUARMState *env)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool insn_is_linux_bkpt(uint32_t opcode, bool is_thumb)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Return true if this insn is one of the three magic UDF insns
|
||||||
|
* which the kernel treats as breakpoint insns.
|
||||||
|
*/
|
||||||
|
if (!is_thumb) {
|
||||||
|
return (opcode & 0x0fffffff) == 0x07f001f0;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Note that we get the two halves of the 32-bit T32 insn
|
||||||
|
* in the opposite order to the value the kernel uses in
|
||||||
|
* its undef_hook struct.
|
||||||
|
*/
|
||||||
|
return ((opcode & 0xffff) == 0xde01) || (opcode == 0xa000f7f0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void cpu_loop(CPUARMState *env)
|
void cpu_loop(CPUARMState *env)
|
||||||
{
|
{
|
||||||
CPUState *cs = env_cpu(env);
|
CPUState *cs = env_cpu(env);
|
||||||
@ -234,6 +252,16 @@ void cpu_loop(CPUARMState *env)
|
|||||||
/* FIXME - what to do if get_user() fails? */
|
/* FIXME - what to do if get_user() fails? */
|
||||||
get_user_code_u32(opcode, env->regs[15], env);
|
get_user_code_u32(opcode, env->regs[15], env);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The Linux kernel treats some UDF patterns specially
|
||||||
|
* to use as breakpoints (instead of the architectural
|
||||||
|
* bkpt insn). These should trigger a SIGTRAP rather
|
||||||
|
* than SIGILL.
|
||||||
|
*/
|
||||||
|
if (insn_is_linux_bkpt(opcode, env->thumb)) {
|
||||||
|
goto excp_debug;
|
||||||
|
}
|
||||||
|
|
||||||
rc = EmulateAll(opcode, &ts->fpa, env);
|
rc = EmulateAll(opcode, &ts->fpa, env);
|
||||||
if (rc == 0) { /* illegal instruction */
|
if (rc == 0) { /* illegal instruction */
|
||||||
info.si_signo = TARGET_SIGILL;
|
info.si_signo = TARGET_SIGILL;
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#else
|
#else
|
||||||
#include "exec/gdbstub.h"
|
#include "exec/gdbstub.h"
|
||||||
#include "qemu/cutils.h"
|
#include "qemu/cutils.h"
|
||||||
|
#include "hw/arm/boot.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TARGET_SYS_OPEN 0x01
|
#define TARGET_SYS_OPEN 0x01
|
||||||
@ -1014,6 +1015,9 @@ target_ulong do_arm_semihosting(CPUARMState *env)
|
|||||||
int i;
|
int i;
|
||||||
#ifdef CONFIG_USER_ONLY
|
#ifdef CONFIG_USER_ONLY
|
||||||
TaskState *ts = cs->opaque;
|
TaskState *ts = cs->opaque;
|
||||||
|
#else
|
||||||
|
const struct arm_boot_info *info = env->boot_info;
|
||||||
|
target_ulong rambase = info->loader_start;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GET_ARG(0);
|
GET_ARG(0);
|
||||||
@ -1046,10 +1050,10 @@ target_ulong do_arm_semihosting(CPUARMState *env)
|
|||||||
#else
|
#else
|
||||||
limit = ram_size;
|
limit = ram_size;
|
||||||
/* TODO: Make this use the limit of the loaded application. */
|
/* TODO: Make this use the limit of the loaded application. */
|
||||||
retvals[0] = limit / 2;
|
retvals[0] = rambase + limit / 2;
|
||||||
retvals[1] = limit;
|
retvals[1] = rambase + limit;
|
||||||
retvals[2] = limit; /* Stack base */
|
retvals[2] = rambase + limit; /* Stack base */
|
||||||
retvals[3] = 0; /* Stack limit. */
|
retvals[3] = rambase; /* Stack limit. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(retvals); i++) {
|
for (i = 0; i < ARRAY_SIZE(retvals); i++) {
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
|
|
||||||
static bool get_phys_addr_lpae(CPUARMState *env, target_ulong address,
|
static bool get_phys_addr_lpae(CPUARMState *env, uint64_t address,
|
||||||
MMUAccessType access_type, ARMMMUIdx mmu_idx,
|
MMUAccessType access_type, ARMMMUIdx mmu_idx,
|
||||||
bool s1_is_el0,
|
bool s1_is_el0,
|
||||||
hwaddr *phys_ptr, MemTxAttrs *txattrs, int *prot,
|
hwaddr *phys_ptr, MemTxAttrs *txattrs, int *prot,
|
||||||
@ -10988,7 +10988,7 @@ static ARMVAParameters aa32_va_parameters(CPUARMState *env, uint32_t va,
|
|||||||
* @fi: set to fault info if the translation fails
|
* @fi: set to fault info if the translation fails
|
||||||
* @cacheattrs: (if non-NULL) set to the cacheability/shareability attributes
|
* @cacheattrs: (if non-NULL) set to the cacheability/shareability attributes
|
||||||
*/
|
*/
|
||||||
static bool get_phys_addr_lpae(CPUARMState *env, target_ulong address,
|
static bool get_phys_addr_lpae(CPUARMState *env, uint64_t address,
|
||||||
MMUAccessType access_type, ARMMMUIdx mmu_idx,
|
MMUAccessType access_type, ARMMMUIdx mmu_idx,
|
||||||
bool s1_is_el0,
|
bool s1_is_el0,
|
||||||
hwaddr *phys_ptr, MemTxAttrs *txattrs, int *prot,
|
hwaddr *phys_ptr, MemTxAttrs *txattrs, int *prot,
|
||||||
|
Loading…
Reference in New Issue
Block a user