On 29/4/24 00:14, Philippe Mathieu-Daudé wrote:
IcountDecr union, the CPUTLB* structures and the
"exec/tlb-common.h" header are only required for
TCG.
Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org>
---
include/exec/tlb-common.h | 4 ++++
include/hw/core/cpu.h | 9 ++++++---
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/include/exec/tlb-common.h b/include/exec/tlb-common.h
index dc5a5faa0b..a529c9f056 100644
--- a/include/exec/tlb-common.h
+++ b/include/exec/tlb-common.h
@@ -19,6 +19,10 @@
#ifndef EXEC_TLB_COMMON_H
#define EXEC_TLB_COMMON_H 1
+#ifndef CONFIG_TCG
+#error Can only include this header with TCG
+#endif
+
#define CPU_TLB_ENTRY_BITS 5
/* Minimalized TLB entry for use by TCG fast path. */
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index ef8b85b6fe..dc28920bcc 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -27,7 +27,6 @@
#include "exec/vaddr.h"
#include "exec/memattrs.h"
#include "exec/mmu-access-type.h"
-#include "exec/tlb-common.h"
#include "qapi/qapi-types-run-state.h"
#include "qemu/bitmap.h"
#include "qemu/rcu_queue.h"
@@ -256,6 +255,9 @@ typedef struct CPUTLBEntryFull {
} extra;
} CPUTLBEntryFull;
+#ifdef CONFIG_TCG
+#include "exec/tlb-common.h"
+
/*
* Data elements that are per MMU mode, minus the bits accessed by
* the TCG fast path.
@@ -311,11 +313,9 @@ typedef struct CPUTLBCommon {
* negative offsets are at the end of the struct.
*/
typedef struct CPUTLB {
-#ifdef CONFIG_TCG
CPUTLBCommon c;
CPUTLBDesc d[NB_MMU_MODES];
CPUTLBDescFast f[NB_MMU_MODES];
-#endif
} CPUTLB;
/*
@@ -337,6 +337,7 @@ typedef union IcountDecr {
#endif
} u16;
} IcountDecr;
+#endif
/**
* CPUNegativeOffsetState: Elements of CPUState most efficiently accessed
@@ -346,6 +347,7 @@ typedef union IcountDecr {
* @plugin_state: per-CPU plugin state
*/
typedef struct CPUNegativeOffsetState {
+#ifdef CONFIG_TCG
CPUTLB tlb;
#ifdef CONFIG_PLUGIN
/*
@@ -356,6 +358,7 @@ typedef struct CPUNegativeOffsetState {
#endif
IcountDecr icount_decr;
bool can_do_io;
+#endif
} CPUNegativeOffsetState;
We also need:
-- >8 --
@@ -1110,6 +1110,7 @@
+#ifdef CONFIG_TCG
/**
* cpu_plugin_mem_cbs_enabled() - are plugin memory callbacks enabled?
* @cs: CPUState pointer
@@ -1126,6 +1127,7 @@ static inline bool
cpu_plugin_mem_cbs_enabled(const CPUState *cpu)
return false;
#endif
}
+#endif
---
Otherwise this inlined function fails to build when TCG is disabled...
But since it is only used from accel/tcg/, I'll move it to
accel/tcg/internal-common.h in a preliminary patch instead:
-- >8 --
Author: Philippe Mathieu-Daudé <phi...@linaro.org>
Date: Mon Apr 29 16:01:18 2024 +0200
accel/tcg: Restrict cpu_plugin_mem_cbs_enabled() to TCG
So far cpu_plugin_mem_cbs_enabled() is only called from
TCG, so reduce it to accel/tcg/.
Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org>
diff --git a/accel/tcg/internal-common.h b/accel/tcg/internal-common.h
index df317e7496..867426500f 100644
--- a/accel/tcg/internal-common.h
+++ b/accel/tcg/internal-common.h
@@ -26,0 +27,17 @@ static inline bool cpu_in_serial_context(CPUState *cs)
+/**
+ * cpu_plugin_mem_cbs_enabled() - are plugin memory callbacks enabled?
+ * @cs: CPUState pointer
+ *
+ * The memory callbacks are installed if a plugin has instrumented an
+ * instruction for memory. This can be useful to know if you want to
+ * force a slow path for a series of memory accesses.
+ */
+static inline bool cpu_plugin_mem_cbs_enabled(const CPUState *cpu)
+{
+#ifdef CONFIG_PLUGIN
+ return !!cpu->neg.plugin_mem_cbs;
+#else
+ return false;
+#endif
+}
+
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index ef8b85b6fe..24ad52af7d 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -1110,17 +1109,0 @@ void cpu_watchpoint_remove_all(CPUState *cpu, int
mask);
-/**
- * cpu_plugin_mem_cbs_enabled() - are plugin memory callbacks enabled?
- * @cs: CPUState pointer
- *
- * The memory callbacks are installed if a plugin has instrumented an
- * instruction for memory. This can be useful to know if you want to
- * force a slow path for a series of memory accesses.
- */
-static inline bool cpu_plugin_mem_cbs_enabled(const CPUState *cpu)
-{
-#ifdef CONFIG_PLUGIN
- return !!cpu->neg.plugin_mem_cbs;
-#else
- return false;
-#endif
-}
-
---