Message ID | 20230328160203.13510-3-philmd@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | softmmu: Restore use of CPU watchpoint for non-TCG accelerators | expand |
On 28/3/23 18:02, Philippe Mathieu-Daudé wrote: > Both cpu_check_watchpoint() and cpu_watchpoint_address_matches() > are specific to TCG system emulation. Declare them in "tcg-cpu-ops.h" > to be sure accessing them from non-TCG code is a compilation error. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > include/hw/core/cpu.h | 37 ------------------------------ > include/hw/core/tcg-cpu-ops.h | 43 +++++++++++++++++++++++++++++++++++ > 2 files changed, 43 insertions(+), 37 deletions(-) > > diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h > index 821e937020..ce312745d5 100644 > --- a/include/hw/core/cpu.h > +++ b/include/hw/core/cpu.h > @@ -970,17 +970,6 @@ static inline void cpu_watchpoint_remove_by_ref(CPUState *cpu, > static inline void cpu_watchpoint_remove_all(CPUState *cpu, int mask) > { > } > - > -static inline void cpu_check_watchpoint(CPUState *cpu, vaddr addr, vaddr len, > - MemTxAttrs atr, int fl, uintptr_t ra) > -{ > -} > - > -static inline int cpu_watchpoint_address_matches(CPUState *cpu, > - vaddr addr, vaddr len) > -{ > - return 0; > -} > #else > int cpu_watchpoint_insert(CPUState *cpu, vaddr addr, vaddr len, > int flags, CPUWatchpoint **watchpoint); > @@ -988,32 +977,6 @@ int cpu_watchpoint_remove(CPUState *cpu, vaddr addr, > vaddr len, int flags); > void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint); > void cpu_watchpoint_remove_all(CPUState *cpu, int mask); > - > -/** > - * cpu_check_watchpoint: > - * @cpu: cpu context > - * @addr: guest virtual address > - * @len: access length > - * @attrs: memory access attributes > - * @flags: watchpoint access type > - * @ra: unwind return address > - * > - * Check for a watchpoint hit in [addr, addr+len) of the type > - * specified by @flags. Exit via exception with a hit. > - */ > -void cpu_check_watchpoint(CPUState *cpu, vaddr addr, vaddr len, > - MemTxAttrs attrs, int flags, uintptr_t ra); > - > -/** > - * cpu_watchpoint_address_matches: > - * @cpu: cpu context > - * @addr: guest virtual address > - * @len: access length > - * > - * Return the watchpoint flags that apply to [addr, addr+len). > - * If no watchpoint is registered for the range, the result is 0. > - */ > -int cpu_watchpoint_address_matches(CPUState *cpu, vaddr addr, vaddr len); > #endif > > /** > diff --git a/include/hw/core/tcg-cpu-ops.h b/include/hw/core/tcg-cpu-ops.h > index 20e3c0ffbb..0ae08df47e 100644 > --- a/include/hw/core/tcg-cpu-ops.h > +++ b/include/hw/core/tcg-cpu-ops.h > @@ -175,4 +175,47 @@ struct TCGCPUOps { > > }; > > +#if defined(CONFIG_USER_ONLY) > + > +static inline void cpu_check_watchpoint(CPUState *cpu, vaddr addr, vaddr len, > + MemTxAttrs atr, int fl, uintptr_t ra) > +{ > +} > + > +static inline int cpu_watchpoint_address_matches(CPUState *cpu, > + vaddr addr, vaddr len) > +{ > + return 0; > +} > + > +#else > + > +/** > + * cpu_check_watchpoint: > + * @cpu: cpu context > + * @addr: guest virtual address > + * @len: access length > + * @attrs: memory access attributes > + * @flags: watchpoint access type > + * @ra: unwind return address > + * > + * Check for a watchpoint hit in [addr, addr+len) of the type > + * specified by @flags. Exit via exception with a hit. > + */ > +void cpu_check_watchpoint(CPUState *cpu, vaddr addr, vaddr len, > + MemTxAttrs attrs, int flags, uintptr_t ra); > + > +/** > + * cpu_watchpoint_address_matches: > + * @cpu: cpu context > + * @addr: guest virtual address > + * @len: access length > + * > + * Return the watchpoint flags that apply to [addr, addr+len). > + * If no watchpoint is registered for the range, the result is 0. > + */ > +int cpu_watchpoint_address_matches(CPUState *cpu, vaddr addr, vaddr len); > + > +#endif > + > #endif /* TCG_CPU_OPS_H */ This hunk is missing: -- >8 -- diff --git a/target/arm/tcg/mte_helper.c b/target/arm/tcg/mte_helper.c index fee3c7eb96..22802b659d 100644 --- a/target/arm/tcg/mte_helper.c +++ b/target/arm/tcg/mte_helper.c @@ -29,2 +29,3 @@ #include "qemu/guest-random.h" +#include "hw/core/tcg-cpu-ops.h" diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 9a8951afa4..ace2d88f8d 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -29,3 +29,3 @@ #include "sve_ldst_internal.h" - +#include "hw/core/tcg-cpu-ops.h" diff --git a/target/s390x/tcg/mem_helper.c b/target/s390x/tcg/mem_helper.c index b93dbd3dad..1e7f72a2f2 100644 --- a/target/s390x/tcg/mem_helper.c +++ b/target/s390x/tcg/mem_helper.c @@ -30,2 +30,3 @@ #include "qemu/atomic128.h" +#include "hw/core/tcg-cpu-ops.h" #include "trace.h" ---
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index 821e937020..ce312745d5 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -970,17 +970,6 @@ static inline void cpu_watchpoint_remove_by_ref(CPUState *cpu, static inline void cpu_watchpoint_remove_all(CPUState *cpu, int mask) { } - -static inline void cpu_check_watchpoint(CPUState *cpu, vaddr addr, vaddr len, - MemTxAttrs atr, int fl, uintptr_t ra) -{ -} - -static inline int cpu_watchpoint_address_matches(CPUState *cpu, - vaddr addr, vaddr len) -{ - return 0; -} #else int cpu_watchpoint_insert(CPUState *cpu, vaddr addr, vaddr len, int flags, CPUWatchpoint **watchpoint); @@ -988,32 +977,6 @@ int cpu_watchpoint_remove(CPUState *cpu, vaddr addr, vaddr len, int flags); void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint); void cpu_watchpoint_remove_all(CPUState *cpu, int mask); - -/** - * cpu_check_watchpoint: - * @cpu: cpu context - * @addr: guest virtual address - * @len: access length - * @attrs: memory access attributes - * @flags: watchpoint access type - * @ra: unwind return address - * - * Check for a watchpoint hit in [addr, addr+len) of the type - * specified by @flags. Exit via exception with a hit. - */ -void cpu_check_watchpoint(CPUState *cpu, vaddr addr, vaddr len, - MemTxAttrs attrs, int flags, uintptr_t ra); - -/** - * cpu_watchpoint_address_matches: - * @cpu: cpu context - * @addr: guest virtual address - * @len: access length - * - * Return the watchpoint flags that apply to [addr, addr+len). - * If no watchpoint is registered for the range, the result is 0. - */ -int cpu_watchpoint_address_matches(CPUState *cpu, vaddr addr, vaddr len); #endif /** diff --git a/include/hw/core/tcg-cpu-ops.h b/include/hw/core/tcg-cpu-ops.h index 20e3c0ffbb..0ae08df47e 100644 --- a/include/hw/core/tcg-cpu-ops.h +++ b/include/hw/core/tcg-cpu-ops.h @@ -175,4 +175,47 @@ struct TCGCPUOps { }; +#if defined(CONFIG_USER_ONLY) + +static inline void cpu_check_watchpoint(CPUState *cpu, vaddr addr, vaddr len, + MemTxAttrs atr, int fl, uintptr_t ra) +{ +} + +static inline int cpu_watchpoint_address_matches(CPUState *cpu, + vaddr addr, vaddr len) +{ + return 0; +} + +#else + +/** + * cpu_check_watchpoint: + * @cpu: cpu context + * @addr: guest virtual address + * @len: access length + * @attrs: memory access attributes + * @flags: watchpoint access type + * @ra: unwind return address + * + * Check for a watchpoint hit in [addr, addr+len) of the type + * specified by @flags. Exit via exception with a hit. + */ +void cpu_check_watchpoint(CPUState *cpu, vaddr addr, vaddr len, + MemTxAttrs attrs, int flags, uintptr_t ra); + +/** + * cpu_watchpoint_address_matches: + * @cpu: cpu context + * @addr: guest virtual address + * @len: access length + * + * Return the watchpoint flags that apply to [addr, addr+len). + * If no watchpoint is registered for the range, the result is 0. + */ +int cpu_watchpoint_address_matches(CPUState *cpu, vaddr addr, vaddr len); + +#endif + #endif /* TCG_CPU_OPS_H */
Both cpu_check_watchpoint() and cpu_watchpoint_address_matches() are specific to TCG system emulation. Declare them in "tcg-cpu-ops.h" to be sure accessing them from non-TCG code is a compilation error. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- include/hw/core/cpu.h | 37 ------------------------------ include/hw/core/tcg-cpu-ops.h | 43 +++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 37 deletions(-)