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:
Peter Maydell 2020-11-23 14:48:16 +00:00
commit 272fa7491f
26 changed files with 326 additions and 147 deletions

View File

@ -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>

View File

@ -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' : ''),

View File

@ -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
View 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)

View File

@ -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

View File

@ -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
-------------- --------------

View File

@ -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
View File

@ -0,0 +1,7 @@
i440fx PC (``pc-i440fx``, ``pc``)
=================================
Peripherals
~~~~~~~~~~~
.. include:: ../target-i386-desc.rst.inc

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View 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.

View File

@ -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',

View File

@ -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

View 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.

View File

@ -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.

View File

@ -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;

View File

@ -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");
} }

View File

@ -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;
} }

View File

@ -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; icu->src[i].sense = TRG_PEDGE;
if (j < icu->nr_sense) { }
j++; for (i = 0; i < icu->nr_sense; i++) {
} uint8_t irqno = icu->init_sense[i];
} else { icu->src[irqno].sense = TRG_LEVEL;
icu->src[i].sense = TRG_PEDGE;
}
} }
icu->req_irq = -1; icu->req_irq = -1;
} }

View File

@ -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;

View File

@ -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++) {

View File

@ -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,