summaryrefslogtreecommitdiffstats
path: root/docs/devel
diff options
context:
space:
mode:
authorPeter Maydell2018-06-30 18:30:09 +0200
committerPeter Maydell2018-06-30 18:30:09 +0200
commite3800998e66c13b24d8cc8a06fdcc8d03cd408fc (patch)
tree7a4eeaf3ce8c8c362403381ecc4f7bd6228105b0 /docs/devel
parentMerge remote-tracking branch 'remotes/stefanha/tags/tracing-pull-request' int... (diff)
parentdocs: mention shared state protect for OOB (diff)
downloadqemu-e3800998e66c13b24d8cc8a06fdcc8d03cd408fc.tar.gz
qemu-e3800998e66c13b24d8cc8a06fdcc8d03cd408fc.tar.xz
qemu-e3800998e66c13b24d8cc8a06fdcc8d03cd408fc.zip
Merge remote-tracking branch 'remotes/armbru/tags/pull-monitor-2018-06-30' into staging
Monitor patches for 2018-06-30 # gpg: Signature made Sat 30 Jun 2018 17:22:12 BST # gpg: using RSA key 3870B400EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * remotes/armbru/tags/pull-monitor-2018-06-30: docs: mention shared state protect for OOB tests: iotests: drop some stderr line monitor: flush qmp responses when CLOSED monitor: rename *_pop_one to *_pop_any chardev: comment details for CLOSED event Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'docs/devel')
-rw-r--r--docs/devel/qapi-code-gen.txt17
1 files changed, 11 insertions, 6 deletions
diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
index 88a70e4d45..94a7e8f4d0 100644
--- a/docs/devel/qapi-code-gen.txt
+++ b/docs/devel/qapi-code-gen.txt
@@ -666,22 +666,27 @@ command:
- They are executed in order,
- They run only in main thread of QEMU,
-- They have the BQL taken during execution.
+- They run with the BQL held.
When a command is executed with OOB, the following changes occur:
- They can be completed before a pending in-band command,
- They run in a dedicated monitor thread,
-- They do not take the BQL during execution.
+- They run with the BQL not held.
OOB command handlers must satisfy the following conditions:
-- It executes extremely fast,
-- It does not take any lock, or, it can take very small locks if all
- critical regions also follow the rules for OOB command handler code,
+- It terminates quickly,
- It does not invoke system calls that may block,
- It does not access guest RAM that may block when userfaultfd is
- enabled for postcopy live migration.
+ enabled for postcopy live migration,
+- It takes only "fast" locks, i.e. all critical sections protected by
+ any lock it takes also satisfy the conditions for OOB command
+ handler code.
+
+The restrictions on locking limit access to shared state. Such access
+requires synchronization, but OOB commands can't take the BQL or any
+other "slow" lock.
If in doubt, do not implement OOB execution support.