qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Daniel Henrique Barboza <danielhb413@gmail.com>
To: David Gibson <david@gibson.dropbear.id.au>
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: Tue, 14 Dec 2021 17:05:51 -0300	[thread overview]
Message-ID: <c366ea89-ffab-bb3e-cfb3-bafa106918ac@gmail.com> (raw)
In-Reply-To: <YbFhb1OMBZSCxV1V@yekko>



On 12/8/21 22:52, David Gibson wrote:
> 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.
>

Fair enough. I'll squash this patch with the previous one.



Thanks,


Daniel

  
>> 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);
>>           }
>>           /*
> 


  reply	other threads:[~2021-12-14 20:07 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
2021-12-14 20:05     ` Daniel Henrique Barboza [this message]
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=c366ea89-ffab-bb3e-cfb3-bafa106918ac@gmail.com \
    --to=danielhb413@gmail.com \
    --cc=clg@kaod.org \
    --cc=david@gibson.dropbear.id.au \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).