qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: target/ppc: sPAPR invalid function calls when compiling without TCG


From: David Gibson
Subject: Re: target/ppc: sPAPR invalid function calls when compiling without TCG
Date: Mon, 19 Apr 2021 15:17:29 +1000

On Wed, Apr 14, 2021 at 06:28:26PM +0000, Lucas Mateus Martins Araujo e Castro 
wrote:
> Hi, I have been working on billionai's patch to enable the --disable-tcg 
> option on PowerPC and one of the problems is that 5 files in hw/ppc use 
> functions implemented in mmu-hash64.c which is not compiled with 
> --disable-tcg, I'd like to know how to correct the spapr function call, 
> should I
> 
>   *   change the calls to generic functions that should call the correct 
> function based on if kvm is being used or not,
>   *   should I just implement said functions independently of mmu-hash64.c 
> and always call them,
>   *   should I just implement said functions independently of mmu-hash64.c 
> and only call it with --disable-tcg option turned on,
>   *   find a way to not have said calls when compiling without TCG as they're 
> not necessary,
>   *   just create a stub
> 
> Here's when each function is called by each .c:
> spapr.c:
>     function do_lpcr_sync call ppc_store_lpcr

I think ppc_store_lpcr() needs to be moved so that it's compiled with
KVM as well, but #ifdef out the hreg_compute_hflags() line in that case.

> 
> spapr_hcall.c:
>     function h_enter call ppc_hash64_hpte_page_shift_noslb, 
> ppc_hash64_map_hptes and ppc_hash64_unmap_hptes
>     function remove_hpte call ppc_hash64_map_hptes, ppc_hash64_unmap_hptes 
> and ppc_hash64_tlb_flush_hpte
>     function h_protect call ppc_hash64_map_hptes, ppc_hash64_unmap_hptes and 
> ppc_hash64_tlb_flush_hpte
>     function h_read call ppc_hash64_map_hptes and ppc_hash64_unmap_hptes
>     function rehash_hpte call ppc_hash64_hpte_page_shift_noslb
>     function rehash_hpt call ppc_hash64_map_hptes and ppc_hash64_unmap_hptes

h_enter, remove_hpte, h_protect, h_read and rehash_hpte should never
be called for a KVM guest (KVM will intercept the relevant hcalls
before they reach qemu).  I think it would make sense to split of a
TCG only portion of spapr_hcall.c into a new file.  You'll then
probably need !TCG stubs for those hypercalls, which should trip a
fatal error (if KVM hasn't handled the calls, there's nothing we can
do that will salvage the situation).

> spapr_rtas.c:
>     function rtas_start_cpu call ppc_store_lpcr
>     function rtas_stop_self call ppc_store_lpcr

As above.

> spapr_spapr_cpu_core.c
>     function spapr_reset_vcpu call ppc_store_lpcr
>     function spapr_cpu_set_entry_state call ppc_store_lpcr

As above.

> spapr_caps.c:
>     function cap_large_decr_cpu_apply call ppc_store_lpcr

As above.

>     function cap_hpt_maxpagesize_cpu_apply call ppc_hash64_filter_pagesizes

Ok, you definitely need the filter_pagesizes logic, even with KVM, so
that will also have to be moved out of the TCG only file.

-- 
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

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]