|
@@ -262,6 +262,21 @@ AioContext *iohandler_get_aio_context(void);
|
|
*/
|
|
*/
|
|
bool bql_locked(void);
|
|
bool bql_locked(void);
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * bql_block: Allow/deny releasing the BQL
|
|
|
|
+ *
|
|
|
|
+ * The Big QEMU Lock (BQL) is used to provide interior mutability to
|
|
|
|
+ * Rust code, but this only works if other threads cannot run while
|
|
|
|
+ * the Rust code has an active borrow. This is because C code in
|
|
|
|
+ * other threads could come in and mutate data under the Rust code's
|
|
|
|
+ * feet.
|
|
|
|
+ *
|
|
|
|
+ * @increase: Whether to increase or decrease the blocking counter.
|
|
|
|
+ * Releasing the BQL while the counter is nonzero triggers
|
|
|
|
+ * an assertion failure.
|
|
|
|
+ */
|
|
|
|
+void bql_block_unlock(bool increase);
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* qemu_in_main_thread: return whether it's possible to safely access
|
|
* qemu_in_main_thread: return whether it's possible to safely access
|
|
* the global state of the block layer.
|
|
* the global state of the block layer.
|