From: "Nicholas Piggin" <npiggin@gmail.com>
To: "BALATON Zoltan" <balaton@eik.bme.hu>, <qemu-devel@nongnu.org>,
<qemu-ppc@nongnu.org>
Cc: "Daniel Henrique Barboza" <danielhb413@gmail.com>
Subject: Re: [PATCH 25/43] target/ppc: Remove bat_size_prot()
Date: Thu, 04 Jul 2024 16:55:53 +1000 [thread overview]
Message-ID: <D2GK3WB9X38H.67PWCTA8385M@gmail.com> (raw)
In-Reply-To: <bdb79c79ec33b22071f1ffc641dcfefe9f90ec84.1716763435.git.balaton@eik.bme.hu>
On Mon May 27, 2024 at 9:13 AM AEST, BALATON Zoltan wrote:
> There is already a hash32_bat_prot() function that does most if this
> and the rest can be inlined. Export hash32_bat_prot() and rename it to
> ppc_hash32_bat_prot() to match other functions and use it in
> get_bat_6xx_tlb().
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
>
> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
> ---
> target/ppc/mmu-hash32.c | 18 +-------------
> target/ppc/mmu-hash32.h | 14 +++++++++++
> target/ppc/mmu_common.c | 52 ++++++++++-------------------------------
> 3 files changed, 27 insertions(+), 57 deletions(-)
>
> diff --git a/target/ppc/mmu-hash32.c b/target/ppc/mmu-hash32.c
> index 160311de87..6f0f0bbb00 100644
> --- a/target/ppc/mmu-hash32.c
> +++ b/target/ppc/mmu-hash32.c
> @@ -48,22 +48,6 @@ static target_ulong hash32_bat_size(int mmu_idx,
> return BATU32_BEPI & ~((batu & BATU32_BL) << 15);
> }
>
> -static int hash32_bat_prot(PowerPCCPU *cpu,
> - target_ulong batu, target_ulong batl)
> -{
> - int pp, prot;
> -
> - prot = 0;
> - pp = batl & BATL32_PP;
> - if (pp != 0) {
> - prot = PAGE_READ | PAGE_EXEC;
> - if (pp == 0x2) {
> - prot |= PAGE_WRITE;
> - }
> - }
> - return prot;
> -}
> -
> static hwaddr ppc_hash32_bat_lookup(PowerPCCPU *cpu, target_ulong ea,
> MMUAccessType access_type, int *prot,
> int mmu_idx)
> @@ -95,7 +79,7 @@ static hwaddr ppc_hash32_bat_lookup(PowerPCCPU *cpu, target_ulong ea,
> if (mask && ((ea & mask) == (batu & BATU32_BEPI))) {
> hwaddr raddr = (batl & mask) | (ea & ~mask);
>
> - *prot = hash32_bat_prot(cpu, batu, batl);
> + *prot = ppc_hash32_bat_prot(batu, batl);
>
> return raddr & TARGET_PAGE_MASK;
> }
> diff --git a/target/ppc/mmu-hash32.h b/target/ppc/mmu-hash32.h
> index 5902cf8333..bd75f7d647 100644
> --- a/target/ppc/mmu-hash32.h
> +++ b/target/ppc/mmu-hash32.h
> @@ -143,6 +143,20 @@ static inline int ppc_hash32_prot(bool key, int pp, bool nx)
> return nx ? prot : prot | PAGE_EXEC;
> }
>
> +static inline int ppc_hash32_bat_prot(target_ulong batu, target_ulong batl)
> +{
> + int prot = 0;
> + int pp = batl & BATL32_PP;
> +
> + if (pp) {
> + prot = PAGE_READ | PAGE_EXEC;
> + if (pp == 0x2) {
> + prot |= PAGE_WRITE;
> + }
> + }
> + return prot;
> +}
> +
> typedef struct {
> uint32_t pte0, pte1;
> } ppc_hash_pte32_t;
> diff --git a/target/ppc/mmu_common.c b/target/ppc/mmu_common.c
> index aa002bba35..624ed51a92 100644
> --- a/target/ppc/mmu_common.c
> +++ b/target/ppc/mmu_common.c
> @@ -193,40 +193,13 @@ static int ppc6xx_tlb_check(CPUPPCState *env, hwaddr *raddr, int *prot,
> return ret;
> }
>
> -/* Perform BAT hit & translation */
> -static inline void bat_size_prot(CPUPPCState *env, target_ulong *blp,
> - int *validp, int *protp, target_ulong *BATu,
> - target_ulong *BATl)
> -{
> - target_ulong bl;
> - int pp, valid, prot;
> -
> - bl = (*BATu & BATU32_BL) << 15;
> - valid = 0;
> - prot = 0;
> - if ((!FIELD_EX64(env->msr, MSR, PR) && (*BATu & 0x00000002)) ||
> - (FIELD_EX64(env->msr, MSR, PR) && (*BATu & 0x00000001))) {
> - valid = 1;
> - pp = *BATl & 0x00000003;
> - if (pp != 0) {
> - prot = PAGE_READ | PAGE_EXEC;
> - if (pp == 0x2) {
> - prot |= PAGE_WRITE;
> - }
> - }
> - }
> - *blp = bl;
> - *validp = valid;
> - *protp = prot;
> -}
> -
> static int get_bat_6xx_tlb(CPUPPCState *env, mmu_ctx_t *ctx,
> - target_ulong eaddr, MMUAccessType access_type)
> + target_ulong eaddr, MMUAccessType access_type,
> + bool pr)
> {
> target_ulong *BATlt, *BATut, *BATu, *BATl;
> target_ulong BEPIl, BEPIu, bl;
> - int i, valid, prot;
> - int ret = -1;
> + int i, ret = -1;
> bool ifetch = access_type == MMU_INST_FETCH;
>
> qemu_log_mask(CPU_LOG_MMU, "%s: %cBAT v " TARGET_FMT_lx "\n", __func__,
> @@ -243,20 +216,19 @@ static int get_bat_6xx_tlb(CPUPPCState *env, mmu_ctx_t *ctx,
> BATl = &BATlt[i];
> BEPIu = *BATu & BATU32_BEPIU;
> BEPIl = *BATu & BATU32_BEPIL;
> - bat_size_prot(env, &bl, &valid, &prot, BATu, BATl);
> qemu_log_mask(CPU_LOG_MMU, "%s: %cBAT%d v " TARGET_FMT_lx " BATu "
> TARGET_FMT_lx " BATl " TARGET_FMT_lx "\n", __func__,
> ifetch ? 'I' : 'D', i, eaddr, *BATu, *BATl);
> - if ((eaddr & BATU32_BEPIU) == BEPIu &&
> - ((eaddr & BATU32_BEPIL) & ~bl) == BEPIl) {
> - /* BAT matches */
> - if (valid != 0) {
> + bl = (*BATu & BATU32_BL) << 15;
> + if ((!pr && (*BATu & BATU32_VS)) || (pr && (*BATu & BATU32_VP))) {
> + if ((eaddr & BATU32_BEPIU) == BEPIu &&
> + ((eaddr & BATU32_BEPIL) & ~bl) == BEPIl) {
> /* Get physical address */
> ctx->raddr = (*BATl & BATU32_BEPIU) |
> ((eaddr & BATU32_BEPIL & bl) | (*BATl & BATU32_BEPIL)) |
> (eaddr & 0x0001F000);
> /* Compute access rights */
> - ctx->prot = prot;
> + ctx->prot = ppc_hash32_bat_prot(*BATu, *BATl);
> if (check_prot_access_type(ctx->prot, access_type)) {
> qemu_log_mask(CPU_LOG_MMU, "BAT %d match: r " HWADDR_FMT_plx
> " prot=%c%c\n", i, ctx->raddr,
> @@ -300,16 +272,16 @@ static int mmu6xx_get_physical_address(CPUPPCState *env, mmu_ctx_t *ctx,
> PowerPCCPU *cpu = env_archcpu(env);
> hwaddr hash;
> target_ulong vsid, sr, pgidx, ptem;
> - bool key, pr, ds, nx;
> + bool key, ds, nx;
> + bool pr = FIELD_EX64(env->msr, MSR, PR);
>
> /* First try to find a BAT entry if there are any */
> - if (env->nb_BATs && get_bat_6xx_tlb(env, ctx, eaddr, access_type) == 0) {
> + if (env->nb_BATs &&
> + get_bat_6xx_tlb(env, ctx, eaddr, access_type, pr) == 0) {
> return 0;
> }
>
> /* Perform segment based translation when no BATs matched */
> - pr = FIELD_EX64(env->msr, MSR, PR);
> -
> sr = env->sr[eaddr >> 28];
> key = ppc_hash32_key(pr, sr);
> *keyp = key;
next prev parent reply other threads:[~2024-07-04 6:56 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-26 23:12 [PATCH 00/43] Remaining MMU clean up patches BALATON Zoltan
2024-05-26 23:12 ` [PATCH 01/43] target/ppc: Reorganise and rename ppc_hash32_pp_prot() BALATON Zoltan
2024-07-04 5:57 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 02/43] target/ppc/mmu_common.c: Remove local name for a constant BALATON Zoltan
2024-07-04 5:57 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 03/43] target/ppc/mmu_common.c: Remove single use local variable BALATON Zoltan
2024-07-04 5:58 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 04/43] " BALATON Zoltan
2024-07-04 5:58 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 05/43] target/ppc/mmu_common.c: Remove another " BALATON Zoltan
2024-07-04 5:59 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 06/43] target/ppc/mmu_common.c: Remove yet " BALATON Zoltan
2024-07-04 5:59 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 07/43] target/ppc/mmu_common.c: Return directly in ppc6xx_tlb_pte_check() BALATON Zoltan
2024-07-04 6:00 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 08/43] target/ppc/mmu_common.c: Simplify ppc6xx_tlb_pte_check() BALATON Zoltan
2024-07-04 6:02 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 09/43] target/ppc/mmu_common.c: Remove unused field from mmu_ctx_t BALATON Zoltan
2024-07-04 6:02 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 10/43] target/ppc/mmu_common.c: Remove hash " BALATON Zoltan
2024-07-04 6:03 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 11/43] target/ppc/mmu_common.c: Remove pte_update_flags() BALATON Zoltan
2024-07-04 6:13 ` Nicholas Piggin
2024-07-04 12:34 ` BALATON Zoltan
2024-07-05 0:12 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 12/43] target/ppc/mmu_common.c: Remove nx field from mmu_ctx_t BALATON Zoltan
2024-07-04 6:14 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 13/43] target/ppc/mmu_common.c: Convert local variable to bool BALATON Zoltan
2024-07-04 6:15 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 14/43] target/ppc/mmu_common.c: Remove single use local variable BALATON Zoltan
2024-07-04 6:16 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 15/43] target/ppc/mmu_common.c: Simplify a switch statement BALATON Zoltan
2024-07-04 6:16 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 16/43] target/ppc/mmu_common.c: Inline and remove ppc6xx_tlb_pte_check() BALATON Zoltan
2024-07-04 6:20 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 17/43] target/ppc/mmu_common.c: Remove ptem field from mmu_ctx_t BALATON Zoltan
2024-07-04 6:26 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 18/43] target/ppc: Add function to get protection key for hash32 MMU BALATON Zoltan
2024-07-04 6:27 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 19/43] target/ppc/mmu-hash32.c: Inline and remove ppc_hash32_pte_prot() BALATON Zoltan
2024-07-04 6:29 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 20/43] target/ppc/mmu_common.c: Init variable in function that relies on it BALATON Zoltan
2024-07-04 6:29 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 21/43] target/ppc/mmu_common.c: Remove key field from mmu_ctx_t BALATON Zoltan
2024-07-04 6:31 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 22/43] target/ppc/mmu_common.c: Stop using ctx in ppc6xx_tlb_check() BALATON Zoltan
2024-07-04 6:32 ` Nicholas Piggin
2024-05-26 23:12 ` [PATCH 23/43] target/ppc/mmu_common.c: Rename function parameter BALATON Zoltan
2024-07-04 6:32 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 24/43] target/ppc/mmu_common.c: Use defines instead of numeric constants BALATON Zoltan
2024-07-04 6:34 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 25/43] target/ppc: Remove bat_size_prot() BALATON Zoltan
2024-07-04 6:55 ` Nicholas Piggin [this message]
2024-05-26 23:13 ` [PATCH 26/43] target/ppc/mmu_common.c: Stop using ctx in get_bat_6xx_tlb() BALATON Zoltan
2024-07-04 7:09 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 27/43] target/ppc/mmu_common.c: Remove mmu_ctx_t BALATON Zoltan
2024-07-04 7:10 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 28/43] target/ppc/mmu-hash32.c: Inline and remove ppc_hash32_pte_raddr() BALATON Zoltan
2024-07-04 7:14 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 29/43] target/ppc/mmu-hash32.c: Move get_pteg_offset32() to the header BALATON Zoltan
2024-07-04 7:14 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 30/43] target/ppc: Unexport some functions from mmu-book3s-v3.h BALATON Zoltan
2024-07-04 7:16 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 31/43] target/ppc/mmu-radix64: Remove externally unused parts from header BALATON Zoltan
2024-07-04 7:16 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 32/43] target/ppc: Remove includes from mmu-book3s-v3.h BALATON Zoltan
2024-07-04 7:17 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 33/43] target/ppc: Remove single use static inline function BALATON Zoltan
2024-07-04 7:18 ` Nicholas Piggin
2024-07-06 20:13 ` BALATON Zoltan
2024-05-26 23:13 ` [PATCH 34/43] target/ppc/internal.h: Consolidate ifndef CONFIG_USER_ONLY blocks BALATON Zoltan
2024-05-26 23:13 ` [PATCH 35/43] target/ppc/mmu-hash32.c: Change parameter type of ppc_hash32_bat_lookup() BALATON Zoltan
2024-07-04 7:19 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 36/43] target/ppc/mmu-hash32: Remove some static inlines from header BALATON Zoltan
2024-07-04 7:21 ` Nicholas Piggin
2024-07-06 20:18 ` BALATON Zoltan
2024-07-08 7:06 ` Nicholas Piggin
2024-07-08 10:42 ` BALATON Zoltan
2024-05-26 23:13 ` [PATCH 37/43] target/ppc/mmu-hash32.c: Return and use pte address instead of base + offset BALATON Zoltan
2024-07-04 7:23 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 38/43] target/ppc/mmu-hash32.c: Use pte address as parameter instead of offset BALATON Zoltan
2024-05-26 23:13 ` [PATCH 39/43] target/ppc: Change parameter type of some inline functions BALATON Zoltan
2024-07-04 7:24 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 40/43] target/ppc: Change parameter type of ppc64_v3_radix() BALATON Zoltan
2024-07-04 7:25 ` Nicholas Piggin
2024-05-26 23:13 ` [PATCH 41/43] target/ppc: Change MMU xlate functions to take CPUState BALATON Zoltan
2024-07-04 7:27 ` Nicholas Piggin
2024-07-06 20:19 ` BALATON Zoltan
2024-05-26 23:13 ` [PATCH 42/43] target/ppc/mmu-hash32.c: Change parameter type of ppc_hash32_set_[rc] BALATON Zoltan
2024-05-26 23:13 ` [PATCH 43/43] target/ppc/mmu-hash32.c: Change parameter type of ppc_hash32_direct_store BALATON Zoltan
2024-05-27 20:55 ` [PATCH 00/43] Remaining MMU clean up patches BALATON Zoltan
2024-06-18 10:11 ` BALATON Zoltan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=D2GK3WB9X38H.67PWCTA8385M@gmail.com \
--to=npiggin@gmail.com \
--cc=balaton@eik.bme.hu \
--cc=danielhb413@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.