[PATCH v2 00/28] Misc PPC exception and BookE MMU clean ups

BALATON Zoltan posted 28 patches 2 weeks, 2 days ago
There is a newer version of this series
hw/ppc/pegasos2.c        |   2 +-
target/ppc/cpu.h         |   1 -
target/ppc/cpu_init.c    |  65 ++--
target/ppc/excp_helper.c |  67 +---
target/ppc/helper.h      |   2 -
target/ppc/helper_regs.c |   1 -
target/ppc/internal.h    |  19 +-
target/ppc/mmu-hash32.c  |  47 +--
target/ppc/mmu_common.c  | 792 +++++++++++++++++++--------------------
target/ppc/mmu_helper.c  |  36 +-
target/ppc/translate.c   |  21 +-
11 files changed, 438 insertions(+), 615 deletions(-)
[PATCH v2 00/28] Misc PPC exception and BookE MMU clean ups
Posted by BALATON Zoltan 2 weeks, 2 days ago
This series does some further clean up mostly around BookE MMU to
untangle it from other MMU models. It also contains some other changes
that I've come up with while working on this. The first 3 patches are
from the last exception handling clean up series that were dropped due
to some error on CI but I'm not sure if that was because of some CI
infrastructure problem or some problem with the patches as the error
did not make much sense. So these patches are only rebased now, I made
no other change to them until the issue is understood better. The rest
are new patches I've added since tha last series. Please review.

v2:
- Fix user mode issue in patch 1 by keeping old behaviour for user mode
- Add some more MMU clean up patches

Regards,
BALATON Zoltan

BALATON Zoltan (28):
  target/ppc: Fix gen_sc to use correct nip
  target/ppc: Move patching nip from exception handler to helper_scv
  target/ppc: Simplify syscall exception handlers
  target/ppc: Remove unused helper
  target/ppc/mmu_common.c: Move calculation of a value closer to its
    usage
  target/ppc/mmu_common.c: Move calculation of a value closer to its
    usage
  target/ppc/mmu_common.c: Remove unneeded local variable
  target/ppc/mmu_common.c: Simplify checking for real mode
  target/ppc/mmu_common.c: Drop cases for unimplemented MPC8xx MMU
  target/ppc/mmu_common.c: Introduce mmu6xx_get_physical_address()
  target/ppc/mmu_common.c: Rename get_bat_6xx_tlb()
  target/ppc/mmu_common.c: Split out BookE cases before checking real
    mode
  target/ppc/mmu_common.c: Split off real mode cases in
    get_physical_address_wtlb()
  target/ppc/mmu_common.c: Inline and remove check_physical()
  target/ppc/mmu_common.c: Simplify mmubooke_get_physical_address()
  target/ppc/mmu_common.c: Simplify mmubooke206_get_physical_address()
  target/ppc/mmu_common.c: Fix misindented qemu_log_mask() calls
  target/ppc/mmu_common.c: Deindent ppc_jumbo_xlate()
  target/ppc/mmu_common.c: Replace hard coded constants in
    ppc_jumbo_xlate()
  target/ppc/mmu_common.c: Make get_physical_address_wtlb() static
  target/ppc: Move mmu_ctx_t definition to mmu_common.c
  target/ppc: Remove ppc_hash32_pp_prot() and reuse common function
  target/ppc/mmu_common.c: Split off BookE handling from
    ppc_jumbo_xlate()
  target/ppc/mmu_common.c: Remove BookE handling from
    get_physical_address_wtlb()
  target/ppc/mmu_common.c: Simplify ppc_booke_xlate()
  target/ppc/mmu_common.c: Move BookE MMU functions together
  target/ppc: Remove id_tlbs flag from CPU env
  target/ppc: Split off common 4xx TLB init

 hw/ppc/pegasos2.c        |   2 +-
 target/ppc/cpu.h         |   1 -
 target/ppc/cpu_init.c    |  65 ++--
 target/ppc/excp_helper.c |  67 +---
 target/ppc/helper.h      |   2 -
 target/ppc/helper_regs.c |   1 -
 target/ppc/internal.h    |  19 +-
 target/ppc/mmu-hash32.c  |  47 +--
 target/ppc/mmu_common.c  | 792 +++++++++++++++++++--------------------
 target/ppc/mmu_helper.c  |  36 +-
 target/ppc/translate.c   |  21 +-
 11 files changed, 438 insertions(+), 615 deletions(-)

-- 
2.30.9
Re: [PATCH v2 00/28] Misc PPC exception and BookE MMU clean ups
Posted by Nicholas Piggin 1 week, 4 days ago
On Thu May 2, 2024 at 9:43 AM AEST, BALATON Zoltan wrote:
> This series does some further clean up mostly around BookE MMU to
> untangle it from other MMU models. It also contains some other changes
> that I've come up with while working on this. The first 3 patches are
> from the last exception handling clean up series that were dropped due
> to some error on CI but I'm not sure if that was because of some CI
> infrastructure problem or some problem with the patches as the error
> did not make much sense. So these patches are only rebased now, I made
> no other change to them until the issue is understood better. The rest
> are new patches I've added since tha last series. Please review.

Not CI infrastructure as far as I could tell it's upstream gitlab.
But I could not figure out how to reproduce at the time... I ended
up running out of time to look too closely though.

I think I won't take the first 2, yes arguably the CPU does execute
the sc instruction, but it's actually a good rule for the exception
handler to be invoked with the nip that caused the exception, and
SRR0/1 to be set by the handler according to semantics.

Thanks,
Nick

>
> v2:
> - Fix user mode issue in patch 1 by keeping old behaviour for user mode
> - Add some more MMU clean up patches
>
> Regards,
> BALATON Zoltan
>
> BALATON Zoltan (28):
>   target/ppc: Fix gen_sc to use correct nip
>   target/ppc: Move patching nip from exception handler to helper_scv
>   target/ppc: Simplify syscall exception handlers
>   target/ppc: Remove unused helper
>   target/ppc/mmu_common.c: Move calculation of a value closer to its
>     usage
>   target/ppc/mmu_common.c: Move calculation of a value closer to its
>     usage
>   target/ppc/mmu_common.c: Remove unneeded local variable
>   target/ppc/mmu_common.c: Simplify checking for real mode
>   target/ppc/mmu_common.c: Drop cases for unimplemented MPC8xx MMU
>   target/ppc/mmu_common.c: Introduce mmu6xx_get_physical_address()
>   target/ppc/mmu_common.c: Rename get_bat_6xx_tlb()
>   target/ppc/mmu_common.c: Split out BookE cases before checking real
>     mode
>   target/ppc/mmu_common.c: Split off real mode cases in
>     get_physical_address_wtlb()
>   target/ppc/mmu_common.c: Inline and remove check_physical()
>   target/ppc/mmu_common.c: Simplify mmubooke_get_physical_address()
>   target/ppc/mmu_common.c: Simplify mmubooke206_get_physical_address()
>   target/ppc/mmu_common.c: Fix misindented qemu_log_mask() calls
>   target/ppc/mmu_common.c: Deindent ppc_jumbo_xlate()
>   target/ppc/mmu_common.c: Replace hard coded constants in
>     ppc_jumbo_xlate()
>   target/ppc/mmu_common.c: Make get_physical_address_wtlb() static
>   target/ppc: Move mmu_ctx_t definition to mmu_common.c
>   target/ppc: Remove ppc_hash32_pp_prot() and reuse common function
>   target/ppc/mmu_common.c: Split off BookE handling from
>     ppc_jumbo_xlate()
>   target/ppc/mmu_common.c: Remove BookE handling from
>     get_physical_address_wtlb()
>   target/ppc/mmu_common.c: Simplify ppc_booke_xlate()
>   target/ppc/mmu_common.c: Move BookE MMU functions together
>   target/ppc: Remove id_tlbs flag from CPU env
>   target/ppc: Split off common 4xx TLB init
>
>  hw/ppc/pegasos2.c        |   2 +-
>  target/ppc/cpu.h         |   1 -
>  target/ppc/cpu_init.c    |  65 ++--
>  target/ppc/excp_helper.c |  67 +---
>  target/ppc/helper.h      |   2 -
>  target/ppc/helper_regs.c |   1 -
>  target/ppc/internal.h    |  19 +-
>  target/ppc/mmu-hash32.c  |  47 +--
>  target/ppc/mmu_common.c  | 792 +++++++++++++++++++--------------------
>  target/ppc/mmu_helper.c  |  36 +-
>  target/ppc/translate.c   |  21 +-
>  11 files changed, 438 insertions(+), 615 deletions(-)
Re: [PATCH v2 00/28] Misc PPC exception and BookE MMU clean ups
Posted by BALATON Zoltan 1 week, 4 days ago
On Tue, 7 May 2024, Nicholas Piggin wrote:
> On Thu May 2, 2024 at 9:43 AM AEST, BALATON Zoltan wrote:
>> This series does some further clean up mostly around BookE MMU to
>> untangle it from other MMU models. It also contains some other changes
>> that I've come up with while working on this. The first 3 patches are
>> from the last exception handling clean up series that were dropped due
>> to some error on CI but I'm not sure if that was because of some CI
>> infrastructure problem or some problem with the patches as the error
>> did not make much sense. So these patches are only rebased now, I made
>> no other change to them until the issue is understood better. The rest
>> are new patches I've added since tha last series. Please review.
>
> Not CI infrastructure as far as I could tell it's upstream gitlab.
> But I could not figure out how to reproduce at the time... I ended
> up running out of time to look too closely though.

I could reproduce it at the end so it wasn't CI failure but I don't 
completely understand what is it.

> I think I won't take the first 2, yes arguably the CPU does execute
> the sc instruction, but it's actually a good rule for the exception
> handler to be invoked with the nip that caused the exception, and
> SRR0/1 to be set by the handler according to semantics.
>>
>> v2:
>> - Fix user mode issue in patch 1 by keeping old behaviour for user mode

I forgot to change the blurb above but in this v2 version I think I've 
solved that problem as noted here but I don't know why the user mode SC is 
different and could not find where is it handled. This version seems to 
work though.

Regards,
BALATON Zoltan