[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH v2 0/2] hw/ppc: code motion to compile without TCG
From: |
David Gibson |
Subject: |
Re: [RFC PATCH v2 0/2] hw/ppc: code motion to compile without TCG |
Date: |
Wed, 5 May 2021 14:42:36 +1000 |
On Mon, May 03, 2021 at 07:21:11PM -0300, Fabiano Rosas wrote:
> "Lucas Mateus Castro (alqotel)" <lucas.araujo@eldorado.org.br> writes:
>
> > After the feedback from v1 I reworked the patch with suggested ideas and
> > this version has less duplicated code and is overall simpler.
> >
> > This patch series is still a WIP, there are still 2 main problems I am
> > trying to solve, I'll mention them in their respective patches.
> >
> > The aim of these patches is to progress toward enabling disable-tcg on
> > PPC by solving errors in hw/ppc with that option.
> >
> > As a WIP comments are welcome.
> >
> > Lucas Mateus Castro (alqotel) (2):
> > target/ppc: Moved functions out of mmu-hash64
> > hw/ppc: Moved TCG code to spapr_hcall_tcg
> >
> > hw/ppc/meson.build | 3 +
> > hw/ppc/spapr.c | 1 +
> > hw/ppc/spapr_caps.c | 1 +
> > hw/ppc/spapr_cpu_core.c | 1 +
> > hw/ppc/spapr_hcall.c | 301 ++--------------------------------
> > hw/ppc/spapr_hcall_tcg.c | 343 +++++++++++++++++++++++++++++++++++++++
> > hw/ppc/spapr_rtas.c | 1 +
> > target/ppc/meson.build | 1 +
> > target/ppc/mmu-hash64.c | 81 +--------
> > target/ppc/mmu-hash64.h | 6 -
> > target/ppc/mmu-misc.c | 86 ++++++++++
> > target/ppc/mmu-misc.h | 22 +++
> > 12 files changed, 478 insertions(+), 369 deletions(-)
> > create mode 100644 hw/ppc/spapr_hcall_tcg.c
> > create mode 100644 target/ppc/mmu-misc.c
> > create mode 100644 target/ppc/mmu-misc.h
>
> This is the list of hypercalls registered with spapr_register_hypercall
> and whether they are implemented by KVM HV, KVM PR or none. I also list
> whether the KVM hcall uses the QEMU implementation as a fallback. Maybe
> it will be helpful to this discussion.
>
> (This is from just looking at the code, so take it with a grain of salt)
>
> H_ADD_LOGICAL_LAN_BUFFER - not impl. by KVM
> H_CHANGE_LOGICAL_LAN_MAC - not impl. by KVM
> H_ENABLE_CRQ - not impl. by KVM
> H_FREE_CRQ - not impl. by KVM
> H_FREE_LOGICAL_LAN - not impl. by KVM
> H_GET_CPU_CHARACTERISTICS - not impl. by KVM
> H_GET_TERM_CHAR - not impl. by KVM
> H_HOME_NODE_ASSOCIATIVITY - not impl. by KVM
> H_INT_ESB - not impl. by KVM
> H_INT_GET_QUEUE_INFO - not impl. by KVM
> H_INT_GET_SOURCE_CONFIG - not impl. by KVM
> H_INT_GET_SOURCE_INFO - not impl. by KVM
> H_INT_RESET - not impl. by KVM
> H_INT_SET_QUEUE_CONFIG - not impl. by KVM
> H_INT_SET_SOURCE_CONFIG - not impl. by KVM
> H_INT_SYNC - not impl. by KVM
> H_JOIN - not impl. by KVM
> H_LOGICAL_CACHE_LOAD - not impl. by KVM
> H_LOGICAL_CACHE_STORE - not impl. by KVM
> H_LOGICAL_DCBF - not impl. by KVM
> H_LOGICAL_ICBI - not impl. by KVM
> H_MULTICAST_CTRL - not impl. by KVM
> H_PUT_TERM_CHAR - not impl. by KVM
> H_REGISTER_LOGICAL_LAN - not impl. by KVM
> H_REGISTER_PROC_TBL - not impl. by KVM
> H_REG_CRQ - not impl. by KVM
> H_RESIZE_HPT_COMMIT - not impl. by KVM
> H_RESIZE_HPT_PREPARE - not impl. by KVM
> H_SCM_BIND_MEM - not impl. by KVM
> H_SCM_READ_METADATA - not impl. by KVM
> H_SCM_UNBIND_ALL - not impl. by KVM
> H_SCM_WRITE_METADATA - not impl. by KVM
> H_SEND_CRQ - not impl. by KVM
> H_SEND_LOGICAL_LAN - not impl. by KVM
> H_SET_SPRG0 - not impl. by KVM
> H_SIGNAL_SYS_RESET - not impl. by KVM
> H_VIO_SIGNAL - not impl. by KVM
>
> H_CAS - not impl. by KVM | called by SLOF only
> H_LOGICAL_MEMOP - not impl. by KVM | called by SLOF only
> H_TPM_COMM - not impl. by KVM | called by UV only
> H_UPDATE_DT - not impl. by KVM | called by SLOF only
>
> H_INT_GET_OS_REPORTING_LINE - not impl. by KVM | not called by linux/SLOF/UV
> H_INT_GET_QUEUE_CONFIG - not impl. by KVM | not called by linux/SLOF/UV
> H_INT_SET_OS_REPORTING_LINE - not impl. by KVM | not called by linux/SLOF/UV
> H_SCM_UNBIND_MEM - not impl. by KVM | not called by linux/SLOF/UV
>
> H_GET_TCE - HV | not impl. by PR | QEMU fallback
> H_SET_MODE - HV | not impl. by PR | QEMU fallback
> H_CONFER - HV | not impl. by PR
> H_PAGE_INIT - HV | not impl. by PR
> H_PROD - HV | not impl. by PR
> H_RANDOM - HV | not impl. by PR
> H_READ - HV | not impl. by PR
> H_REGISTER_VPA - HV | not impl. by PR
> H_SET_DABR - HV | not impl. by PR
> H_SET_XDABR - HV | not impl. by PR
>
> H_CPPR - HV | PR | QEMU fallback
> H_EOI - HV | PR | QEMU fallback
> H_IPI - HV | PR | QEMU fallback
> H_IPOLL - HV | PR | QEMU fallback
> H_LOGICAL_CI_LOAD - HV | PR | QEMU fallback
> H_LOGICAL_CI_STORE - HV | PR | QEMU fallback
> H_PUT_TCE - HV | PR | QEMU fallback
> H_PUT_TCE_INDIRECT - HV | PR | QEMU fallback
> H_RTAS - HV | PR | QEMU fallback
> H_STUFF_TCE - HV | PR | QEMU fallback
> H_XIRR - HV | PR | QEMU fallback
> H_XIRR_X - HV | PR | QEMU fallback
>
> H_BULK_REMOVE - HV | PR
> H_CEDE - HV | PR
> H_ENTER - HV | PR
> H_PROTECT - HV | PR
> H_REMOVE - HV | PR
>
> H_CLEAN_SLB - never called/implemented, added along with
> H_REGISTER_PROC_TBL
> H_INVALIDATE_PID - never called/implemented, added along with
> H_REGISTER_PROC_TBL
Thanks for summarizing this, Fabiano.
> PS: we could perhaps use this information to annotate
> qemu/include/spapr.h. I can send a patch if people find it useful.
I don't want to include the whole set of information here in qemu,
since exactly what's implemented in KVM is subject to change, and in
most cases qemu doesn't care about that.
It would be worth annotating those hcalls which qemu *relies* on being
provided by KVM. As I've noted this is basically just the hash MMU calls:
H_ENTER
H_REMOVE
H_BULK_REMOVE
H_PROTECT
H_READ
H_RESIZE_HPT_PREPARE
H_RESIZE_HPT_COMMIT
Secondarily there's a handful of extra hypercalls which are probably
pointless but harmless to be implemented in qemu for a KVM guest.
They shouldn't be as intimately tied to TCG or the softmmu code as the
above, so dealing with them can wait until a later:
H_CEDE
H_CONFER
H_PROD
H_REGISTER_VPA
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature