qemu/docs
Damien Hedde 310616d367 hw/core/resettable: fix reset level counting
The code for handling the reset level count in the Resettable code
has two issues:

The reset count is only decremented for the 1->0 case.  This means
that if there's ever a nested reset that takes the count to 2 then it
will never again be decremented.  Eventually the count will exceed
the '50' limit in resettable_phase_enter() and QEMU will trip over
the assertion failure.  The repro case in issue 1266 is an example of
this that happens now the SCSI subsystem uses three-phase reset.

Secondly, the count is decremented only after the exit phase handler
is called.  Moving the reset count decrement from "just after" to
"just before" calling the exit phase handler allows
resettable_is_in_reset() to return false during the handler
execution.

This simplifies reset handling in resettable devices.  Typically, a
function that updates the device state will just need to read the
current reset state and not anymore treat the "in a reset-exit
transition" as a special case.

Note that the semantics change to the *_is_in_reset() functions
will have no effect on the current codebase, because only two
devices (hw/char/cadence_uart.c and hw/misc/zynq_sclr.c) currently
call those functions, and in neither case do they do it from the
device's exit phase methed.

Fixes: 4a5fc890 ("scsi: Use device_cold_reset() and bus_cold_reset()")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1266
Signed-off-by: Damien Hedde <damien.hedde@greensocs.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reported-by: Michael Peter <michael.peter@hensoldt-cyber.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-id: 20221020142749.3357951-1-peter.maydell@linaro.org
Buglink: https://bugs.launchpad.net/qemu/+bug/1905297
Reported-by: Michael Peter <michael.peter@hensoldt-cyber.com>
[PMM: adjust the docs paragraph changed to get the name of the
 'enter' phase right and to clarify exactly when the count is
 adjusted; rewrite the commit message]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2022-10-27 10:27:23 +01:00
..
_templates
about watchdog: remove -watchdog option 2022-09-29 11:40:28 +02:00
config
devel hw/core/resettable: fix reset level counting 2022-10-27 10:27:23 +01:00
interop docs: add firmware feature flags 2022-10-12 11:02:44 +02:00
specs pci-ids: drop list of modern virtio devices 2022-10-12 12:01:11 +02:00
sphinx docs/sphinx: fix compatibility with sphinx < 1.8 2022-01-05 11:10:13 +01:00
sphinx-static docs/sphinx: add 's' keyboard binding to focus search 2021-11-08 12:27:23 +04:00
spin
system target/arm: Implement FEAT_E0PD 2022-10-27 10:27:23 +01:00
tools qemu-img: Wean documentation and help output off '?' for help 2022-09-30 18:02:30 +02:00
user linux-user: Remove the deprecated ppc64abi32 target 2022-02-09 13:29:38 +00:00
block-replication.txt docs/block-replication.txt: Fix replication top-id command demo 2021-12-17 11:35:00 +01:00
bypass-iommu.txt
COLO-FT.txt docs: Use double quotes instead of single quotes for COLO 2021-11-22 15:02:38 +01:00
colo-proxy.txt
conf.py sphinx: change default language to 'en' 2022-06-27 10:39:03 +01:00
defs.rst.inc
igd-assign.txt
image-fuzzer.txt docs: Render binary names as monospaced text 2021-11-22 15:02:38 +01:00
index.rst
memory-hotplug.txt
meson.build meson, configure: move --with-pkgversion, CONFIG_STAMP to meson 2022-05-07 07:46:58 +02:00
multi-thread-compression.txt
multiseat.txt docs: Spell QEMU all caps 2021-11-19 10:16:58 +01:00
nvdimm.txt
pci_expander_bridge.txt
pcie_pci_bridge.txt
pcie_sriov.txt docs: Replace Qemu -> QEMU 2022-04-26 12:38:44 +02:00
pcie.txt
pvrdma.txt
qcow2-cache.txt
qdev-device-use.txt
qemu-option-trace.rst.inc
qemupciserial.inf
rdma.txt
spice-port-fqdn.txt
throttle.txt docs: Drop deprecated 'props' from object-add 2021-11-22 15:02:38 +01:00
u2f.txt docs: Spell QEMU all caps 2021-11-19 10:16:58 +01:00
xbzrle.txt
xen-save-devices-state.txt