aboutsummaryrefslogtreecommitdiff
path: root/include/exec/tb-flush.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/exec/tb-flush.h')
-rw-r--r--include/exec/tb-flush.h30
1 files changed, 20 insertions, 10 deletions
diff --git a/include/exec/tb-flush.h b/include/exec/tb-flush.h
index 142c240..e971d4b 100644
--- a/include/exec/tb-flush.h
+++ b/include/exec/tb-flush.h
@@ -9,19 +9,29 @@
#define _TB_FLUSH_H_
/**
- * tb_flush() - flush all translation blocks
- * @cs: CPUState (must be valid, but treated as anonymous pointer)
+ * tb_flush__exclusive_or_serial()
*
- * Used to flush all the translation blocks in the system. Sometimes
- * it is simpler to flush everything than work out which individual
- * translations are now invalid and ensure they are not called
- * anymore.
+ * Used to flush all the translation blocks in the system. Mostly this is
+ * used to empty the code generation buffer after it is full. Sometimes it
+ * is used when it is simpler to flush everything than work out which
+ * individual translations are now invalid.
*
- * tb_flush() takes care of running the flush in an exclusive context
- * if it is not already running in one. This means no guest code will
- * run until this complete.
+ * Must be called from an exclusive or serial context, e.g. start_exclusive,
+ * vm_stop, or when there is only one vcpu. Note that start_exclusive cannot
+ * be called from within the cpu run loop, so this cannot be called from
+ * within target code.
*/
-void tb_flush(CPUState *cs);
+void tb_flush__exclusive_or_serial(void);
+
+/**
+ * queue_tb_flush() - add flush to the cpu work queue
+ * @cs: CPUState
+ *
+ * Flush all translation blocks the next time @cs processes the work queue.
+ * This should generally be followed by cpu_loop_exit(), so that the work
+ * queue is processed promptly.
+ */
+void queue_tb_flush(CPUState *cs);
void tcg_flush_jmp_cache(CPUState *cs);