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/libvixl/
|
||||
F: docs/system/target-arm.rst
|
||||
F: docs/system/arm/cpu-features.rst
|
||||
|
||||
ARM SMMU
|
||||
M: Eric Auger <eric.auger@redhat.com>
|
||||
@ -558,7 +559,7 @@ S: Maintained
|
||||
F: hw/*/allwinner-h3*
|
||||
F: include/hw/*/allwinner-h3*
|
||||
F: hw/arm/orangepi.c
|
||||
F: docs/system/orangepi.rst
|
||||
F: docs/system/arm/orangepi.rst
|
||||
|
||||
ARM PrimeCell and CMSDK devices
|
||||
M: Peter Maydell <peter.maydell@linaro.org>
|
||||
@ -762,6 +763,7 @@ F: include/hw/*/npcm7xx*
|
||||
F: tests/qtest/npcm7xx*
|
||||
F: pc-bios/npcm7xx_bootrom.bin
|
||||
F: roms/vbootrom
|
||||
F: docs/system/arm/nuvoton.rst
|
||||
|
||||
nSeries
|
||||
M: Andrzej Zaborowski <balrogg@gmail.com>
|
||||
@ -801,6 +803,7 @@ F: hw/arm/raspi_platform.h
|
||||
F: hw/*/bcm283*
|
||||
F: include/hw/arm/raspi*
|
||||
F: include/hw/*/bcm283*
|
||||
F: docs/system/arm/raspi.rst
|
||||
|
||||
Real View
|
||||
M: Peter Maydell <peter.maydell@linaro.org>
|
||||
@ -855,6 +858,7 @@ R: Leif Lindholm <leif@nuviainc.com>
|
||||
L: qemu-arm@nongnu.org
|
||||
S: Maintained
|
||||
F: hw/arm/sbsa-ref.c
|
||||
F: docs/system/arm/sbsa.rst
|
||||
|
||||
Sharp SL-5500 (Collie) PDA
|
||||
M: Peter Maydell <peter.maydell@linaro.org>
|
||||
@ -999,6 +1003,7 @@ F: include/hw/*/*aspeed*
|
||||
F: include/hw/misc/pca9552*.h
|
||||
F: hw/net/ftgmac100.c
|
||||
F: include/hw/net/ftgmac100.h
|
||||
F: docs/system/arm/aspeed.rst
|
||||
|
||||
NRF51
|
||||
M: Joel Stanley <joel@jms.id.au>
|
||||
@ -1603,6 +1608,7 @@ L: qemu-arm@nongnu.org
|
||||
S: Maintained
|
||||
F: hw/*/omap*
|
||||
F: include/hw/arm/omap.h
|
||||
F: docs/system/arm/sx1.rst
|
||||
|
||||
IPack
|
||||
M: Alberto Garcia <berto@igalia.com>
|
||||
|
@ -60,6 +60,7 @@ if build_docs
|
||||
'tools': {
|
||||
'qemu-img.1': (have_tools ? 'man1' : ''),
|
||||
'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' : ''),
|
||||
'virtfs-proxy-helper.1': (have_virtfs_proxy_helper ? 'man1' : ''),
|
||||
'virtiofsd.1': (have_virtiofsd ? 'man1' : ''),
|
||||
|
@ -47,6 +47,7 @@ Supported devices
|
||||
* GPIO Controller (Master only)
|
||||
* UART
|
||||
* Ethernet controllers
|
||||
* Front LEDs (PCA9552 on I2C bus)
|
||||
|
||||
|
||||
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\"
|
||||
and \"Terrier\") emulation includes the following peripherals:
|
||||
The Sharp Zaurus are PDAs based on XScale, able to run Linux ('SL series').
|
||||
|
||||
- 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\"
|
||||
|
||||
- On-chip OHCI USB controller
|
||||
- On-chip OHCI USB controller - not in \"Tosa\"
|
||||
|
||||
- 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
|
||||
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
|
||||
--------------
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
====================
|
||||
microvm Machine Type
|
||||
====================
|
||||
'microvm' virtual platform (``microvm``)
|
||||
========================================
|
||||
|
||||
``microvm`` is a machine type inspired by ``Firecracker`` and
|
||||
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
|
||||
images
|
||||
net
|
||||
virtio-net-failover
|
||||
usb
|
||||
ivshmem
|
||||
linuxboot
|
||||
@ -28,6 +29,9 @@ Contents:
|
||||
tls
|
||||
gdb
|
||||
managed-startup
|
||||
cpu-hotplug
|
||||
virtio-pmem
|
||||
pr-manager
|
||||
targets
|
||||
security
|
||||
deprecated
|
||||
|
@ -1,8 +1,8 @@
|
||||
======================================
|
||||
===============================
|
||||
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
|
||||
clustering of virtual machines, it is a common requirement for virtual
|
||||
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
|
||||
-device scsi-block,drive=hd
|
||||
|
||||
----------------------------------
|
||||
Invoking :program:`qemu-pr-helper`
|
||||
----------------------------------
|
||||
|
||||
QEMU provides an implementation of the persistent reservation helper,
|
||||
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
|
||||
You will also need to ensure that the helper program
|
||||
: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
|
||||
further details.
|
||||
|
||||
---------------------------------------------
|
||||
Multipath devices and persistent reservations
|
@ -90,6 +90,7 @@ undocumented; you can get a complete list by running
|
||||
arm/nuvoton
|
||||
arm/orangepi
|
||||
arm/palm
|
||||
arm/raspi
|
||||
arm/xscale
|
||||
arm/collie
|
||||
arm/sx1
|
||||
|
@ -1,14 +1,23 @@
|
||||
.. _QEMU-PC-System-emulator:
|
||||
|
||||
x86 (PC) System emulator
|
||||
------------------------
|
||||
x86 System emulator
|
||||
-------------------
|
||||
|
||||
.. _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
|
||||
|
||||
|
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),
|
||||
('qemu-nbd', 'qemu-nbd', u'QEMU Disk Network Block Device Server',
|
||||
['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',
|
||||
[], 1),
|
||||
('virtfs-proxy-helper', 'virtfs-proxy-helper',
|
||||
|
@ -12,6 +12,7 @@ Contents:
|
||||
|
||||
qemu-img
|
||||
qemu-nbd
|
||||
qemu-pr-helper
|
||||
qemu-trace-stap
|
||||
virtfs-proxy-helper
|
||||
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)
|
||||
printf("%s: Attempt to use network mode\n", __func__);
|
||||
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));
|
||||
if (!(value & SSCR0_SSE)) {
|
||||
s->sssr = 0;
|
||||
|
@ -586,7 +586,7 @@ struct SpitzLCDTG {
|
||||
static void spitz_bl_update(SpitzLCDTG *s)
|
||||
{
|
||||
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
|
||||
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)
|
||||
{
|
||||
fprintf(stderr, "TG: %d %02x\n", value >> 5, value & 0x1f);
|
||||
fprintf(stderr, "TG: %u %02x\n", value >> 5, value & 0x1f);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -300,22 +300,20 @@ static const MemoryRegionOps icu_ops = {
|
||||
static void rxicu_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
RXICUState *icu = RX_ICU(dev);
|
||||
int i, j;
|
||||
int i;
|
||||
|
||||
if (icu->init_sense == NULL) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"rx_icu: trigger-level property must be set.");
|
||||
return;
|
||||
}
|
||||
for (i = j = 0; i < NR_IRQS; i++) {
|
||||
if (icu->init_sense[j] == i) {
|
||||
icu->src[i].sense = TRG_LEVEL;
|
||||
if (j < icu->nr_sense) {
|
||||
j++;
|
||||
}
|
||||
} else {
|
||||
|
||||
for (i = 0; i < NR_IRQS; i++) {
|
||||
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;
|
||||
}
|
||||
|
@ -205,6 +205,24 @@ do_kernel_trap(CPUARMState *env)
|
||||
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)
|
||||
{
|
||||
CPUState *cs = env_cpu(env);
|
||||
@ -234,6 +252,16 @@ void cpu_loop(CPUARMState *env)
|
||||
/* FIXME - what to do if get_user() fails? */
|
||||
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);
|
||||
if (rc == 0) { /* illegal instruction */
|
||||
info.si_signo = TARGET_SIGILL;
|
||||
|
@ -36,6 +36,7 @@
|
||||
#else
|
||||
#include "exec/gdbstub.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "hw/arm/boot.h"
|
||||
#endif
|
||||
|
||||
#define TARGET_SYS_OPEN 0x01
|
||||
@ -1014,6 +1015,9 @@ target_ulong do_arm_semihosting(CPUARMState *env)
|
||||
int i;
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
TaskState *ts = cs->opaque;
|
||||
#else
|
||||
const struct arm_boot_info *info = env->boot_info;
|
||||
target_ulong rambase = info->loader_start;
|
||||
#endif
|
||||
|
||||
GET_ARG(0);
|
||||
@ -1046,10 +1050,10 @@ target_ulong do_arm_semihosting(CPUARMState *env)
|
||||
#else
|
||||
limit = ram_size;
|
||||
/* TODO: Make this use the limit of the loaded application. */
|
||||
retvals[0] = limit / 2;
|
||||
retvals[1] = limit;
|
||||
retvals[2] = limit; /* Stack base */
|
||||
retvals[3] = 0; /* Stack limit. */
|
||||
retvals[0] = rambase + limit / 2;
|
||||
retvals[1] = rambase + limit;
|
||||
retvals[2] = rambase + limit; /* Stack base */
|
||||
retvals[3] = rambase; /* Stack limit. */
|
||||
#endif
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(retvals); i++) {
|
||||
|
@ -40,7 +40,7 @@
|
||||
|
||||
#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,
|
||||
bool s1_is_el0,
|
||||
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
|
||||
* @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,
|
||||
bool s1_is_el0,
|
||||
hwaddr *phys_ptr, MemTxAttrs *txattrs, int *prot,
|
||||
|
Loading…
Reference in New Issue
Block a user