Missing review: - patch #4 'rules.mak: Add startwith rule' - patch #5 'rules.mak: Add base-arch rule'. This series include generic patches I took of the KVM/ARM specific series which will follow. - List orphan accelerators in MAINTAINERS - Add accel/Kconfig - Allow targets to use their how Kconfig Since v3: - Fixed base-arch() rule (rth) - Dropped 'semihosting: Make the feature depend of TCG' Since v2: - Addressed Thomas review comments - Fixed problem when including TARGET instead of BASE_TARGET Since v1: https://www.mail-archive.com/qemu-devel@nongnu.org/msg689024.html - Drop HVF MAINTAINERS patch (merged elsewhere) - Kconfig-select SEMIHOSTING (bonzini) - Drop user-mode selection patches - consider m68k/nios2/xtensa/riscv (pm215) - reword Kconfig SEMIHOSTING description (pm215) - reset some of rth R-b tags Previous RFC for semihosting posted earlier: https://www.mail-archive.com/qemu-devel@nongnu.org/msg631218.html $ git backport-diff -u v3 -r v4 Key: [----] : patches are identical [####] : number of functional differences between upstream/downstream patch [down] : patch is downstream-only The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively 001/11:[----] [--] 'MAINTAINERS: Fix KVM path expansion glob' 002/11:[----] [--] 'MAINTAINERS: Add an 'overall' entry for accelerators' 003/11:[----] [--] 'MAINTAINERS: Add an entry for the HAX accelerator' 004/11:[down] 'rules.mak: Add startwith() rule' 005/11:[0025] [FC] 'rules.mak: Add base-arch() rule' 006/11:[----] [--] 'Makefile: Remove dangerous EOL trailing backslash' 007/11:[----] [--] 'Makefile: Write MINIKCONF variables as one entry per line' 008/11:[----] [--] 'accel/Kconfig: Extract accel selectors into their own config' 009/11:[----] [--] 'accel/Kconfig: Add the TCG selector' 010/11:[----] [--] 'Makefile: Allow target-specific optional Kconfig' 011/11:[----] [--] 'accel/tcg: Add stub for probe_access()' Supersedes: <20200521195911.19685-1-philmd@redhat.com> Philippe Mathieu-Daudé (11): MAINTAINERS: Fix KVM path expansion glob MAINTAINERS: Add an 'overall' entry for accelerators MAINTAINERS: Add an entry for the HAX accelerator rules.mak: Add startwith() rule rules.mak: Add base-arch() rule Makefile: Remove dangerous EOL trailing backslash Makefile: Write MINIKCONF variables as one entry per line accel/Kconfig: Extract accel selectors into their own config accel/Kconfig: Add the TCG selector Makefile: Allow target-specific optional Kconfig accel/tcg: Add stub for probe_access() Makefile | 15 +++++++++++---- rules.mak | 34 ++++++++++++++++++++++++++++++++++ accel/stubs/tcg-stub.c | 7 +++++++ Kconfig.host | 7 ------- MAINTAINERS | 19 ++++++++++++++++++- accel/Kconfig | 9 +++++++++ 6 files changed, 79 insertions(+), 12 deletions(-) create mode 100644 accel/Kconfig -- 2.21.3
The KVM files has been moved from target-ARCH to the target/ARCH/ folder in commit fcf5ef2a. Fix the pathname expansion. Fixes: fcf5ef2a ("Move target-* CPU file into a target/ folder") Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 12edb66dac..00c1c1ed8b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -361,7 +361,7 @@ Overall KVM CPUs M: Paolo Bonzini <pbonzini@redhat.com> L: kvm@vger.kernel.org S: Supported -F: */kvm.* +F: */*/kvm* F: accel/kvm/ F: accel/stubs/kvm-stub.c F: include/hw/kvm/ -- 2.21.3
Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- Cc: Paolo Bonzini <pbonzini@redhat.com> v2: Cover accel/accel.c & accel/Makefile.objs (thuth) --- MAINTAINERS | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 00c1c1ed8b..f7ee0c77f1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -415,6 +415,17 @@ S: Supported F: target/i386/kvm.c F: scripts/kvm/vmxcap +Guest CPU Cores (other accelerators) +------------------------------------ +Overall +M: Richard Henderson <rth@twiddle.net> +R: Paolo Bonzini <pbonzini@redhat.com> +S: Maintained +F: include/sysemu/accel.h +F: accel/accel.c +F: accel/Makefile.objs +F: accel/stubs/Makefile.objs + X86 HVF CPUs M: Roman Bolshakov <r.bolshakov@yadro.com> S: Maintained -- 2.21.3
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- Cc: Sergio Andres Gomez Del Real <sergio.g.delreal@gmail.com> Cc: Vincent Palatin <vpalatin@chromium.org> Cc: Yu Ning <yu.ning@intel.com> Cc: Tao Wu <lepton@google.com> Cc: haxm-team@intel.com Cc: Colin Xu <colin.xu@intel.com> Cc: Hang Yuan <hang.yuan@intel.com> Cc: David Chou <david.j.chou@intel.com> Cc: Wenchao Wang <wenchao.wang@intel.com> --- MAINTAINERS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index f7ee0c77f1..0377978201 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -426,6 +426,12 @@ F: accel/accel.c F: accel/Makefile.objs F: accel/stubs/Makefile.objs +HAX Accelerator +S: Orphan +F: accel/stubs/hax-stub.c +F: target/i386/hax-all.c +F: include/sysemu/hax.h + X86 HVF CPUs M: Roman Bolshakov <r.bolshakov@yadro.com> S: Maintained -- 2.21.3
Add a rule to test if a string starts with a substring. Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- rules.mak | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rules.mak b/rules.mak index 694865b63e..e39bee93d5 100644 --- a/rules.mak +++ b/rules.mak @@ -191,6 +191,13 @@ ne = $(if $(subst $2,,$1)$(subst $1,,$2),y,n) isempty = $(if $1,n,y) notempty = $(if $1,y,n) +# startwith +# Usage: $(call startwith, startstr, fullstr) +# +# This macro returns a string (TRUE) when @fullstr starts with +# @startstr, else returns the empty string (FALSE) +startwith = $(findstring :$(strip $1),:$(strip $2)) + # Generate files with tracetool TRACETOOL=$(PYTHON) $(SRC_PATH)/scripts/tracetool.py -- 2.21.3
Add a rule to return the base architecture for a QEMU target. The current list of TARGET_BASE_ARCH is: $ git grep TARGET_BASE_ARCH configure configure:7785:TARGET_BASE_ARCH="" configure:7795: TARGET_BASE_ARCH=i386 configure:7813: TARGET_BASE_ARCH=arm configure:7846: TARGET_BASE_ARCH=mips configure:7854: TARGET_BASE_ARCH=mips configure:7864: TARGET_BASE_ARCH=openrisc configure:7871: TARGET_BASE_ARCH=ppc configure:7879: TARGET_BASE_ARCH=ppc configure:7887: TARGET_BASE_ARCH=ppc configure:7894: TARGET_BASE_ARCH=riscv configure:7900: TARGET_BASE_ARCH=riscv configure:7920: TARGET_BASE_ARCH=sparc configure:7925: TARGET_BASE_ARCH=sparc The rule can be tested calling 'print-base-arch-$TARGET': $ make \ print-base-arch-openrisc \ print-base-arch-aarch64 \ print-base-arch-x86_64 \ print-base-arch-mips64el \ print-base-arch-ppc64 openrisc=openrisc aarch64=arm x86_64=i386 mips64el=mips ppc64=ppc Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- v4: - use startwith() - fix openrisc (rth) --- rules.mak | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/rules.mak b/rules.mak index e39bee93d5..2ce527e885 100644 --- a/rules.mak +++ b/rules.mak @@ -445,3 +445,30 @@ atomic = $(eval $1: $(call sentinel,$1) ; @:) \ print-%: @echo '$*=$($*)' + +# base-arch +# Usage: $(call base-arch, target) +# +# @target: the target architecture. +# +# This macro will return the base architecture for a target. +# +# As example, $(call base-arch, aarch64) returns 'arm'. +base-arch = $(strip \ + $(if $(call startwith,mips,$1),mips,\ + $(if $(call startwith,ppc,$1),ppc,\ + $(if $(call startwith,sparc,$1),sparc,\ + $(if $(call startwith,risc,$1),risc,\ + $(if $(call startwith,aarch64,$1),arm,\ + $(if $(call startwith,x86_64,$1),i386,\ + $1\ + )\ + )\ + )\ + )\ + )\ + )\ + ) + +print-base-arch-%: + @echo '$*=$(call base-arch, $*)' -- 2.21.3
One might get caught trying to understand unexpected Makefile behavior. Trailing backslash can help to split very long lines, but are rather dangerous when nothing follow. Preserve other developers debugging time by removing this one. Reviewed-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 40e4f7677b..6c9d718b2c 100644 --- a/Makefile +++ b/Makefile @@ -420,7 +420,7 @@ MINIKCONF_ARGS = \ MINIKCONF_INPUTS = $(SRC_PATH)/Kconfig.host $(SRC_PATH)/hw/Kconfig MINIKCONF_DEPS = $(MINIKCONF_INPUTS) $(wildcard $(SRC_PATH)/hw/*/Kconfig) -MINIKCONF = $(PYTHON) $(SRC_PATH)/scripts/minikconf.py \ +MINIKCONF = $(PYTHON) $(SRC_PATH)/scripts/minikconf.py $(SUBDIR_DEVICES_MAK): %/config-devices.mak: default-configs/%.mak $(MINIKCONF_DEPS) $(BUILD_DIR)/config-host.mak $(call quiet-command, $(MINIKCONF) $(MINIKCONF_ARGS) > $@.tmp, "GEN", "$@.tmp") -- 2.21.3
Having one entry per line helps reviews/refactors. As we are going to modify the MINIKCONF variables, split them now to ease further review. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- Makefile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 6c9d718b2c..7666f81e8a 100644 --- a/Makefile +++ b/Makefile @@ -418,12 +418,15 @@ MINIKCONF_ARGS = \ CONFIG_LINUX=$(CONFIG_LINUX) \ CONFIG_PVRDMA=$(CONFIG_PVRDMA) -MINIKCONF_INPUTS = $(SRC_PATH)/Kconfig.host $(SRC_PATH)/hw/Kconfig -MINIKCONF_DEPS = $(MINIKCONF_INPUTS) $(wildcard $(SRC_PATH)/hw/*/Kconfig) +MINIKCONF_INPUTS = $(SRC_PATH)/Kconfig.host \ + $(SRC_PATH)/hw/Kconfig +MINIKCONF_DEPS = $(MINIKCONF_INPUTS) \ + $(wildcard $(SRC_PATH)/hw/*/Kconfig) MINIKCONF = $(PYTHON) $(SRC_PATH)/scripts/minikconf.py $(SUBDIR_DEVICES_MAK): %/config-devices.mak: default-configs/%.mak $(MINIKCONF_DEPS) $(BUILD_DIR)/config-host.mak - $(call quiet-command, $(MINIKCONF) $(MINIKCONF_ARGS) > $@.tmp, "GEN", "$@.tmp") + $(call quiet-command, $(MINIKCONF) $(MINIKCONF_ARGS) \ + > $@.tmp, "GEN", "$@.tmp") $(call quiet-command, if test -f $@; then \ if cmp -s $@.old $@; then \ mv $@.tmp $@; \ -- 2.21.3
Move the accel selectors from the global Kconfig.host to their own Kconfig file. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- Makefile | 1 + Kconfig.host | 7 ------- accel/Kconfig | 6 ++++++ 3 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 accel/Kconfig diff --git a/Makefile b/Makefile index 7666f81e8a..648757f79a 100644 --- a/Makefile +++ b/Makefile @@ -419,6 +419,7 @@ MINIKCONF_ARGS = \ CONFIG_PVRDMA=$(CONFIG_PVRDMA) MINIKCONF_INPUTS = $(SRC_PATH)/Kconfig.host \ + $(SRC_PATH)/accel/Kconfig \ $(SRC_PATH)/hw/Kconfig MINIKCONF_DEPS = $(MINIKCONF_INPUTS) \ $(wildcard $(SRC_PATH)/hw/*/Kconfig) diff --git a/Kconfig.host b/Kconfig.host index 55136e037d..a6d871c399 100644 --- a/Kconfig.host +++ b/Kconfig.host @@ -2,9 +2,6 @@ # down to Kconfig. See also MINIKCONF_ARGS in the Makefile: # these two need to be kept in sync. -config KVM - bool - config LINUX bool @@ -31,10 +28,6 @@ config VHOST_KERNEL bool select VHOST -config XEN - bool - select FSDEV_9P if VIRTFS - config VIRTFS bool diff --git a/accel/Kconfig b/accel/Kconfig new file mode 100644 index 0000000000..c21802bb49 --- /dev/null +++ b/accel/Kconfig @@ -0,0 +1,6 @@ +config KVM + bool + +config XEN + bool + select FSDEV_9P if VIRTFS -- 2.21.3
Expose the CONFIG_TCG selector to let minikconf.py uses it. When building with --disable-tcg build, this helps to deselect devices that are TCG-dependent. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- Makefile | 1 + accel/Kconfig | 3 +++ 2 files changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 648757f79a..f8a45e1379 100644 --- a/Makefile +++ b/Makefile @@ -405,6 +405,7 @@ endif MINIKCONF_ARGS = \ $(CONFIG_MINIKCONF_MODE) \ $@ $*/config-devices.mak.d $< $(MINIKCONF_INPUTS) \ + CONFIG_TCG=$(CONFIG_TCG) \ CONFIG_KVM=$(CONFIG_KVM) \ CONFIG_SPICE=$(CONFIG_SPICE) \ CONFIG_IVSHMEM=$(CONFIG_IVSHMEM) \ diff --git a/accel/Kconfig b/accel/Kconfig index c21802bb49..2ad94a3839 100644 --- a/accel/Kconfig +++ b/accel/Kconfig @@ -1,3 +1,6 @@ +config TCG + bool + config KVM bool -- 2.21.3
Allow use of target-specific Kconfig file. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- v3: Use base-arch() to include TARGET_BASE_ARCH/Kconfig --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f8a45e1379..d5009cd304 100644 --- a/Makefile +++ b/Makefile @@ -423,11 +423,13 @@ MINIKCONF_INPUTS = $(SRC_PATH)/Kconfig.host \ $(SRC_PATH)/accel/Kconfig \ $(SRC_PATH)/hw/Kconfig MINIKCONF_DEPS = $(MINIKCONF_INPUTS) \ - $(wildcard $(SRC_PATH)/hw/*/Kconfig) + $(wildcard $(SRC_PATH)/hw/*/Kconfig) \ + $(wildcard $(SRC_PATH)/target/*/Kconfig) MINIKCONF = $(PYTHON) $(SRC_PATH)/scripts/minikconf.py $(SUBDIR_DEVICES_MAK): %/config-devices.mak: default-configs/%.mak $(MINIKCONF_DEPS) $(BUILD_DIR)/config-host.mak $(call quiet-command, $(MINIKCONF) $(MINIKCONF_ARGS) \ + $(wildcard $(SRC_PATH)/target/$(call base-arch, $(firstword $(subst -, ,$@)))/Kconfig) \ > $@.tmp, "GEN", "$@.tmp") $(call quiet-command, if test -f $@; then \ if cmp -s $@.old $@; then \ -- 2.21.3
From: Philippe Mathieu-Daudé <f4bug@amsat.org> The TCG helpers where added in b92e5a22ec3 in softmmu_template.h. probe_write() was added in there in 3b4afc9e75a to be moved out to accel/tcg/cputlb.c in 3b08f0a9254, and was later refactored as probe_access() in c25c283df0f. Since it is a TCG specific helper, add a stub to avoid failures when building without TCG, such: target/arm/helper.o: In function `probe_read': include/exec/exec-all.h:362: undefined reference to `probe_access' Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- Cc: Richard Henderson <rth@twiddle.net> Cc: Emilio G. Cota <cota@braap.org> Cc: Alex Bennée <alex.bennee@linaro.org> Cc: David Hildenbrand <david@redhat.com> --- accel/stubs/tcg-stub.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/accel/stubs/tcg-stub.c b/accel/stubs/tcg-stub.c index 677191a69c..e4bbf997aa 100644 --- a/accel/stubs/tcg-stub.c +++ b/accel/stubs/tcg-stub.c @@ -22,3 +22,10 @@ void tb_flush(CPUState *cpu) void tlb_set_dirty(CPUState *cpu, target_ulong vaddr) { } + +void *probe_access(CPUArchState *env, target_ulong addr, int size, + MMUAccessType access_type, int mmu_idx, uintptr_t retaddr) +{ + /* Handled by hardware accelerator. */ + g_assert_not_reached(); +} -- 2.21.3
On 5/22/20 6:37 PM, Philippe Mathieu-Daudé wrote: > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > Cc: Sergio Andres Gomez Del Real <sergio.g.delreal@gmail.com> > Cc: Vincent Palatin <vpalatin@chromium.org> > Cc: Yu Ning <yu.ning@intel.com> > Cc: Tao Wu <lepton@google.com> > Cc: haxm-team@intel.com > Cc: Colin Xu <colin.xu@intel.com> > Cc: Hang Yuan <hang.yuan@intel.com> > Cc: David Chou <david.j.chou@intel.com> FYI Hang Yuan and David Chou emails are bouncing. > Cc: Wenchao Wang <wenchao.wang@intel.com> > --- > MAINTAINERS | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/MAINTAINERS b/MAINTAINERS > index f7ee0c77f1..0377978201 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -426,6 +426,12 @@ F: accel/accel.c > F: accel/Makefile.objs > F: accel/stubs/Makefile.objs > > +HAX Accelerator > +S: Orphan This patch has been posted 4 times, first time more than 2 months ago: https://www.mail-archive.com/qemu-devel@nongnu.org/msg689009.html > +F: accel/stubs/hax-stub.c > +F: target/i386/hax-all.c > +F: include/sysemu/hax.h > + > X86 HVF CPUs > M: Roman Bolshakov <r.bolshakov@yadro.com> > S: Maintained >
On 5/22/20 9:37 AM, Philippe Mathieu-Daudé wrote: > + $(if $(call startwith,risc,$1),risc,\ Should be "riscv" not "risc". Especially the substitution. > + $(if $(call startwith,aarch64,$1),arm,\ > + $(if $(call startwith,x86_64,$1),i386,\ We don't have an exact equality function? r~
On 6/1/20 4:13 AM, Richard Henderson wrote: > On 5/22/20 9:37 AM, Philippe Mathieu-Daudé wrote: >> + $(if $(call startwith,risc,$1),risc,\ > > Should be "riscv" not "risc". Especially the substitution. Indeed. > >> + $(if $(call startwith,aarch64,$1),arm,\ >> + $(if $(call startwith,x86_64,$1),i386,\ > > We don't have an exact equality function? There is this one which returns y/n: # String testing functions: inputs to these can be any string; # the output is always either "y" or "n". Leading and trailing whitespace # is ignored when comparing strings. # String equality eq = $(if $(subst $2,,$1)$(subst $1,,$2),n,y) I'll add a simpler strequal().
On 6/1/20 9:26 AM, Philippe Mathieu-Daudé wrote: > On 6/1/20 4:13 AM, Richard Henderson wrote: >> On 5/22/20 9:37 AM, Philippe Mathieu-Daudé wrote: >>> + $(if $(call startwith,risc,$1),risc,\ >> >> Should be "riscv" not "risc". Especially the substitution. > > Indeed. > >> >>> + $(if $(call startwith,aarch64,$1),arm,\ >>> + $(if $(call startwith,x86_64,$1),i386,\ >> >> We don't have an exact equality function? For aarch64_be we want to use startwith(). I'll update x86_64. > > There is this one which returns y/n: > > # String testing functions: inputs to these can be any string; > # the output is always either "y" or "n". Leading and trailing whitespace > # is ignored when comparing strings. > # String equality > eq = $(if $(subst $2,,$1)$(subst $1,,$2),n,y) > > I'll add a simpler strequal(). >