Message ID | 20190615154352.26824-24-philmd@redhat.com |
---|---|
State | New |
Headers | show |
Series | Support disabling TCG on ARM | expand |
Philippe Mathieu-Daudé <philmd@redhat.com> writes: > While it might be normal to disable PSCI on KVM, I doubt the > VFP helpers are correct ;) > > Anyway this allow to link the binary and run a KVM guest. But also: /home/alex/lsrc/qemu.git/target/arm/helper.c: In function ‘S1_ptw_translate’: /home/alex/lsrc/qemu.git/target/arm/helper.c:8794:15: note: parameter passing for argument of type ‘MemTxAttrs’ {aka ‘struct MemTxAttrs’} changed in GCC 9.1 8794 | static hwaddr S1_ptw_translate(CPUARMState *env, ARMMMUIdx mmu_idx, | ^~~~~~~~~~~~~~~~ LINK x86_64-linux-user/qemu-x86_64 LINK xtensa-linux-user/qemu-xtensa /home/alex/lsrc/qemu.git/target/arm/helper.c: In function ‘S1_ptw_translate’: /home/alex/lsrc/qemu.git/target/arm/helper.c:8794:15: note: parameter passing for argument of type ‘MemTxAttrs’ {aka ‘struct MemTxAttrs’} changed in GCC 9.1 8794 | static hwaddr S1_ptw_translate(CPUARMState *env, ARMMMUIdx mmu_idx, | ^~~~~~~~~~~~~~~~ LINK xtensaeb-linux-user/qemu-xtensaeb LINK arm-linux-user/qemu-arm LINK aarch64-linux-user/qemu-aarch64 LINK armeb-linux-user/qemu-armeb LINK aarch64_be-linux-user/qemu-aarch64_be LINK arm-softmmu/qemu-system-arm LINK aarch64-softmmu/qemu-system-aarch64 /usr/lib/gcc/aarch64-unknown-linux-gnu/9.1.0/../../../../aarch64-unknown-linux-gnu/bin/ld: target/arm/kvm-missing.o: in function `arm_is_psci_call': /home/alex/lsrc/qemu.git/target/arm/kvm-missing.c:17: multiple definition of `arm_is_psci_call'; target/arm/psci.o:/home/alex/lsrc/qemu.git/target/arm/psci.c:36: first defined here /usr/lib/gcc/aarch64-unknown-linux-gnu/9.1.0/../../../../aarch64-unknown-linux-gnu/bin/ld: target/arm/kvm-missing.o: in function `arm_handle_psci_call': /home/alex/lsrc/qemu.git/target/arm/kvm-missing.c:20: multiple definition of `arm_handle_psci_call'; target/arm/psci.o:/home/alex/lsrc/qemu.git/target/arm/psci.c:77: first defined here /usr/lib/gcc/aarch64-unknown-linux-gnu/9.1.0/../../../../aarch64-unknown-linux-gnu/bin/ld: target/arm/vfp_helper.o: in function `vfp_get_fpscr': /home/alex/lsrc/qemu.git/target/arm/vfp_helper.c:75: multiple definition of `vfp_get_fpscr'; target/arm/kvm-missing.o:/home/alex/lsrc/qemu.git/target/arm/kvm-missing.c:8: first defined here /usr/lib/gcc/aarch64-unknown-linux-gnu/9.1.0/../../../../aarch64-unknown-linux-gnu/bin/ld: target/arm/vfp_helper.o: in function `vfp_set_fpscr': /home/alex/lsrc/qemu.git/target/arm/vfp_helper.c:185: multiple definition of `vfp_set_fpscr'; target/arm/kvm-missing.o:/home/alex/lsrc/qemu.git/target/arm/kvm-missing.c:12: first defined here collect2: error: ld returned 1 exit status make[1]: *** [Makefile:204: qemu-system-aarch64] Error 1 make: *** [Makefile:472: subdir-aarch64-softmmu] Error 2 On AArch64 host with TCG enabled.... > > Tested using: > > $ make pc-bios/edk2-aarch64-code.fd > $ dd if=/dev/zero of=flash1.img bs=1M count=64 > $ aarch64-softmmu/qemu-system-aarch64 \ > -nographic \ > -enable-kvm \ > -M virt,gic-version=3 \ > -cpu host \ > \ > -pflash pc-bios/edk2-aarch64-code.fd \ > -pflash flash1.img \ > -drive if=none,file=bionic-server-cloudimg-arm64.img,id=hd0 \ > -device virtio-blk-device,drive=hd0 \ > \ > -netdev type=user,id=net0 \ > -device virtio-net-device,netdev=net0 > > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > target/arm/Makefile.objs | 1 + > target/arm/kvm-missing.c | 22 ++++++++++++++++++++++ > 2 files changed, 23 insertions(+) > create mode 100644 target/arm/kvm-missing.c > > diff --git a/target/arm/Makefile.objs b/target/arm/Makefile.objs > index b8aa9c032a..bf1cad2909 100644 > --- a/target/arm/Makefile.objs > +++ b/target/arm/Makefile.objs > @@ -6,6 +6,7 @@ obj-$(CONFIG_SOFTMMU) += machine.o arch_dump.o monitor.o arm-powerctl.o > obj-$(call land,$(CONFIG_TCG),$(CONFIG_SOFTMMU)) += psci.o > > obj-$(CONFIG_KVM) += kvm.o > +obj-$(CONFIG_KVM) += kvm-missing.o > obj-$(call land,$(CONFIG_KVM),$(call lnot,$(TARGET_AARCH64))) += kvm32.o > obj-$(call land,$(CONFIG_KVM),$(TARGET_AARCH64)) += kvm64.o > obj-$(call lnot,$(CONFIG_KVM)) += kvm-stub.o > diff --git a/target/arm/kvm-missing.c b/target/arm/kvm-missing.c > new file mode 100644 > index 0000000000..0b32cd4e9c > --- /dev/null > +++ b/target/arm/kvm-missing.c > @@ -0,0 +1,22 @@ > +#include "qemu/osdep.h" > +#include "cpu.h" > +#include "internals.h" > + > +uint32_t vfp_get_fpscr(CPUARMState *env) > +{ > + return 0; > +} > + > +void vfp_set_fpscr(CPUARMState *env, uint32_t val) > +{ > +} > + > +bool arm_is_psci_call(ARMCPU *cpu, int excp_type) > +{ > + return false; > +} > + > +void arm_handle_psci_call(ARMCPU *cpu) > +{ > + abort(); > +} -- Alex Bennée
diff --git a/target/arm/Makefile.objs b/target/arm/Makefile.objs index b8aa9c032a..bf1cad2909 100644 --- a/target/arm/Makefile.objs +++ b/target/arm/Makefile.objs @@ -6,6 +6,7 @@ obj-$(CONFIG_SOFTMMU) += machine.o arch_dump.o monitor.o arm-powerctl.o obj-$(call land,$(CONFIG_TCG),$(CONFIG_SOFTMMU)) += psci.o obj-$(CONFIG_KVM) += kvm.o +obj-$(CONFIG_KVM) += kvm-missing.o obj-$(call land,$(CONFIG_KVM),$(call lnot,$(TARGET_AARCH64))) += kvm32.o obj-$(call land,$(CONFIG_KVM),$(TARGET_AARCH64)) += kvm64.o obj-$(call lnot,$(CONFIG_KVM)) += kvm-stub.o diff --git a/target/arm/kvm-missing.c b/target/arm/kvm-missing.c new file mode 100644 index 0000000000..0b32cd4e9c --- /dev/null +++ b/target/arm/kvm-missing.c @@ -0,0 +1,22 @@ +#include "qemu/osdep.h" +#include "cpu.h" +#include "internals.h" + +uint32_t vfp_get_fpscr(CPUARMState *env) +{ + return 0; +} + +void vfp_set_fpscr(CPUARMState *env, uint32_t val) +{ +} + +bool arm_is_psci_call(ARMCPU *cpu, int excp_type) +{ + return false; +} + +void arm_handle_psci_call(ARMCPU *cpu) +{ + abort(); +}
While it might be normal to disable PSCI on KVM, I doubt the VFP helpers are correct ;) Anyway this allow to link the binary and run a KVM guest. Tested using: $ make pc-bios/edk2-aarch64-code.fd $ dd if=/dev/zero of=flash1.img bs=1M count=64 $ aarch64-softmmu/qemu-system-aarch64 \ -nographic \ -enable-kvm \ -M virt,gic-version=3 \ -cpu host \ \ -pflash pc-bios/edk2-aarch64-code.fd \ -pflash flash1.img \ -drive if=none,file=bionic-server-cloudimg-arm64.img,id=hd0 \ -device virtio-blk-device,drive=hd0 \ \ -netdev type=user,id=net0 \ -device virtio-net-device,netdev=net0 Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- target/arm/Makefile.objs | 1 + target/arm/kvm-missing.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 target/arm/kvm-missing.c