All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Daniel Henrique Barboza <danielhb413@gmail.com>
Cc: richard.henderson@linaro.org, qemu-ppc@nongnu.org,
	qemu-devel@nongnu.org, clg@kaod.org
Subject: Re: [PATCH v9 10/10] target/ppc/excp_helper.c: EBB handling adjustments
Date: Thu, 9 Dec 2021 12:52:47 +1100	[thread overview]
Message-ID: <YbFhb1OMBZSCxV1V@yekko> (raw)
In-Reply-To: <20211201151734.654994-11-danielhb413@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3974 bytes --]

On Wed, Dec 01, 2021 at 12:17:34PM -0300, Daniel Henrique Barboza wrote:
> The current logic is only considering event-based exceptions triggered
> by the performance monitor. This is true now, but we might want to add
> support for external event-based exceptions in the future.
> 
> Let's make it a bit easier to do so by adding the bit logic that would
> happen in case we were dealing with an external event-based exception.
> 
> While we're at it, add a few comments explaining why we're setting and
> clearing BESCR bits.
> 
> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

Still looks fine, but I'm not seeing a particularly strong reason to
keep this split from the previous patch.

> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
> ---
>  target/ppc/excp_helper.c | 45 ++++++++++++++++++++++++++++++++++------
>  1 file changed, 39 insertions(+), 6 deletions(-)
> 
> diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
> index a26d266fe6..42e2fee9c8 100644
> --- a/target/ppc/excp_helper.c
> +++ b/target/ppc/excp_helper.c
> @@ -801,14 +801,47 @@ static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp)
>          break;
>      case POWERPC_EXCP_EBB:       /* Event-based branch exception             */
>          if ((env->spr[SPR_FSCR] & (1ull << FSCR_EBB)) &&
> -            (env->spr[SPR_BESCR] & BESCR_GE) &&
> -            (env->spr[SPR_BESCR] & BESCR_PME)) {
> +            (env->spr[SPR_BESCR] & BESCR_GE)) {
>              target_ulong nip;
>  
> -            env->spr[SPR_BESCR] &= ~BESCR_GE;   /* Clear GE */
> -            env->spr[SPR_BESCR] |= BESCR_PMEO;  /* Set PMEO */
> -            env->spr[SPR_EBBRR] = env->nip;     /* Save NIP for rfebb insn */
> -            nip = env->spr[SPR_EBBHR];          /* EBB handler */
> +            /*
> +             * If we have Performance Monitor Event-Based exception
> +             * enabled (BESCR_PME) and a Performance Monitor alert
> +             * occurred (MMCR0_PMAO), clear BESCR_PME and set BESCR_PMEO
> +             * (Performance Monitor Event-Based Exception Occurred).
> +             *
> +             * Software is responsible for clearing both BESCR_PMEO and
> +             * MMCR0_PMAO after the event has been handled.
> +             */
> +            if ((env->spr[SPR_BESCR] & BESCR_PME) &&
> +                (env->spr[SPR_POWER_MMCR0] & MMCR0_PMAO)) {
> +                env->spr[SPR_BESCR] &= ~BESCR_PME;
> +                env->spr[SPR_BESCR] |= BESCR_PMEO;
> +            }
> +
> +            /*
> +             * In the case of External Event-Based exceptions, do a
> +             * similar logic with BESCR_EE and BESCR_EEO. BESCR_EEO must
> +             * also be cleared by software.
> +             *
> +             * PowerISA 3.1 considers that we'll not have BESCR_PMEO and
> +             * BESCR_EEO set at the same time. We can check for BESCR_PMEO
> +             * being not set in step above to see if this exception was
> +             * trigged by an external event.
> +             */
> +            if (env->spr[SPR_BESCR] & BESCR_EE &&
> +                !(env->spr[SPR_BESCR] & BESCR_PMEO)) {
> +                env->spr[SPR_BESCR] &= ~BESCR_EE;
> +                env->spr[SPR_BESCR] |= BESCR_EEO;
> +            }
> +
> +            /*
> +             * Clear BESCR_GE, save NIP for 'rfebb' and point the
> +             * execution to the event handler (SPR_EBBHR) address.
> +             */
> +            env->spr[SPR_BESCR] &= ~BESCR_GE;
> +            env->spr[SPR_EBBRR] = env->nip;
> +            nip = env->spr[SPR_EBBHR];
>              powerpc_set_excp_state(cpu, nip, env->msr);
>          }
>          /*

-- 
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 #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2021-12-09  2:22 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-01 15:17 [PATCH v9 00/10] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
2021-12-01 15:17 ` [PATCH v9 01/10] target/ppc: introduce PMUEventType and PMU overflow timers Daniel Henrique Barboza
2021-12-01 15:17 ` [PATCH v9 02/10] target/ppc: PMU basic cycle count for pseries TCG Daniel Henrique Barboza
2021-12-01 15:17 ` [PATCH v9 03/10] target/ppc: PMU: update counters on PMCs r/w Daniel Henrique Barboza
2021-12-01 15:17 ` [PATCH v9 04/10] target/ppc: PMU: update counters on MMCR1 write Daniel Henrique Barboza
2021-12-01 15:17 ` [PATCH v9 05/10] target/ppc: enable PMU counter overflow with cycle events Daniel Henrique Barboza
2021-12-01 15:17 ` [PATCH v9 06/10] target/ppc: enable PMU instruction count Daniel Henrique Barboza
2021-12-02  2:42   ` David Gibson
2021-12-01 15:17 ` [PATCH v9 07/10] target/ppc/power8-pmu.c: add PM_RUN_INST_CMPL (0xFA) event Daniel Henrique Barboza
2021-12-01 15:17 ` [PATCH v9 08/10] PPC64/TCG: Implement 'rfebb' instruction Daniel Henrique Barboza
2021-12-01 15:17 ` [PATCH v9 09/10] target/ppc: PMU Event-Based exception support Daniel Henrique Barboza
2021-12-03  9:27   ` Cédric Le Goater
2021-12-09  1:51   ` David Gibson
2021-12-01 15:17 ` [PATCH v9 10/10] target/ppc/excp_helper.c: EBB handling adjustments Daniel Henrique Barboza
2021-12-09  1:52   ` David Gibson [this message]
2021-12-14 20:05     ` Daniel Henrique Barboza
2021-12-03  9:37 ` [PATCH v9 00/10] PMU-EBB support for PPC64 TCG Cédric Le Goater
2021-12-03 13:03   ` Fabiano Rosas
2021-12-15 16:54 ` Cédric Le Goater

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=YbFhb1OMBZSCxV1V@yekko \
    --to=david@gibson.dropbear.id.au \
    --cc=clg@kaod.org \
    --cc=danielhb413@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=richard.henderson@linaro.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.