[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 09/22] translate-all: introduce iterator macros for
From: |
Emilio G. Cota |
Subject: |
[Qemu-devel] [PATCH 09/22] translate-all: introduce iterator macros for tagged TB lists |
Date: |
Mon, 7 Aug 2017 19:52:25 -0400 |
These will soon gain a couple of users.
Signed-off-by: Emilio G. Cota <address@hidden>
---
accel/tcg/translate-all.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index 8f6f8f1..396c10c 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -115,6 +115,25 @@ typedef struct PageDesc {
#endif
} PageDesc;
+/* list iterators for lists of tagged pointers in TranslationBlock */
+#define tb_for_each_tagged(head, tb, n, field) \
+ for (n = (head) & 1, \
+ tb = (TranslationBlock *)((head) & ~1); \
+ tb; \
+ tb = (TranslationBlock *)tb->field[n], \
+ n = (uintptr_t)tb & 1, \
+ tb = (TranslationBlock *)((uintptr_t)tb & ~1))
+
+/* prev is a *uintptr_t. It allows us to safely remove tb */
+#define tb_for_each_tagged_safe(head, tb, n, field, prev) \
+ for (prev = &(head), \
+ n = *prev & 1, \
+ tb = (TranslationBlock *)(*prev & ~1); \
+ tb; \
+ prev = &tb->field[n], \
+ n = (uintptr_t)*prev & 1, \
+ tb = (TranslationBlock *)(*prev & ~1))
+
/* In system mode we want L1_MAP to be based on ram offsets,
while in user mode we want it to be based on virtual addresses. */
#if !defined(CONFIG_USER_ONLY)
--
2.7.4
- [Qemu-devel] [PATCH 00/22] tcg: tb_lock removal, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 02/22] linux-user: fix 'finshed' typo in comment, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 03/22] translate-all: fix 'consisits' typo in comment, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 09/22] translate-all: introduce iterator macros for tagged TB lists,
Emilio G. Cota <=
- [Qemu-devel] [PATCH 01/22] disas/arm: fix 'instuction' typo in comment, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 04/22] qht: fix kernel-doc markup in qht.h, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 11/22] translate-all: exit from tb_phys_invalidate if qht_remove fails, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 08/22] tcg: move tb_ctx.tb_phys_invalidate_count to tcg_ctx, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 13/22] translate-all: remove hole in PageDesc, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 12/22] translate-all: make l1_map lockless, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 05/22] qht: require a default comparison function, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 06/22] qht: return existing entry when qht_insert fails, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 15/22] translate-all: move tb_invalidate_phys_page_range up in the file, Emilio G. Cota, 2017/08/07
- [Qemu-devel] [PATCH 10/22] translate-all: iterate over TBs in a page with page_for_each_tb, Emilio G. Cota, 2017/08/07