* [PATCH v14 0/4] PMU-EBB support for PPC64 TCG
@ 2022-02-25 10:11 Daniel Henrique Barboza
2022-02-25 10:11 ` [PATCH v14 1/4] target/ppc: make power8-pmu.c CONFIG_TCG only Daniel Henrique Barboza
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-25 10:11 UTC (permalink / raw)
To: qemu-devel; +Cc: Daniel Henrique Barboza, qemu-ppc, clg, david
Hi,
This new version contains a change suggested by Richard in patch 4. No
function change was made.
Changes from v13:
- patch 1:
* added Richard's r-b
- patch 4:
* renamed helper_ebb_perfm_excp() to raise_ebb_perfm_exception(). The
function is no longer declared as translation helper
- v13 link: https://lists.gnu.org/archive/html/qemu-devel/2022-02/msg05414.html
Daniel Henrique Barboza (4):
target/ppc: make power8-pmu.c CONFIG_TCG only
target/ppc: finalize pre-EBB PMU logic
target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions
target/ppc: trigger PERFM EBBs from power8-pmu.c
target/ppc/cpu.h | 10 ++++-
target/ppc/cpu_init.c | 20 +++++-----
target/ppc/excp_helper.c | 81 ++++++++++++++++++++++++++++++++++++++++
target/ppc/machine.c | 6 ++-
target/ppc/meson.build | 2 +-
target/ppc/power8-pmu.c | 39 +++++++++++++++++--
target/ppc/power8-pmu.h | 4 +-
7 files changed, 144 insertions(+), 18 deletions(-)
--
2.35.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v14 1/4] target/ppc: make power8-pmu.c CONFIG_TCG only
2022-02-25 10:11 [PATCH v14 0/4] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
@ 2022-02-25 10:11 ` Daniel Henrique Barboza
2022-02-25 10:11 ` [PATCH v14 2/4] target/ppc: finalize pre-EBB PMU logic Daniel Henrique Barboza
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-25 10:11 UTC (permalink / raw)
To: qemu-devel
Cc: Richard Henderson, Daniel Henrique Barboza, qemu-ppc, clg, david
This is an exclusive TCG helper. Gating it with CONFIG_TCG and changing
meson.build accordingly will prevent problems --disable-tcg and
--disable-linux-user later on.
We're also changing the uses of !kvm_enabled() to tcg_enabled() to avoid
adding "defined(CONFIG_TCG)" ifdefs, since tcg_enabled() will be
defaulted to false with --disable-tcg and the block will always be
skipped.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
target/ppc/cpu_init.c | 16 +++++++---------
target/ppc/machine.c | 6 +++++-
target/ppc/meson.build | 2 +-
target/ppc/power8-pmu.h | 4 ++--
4 files changed, 15 insertions(+), 13 deletions(-)
diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
index 61d36b11a0..544e052290 100644
--- a/target/ppc/cpu_init.c
+++ b/target/ppc/cpu_init.c
@@ -5698,12 +5698,10 @@ static void register_power9_mmu_sprs(CPUPPCState *env)
*/
static void init_tcg_pmu_power8(CPUPPCState *env)
{
-#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
/* Init PMU overflow timers */
- if (!kvm_enabled()) {
+ if (tcg_enabled()) {
cpu_ppc_pmu_init(env);
}
-#endif
}
static void init_proc_book3s_common(CPUPPCState *env)
@@ -7167,14 +7165,14 @@ static void ppc_cpu_reset(DeviceState *dev)
#if !defined(CONFIG_USER_ONLY)
env->nip = env->hreset_vector | env->excp_prefix;
-#if defined(CONFIG_TCG)
- if (env->mmu_model != POWERPC_MMU_REAL) {
- ppc_tlb_invalidate_all(env);
+
+ if (tcg_enabled()) {
+ if (env->mmu_model != POWERPC_MMU_REAL) {
+ ppc_tlb_invalidate_all(env);
+ }
+ pmu_update_summaries(env);
}
-#endif /* CONFIG_TCG */
#endif
-
- pmu_update_summaries(env);
hreg_compute_hflags(env);
env->reserve_addr = (target_ulong)-1ULL;
/* Be sure no exception or interrupt is pending */
diff --git a/target/ppc/machine.c b/target/ppc/machine.c
index 1b63146ed1..e673944597 100644
--- a/target/ppc/machine.c
+++ b/target/ppc/machine.c
@@ -2,6 +2,7 @@
#include "cpu.h"
#include "exec/exec-all.h"
#include "sysemu/kvm.h"
+#include "sysemu/tcg.h"
#include "helper_regs.h"
#include "mmu-hash64.h"
#include "migration/cpu.h"
@@ -20,7 +21,10 @@ static void post_load_update_msr(CPUPPCState *env)
*/
env->msr ^= env->msr_mask & ~((1ULL << MSR_TGPR) | MSR_HVB);
ppc_store_msr(env, msr);
- pmu_update_summaries(env);
+
+ if (tcg_enabled()) {
+ pmu_update_summaries(env);
+ }
}
static int get_avr(QEMUFile *f, void *pv, size_t size,
diff --git a/target/ppc/meson.build b/target/ppc/meson.build
index a49a8911e0..79beaff147 100644
--- a/target/ppc/meson.build
+++ b/target/ppc/meson.build
@@ -16,6 +16,7 @@ ppc_ss.add(when: 'CONFIG_TCG', if_true: files(
'misc_helper.c',
'timebase_helper.c',
'translate.c',
+ 'power8-pmu.c',
))
ppc_ss.add(libdecnumber)
@@ -51,7 +52,6 @@ ppc_softmmu_ss.add(when: 'TARGET_PPC64', if_true: files(
'mmu-book3s-v3.c',
'mmu-hash64.c',
'mmu-radix64.c',
- 'power8-pmu.c',
))
target_arch += {'ppc': ppc_ss}
diff --git a/target/ppc/power8-pmu.h b/target/ppc/power8-pmu.h
index a839199561..256d90f523 100644
--- a/target/ppc/power8-pmu.h
+++ b/target/ppc/power8-pmu.h
@@ -13,11 +13,11 @@
#ifndef POWER8_PMU
#define POWER8_PMU
-void cpu_ppc_pmu_init(CPUPPCState *env);
-
#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
+void cpu_ppc_pmu_init(CPUPPCState *env);
void pmu_update_summaries(CPUPPCState *env);
#else
+static inline void cpu_ppc_pmu_init(CPUPPCState *env) { }
static inline void pmu_update_summaries(CPUPPCState *env) { }
#endif
--
2.35.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v14 2/4] target/ppc: finalize pre-EBB PMU logic
2022-02-25 10:11 [PATCH v14 0/4] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
2022-02-25 10:11 ` [PATCH v14 1/4] target/ppc: make power8-pmu.c CONFIG_TCG only Daniel Henrique Barboza
@ 2022-02-25 10:11 ` Daniel Henrique Barboza
2022-02-25 10:11 ` [PATCH v14 3/4] target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions Daniel Henrique Barboza
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-25 10:11 UTC (permalink / raw)
To: qemu-devel; +Cc: Daniel Henrique Barboza, qemu-ppc, clg, david
There are still PMU exclusive bits to handle in fire_PMC_interrupt()
before implementing the EBB support. Let's finalize it now to avoid
dealing with PMU and EBB logic at the same time in the next patches.
fire_PMC_interrupt() will fire an Performance Monitor alert depending on
MMCR0_PMAE. If we are required to freeze the timers (MMCR0_FCECE) we'll
also need to update summaries and delete the existing overflow timers.
In all cases we're going to update the cycle counters.
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
target/ppc/power8-pmu.c | 36 ++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/target/ppc/power8-pmu.c b/target/ppc/power8-pmu.c
index 236e8e66e9..d245663158 100644
--- a/target/ppc/power8-pmu.c
+++ b/target/ppc/power8-pmu.c
@@ -222,6 +222,20 @@ static void pmu_update_overflow_timers(CPUPPCState *env)
}
}
+static void pmu_delete_timers(CPUPPCState *env)
+{
+ QEMUTimer *pmc_overflow_timer;
+ int sprn;
+
+ for (sprn = SPR_POWER_PMC1; sprn <= SPR_POWER_PMC6; sprn++) {
+ pmc_overflow_timer = get_cyc_overflow_timer(env, sprn);
+
+ if (pmc_overflow_timer) {
+ timer_del(pmc_overflow_timer);
+ }
+ }
+}
+
void helper_store_mmcr0(CPUPPCState *env, target_ulong value)
{
bool hflags_pmcc0 = (value & MMCR0_PMCC0) != 0;
@@ -271,8 +285,26 @@ static void fire_PMC_interrupt(PowerPCCPU *cpu)
{
CPUPPCState *env = &cpu->env;
- if (!(env->spr[SPR_POWER_MMCR0] & MMCR0_EBE)) {
- return;
+ pmu_update_cycles(env);
+
+ if (env->spr[SPR_POWER_MMCR0] & MMCR0_FCECE) {
+ env->spr[SPR_POWER_MMCR0] &= ~MMCR0_FCECE;
+ env->spr[SPR_POWER_MMCR0] |= MMCR0_FC;
+
+ /* Changing MMCR0_FC requires a new HFLAGS_INSN_CNT calc */
+ pmu_update_summaries(env);
+
+ /*
+ * Delete all pending timers if we need to freeze
+ * the PMC. We'll restart them when the PMC starts
+ * running again.
+ */
+ pmu_delete_timers(env);
+ }
+
+ if (env->spr[SPR_POWER_MMCR0] & MMCR0_PMAE) {
+ env->spr[SPR_POWER_MMCR0] &= ~MMCR0_PMAE;
+ env->spr[SPR_POWER_MMCR0] |= MMCR0_PMAO;
}
/* PMC interrupt not implemented yet */
--
2.35.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v14 3/4] target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions
2022-02-25 10:11 [PATCH v14 0/4] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
2022-02-25 10:11 ` [PATCH v14 1/4] target/ppc: make power8-pmu.c CONFIG_TCG only Daniel Henrique Barboza
2022-02-25 10:11 ` [PATCH v14 2/4] target/ppc: finalize pre-EBB PMU logic Daniel Henrique Barboza
@ 2022-02-25 10:11 ` Daniel Henrique Barboza
2022-02-25 10:11 ` [PATCH v14 4/4] target/ppc: trigger PERFM EBBs from power8-pmu.c Daniel Henrique Barboza
2022-03-01 8:29 ` [PATCH v14 0/4] PMU-EBB support for PPC64 TCG Cédric Le Goater
4 siblings, 0 replies; 7+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-25 10:11 UTC (permalink / raw)
To: qemu-devel; +Cc: Daniel Henrique Barboza, qemu-ppc, clg, david
PPC_INTERRUPT_EBB is a new interrupt that will be used to deliver EBB
exceptions that had to be postponed because the thread wasn't in problem
state at the time the event-based branch was supposed to occur.
ISA 3.1 also defines two EBB exceptions: Performance Monitor EBB
exception and External EBB exception. They are being added as
POWERPC_EXCP_PERFM_EBB and POWERPC_EXCP_EXTERNAL_EBB.
PPC_INTERRUPT_EBB will check BESCR bits to see the EBB type that
occurred and trigger the appropriate exception. Both exceptions are
doing the same thing in this first implementation: clear BESCR_GE and
enter the branch with env->nip retrieved from SPR_EBBHR.
The checks being done by the interrupt code are msr_pr and BESCR_GE
states. All other checks (EBB facility check, BESCR_PME bit, specific
bits related to the event type) must be done beforehand.
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
target/ppc/cpu.h | 5 ++++-
target/ppc/cpu_init.c | 4 ++++
target/ppc/excp_helper.c | 33 +++++++++++++++++++++++++++++++++
3 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
index 5b01d409b3..79375e8df4 100644
--- a/target/ppc/cpu.h
+++ b/target/ppc/cpu.h
@@ -127,8 +127,10 @@ enum {
/* ISA 3.00 additions */
POWERPC_EXCP_HVIRT = 101,
POWERPC_EXCP_SYSCALL_VECTORED = 102, /* scv exception */
+ POWERPC_EXCP_PERFM_EBB = 103, /* Performance Monitor EBB Exception */
+ POWERPC_EXCP_EXTERNAL_EBB = 104, /* External EBB Exception */
/* EOL */
- POWERPC_EXCP_NB = 103,
+ POWERPC_EXCP_NB = 105,
/* QEMU exceptions: special cases we want to stop translation */
POWERPC_EXCP_SYSCALL_USER = 0x203, /* System call in user mode only */
};
@@ -2434,6 +2436,7 @@ enum {
PPC_INTERRUPT_HMI, /* Hypervisor Maintenance interrupt */
PPC_INTERRUPT_HDOORBELL, /* Hypervisor Doorbell interrupt */
PPC_INTERRUPT_HVIRT, /* Hypervisor virtualization interrupt */
+ PPC_INTERRUPT_EBB, /* Event-based Branch exception */
};
/* Processor Compatibility mask (PCR) */
diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
index 544e052290..073fd10168 100644
--- a/target/ppc/cpu_init.c
+++ b/target/ppc/cpu_init.c
@@ -2060,6 +2060,10 @@ static void init_excp_POWER8(CPUPPCState *env)
env->excp_vectors[POWERPC_EXCP_FU] = 0x00000F60;
env->excp_vectors[POWERPC_EXCP_HV_FU] = 0x00000F80;
env->excp_vectors[POWERPC_EXCP_SDOOR_HV] = 0x00000E80;
+
+ /* Userland exceptions without vector value in PowerISA v3.1 */
+ env->excp_vectors[POWERPC_EXCP_PERFM_EBB] = 0x0;
+ env->excp_vectors[POWERPC_EXCP_EXTERNAL_EBB] = 0x0;
#endif
}
diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
index 6538c56ab0..5e7d29ae00 100644
--- a/target/ppc/excp_helper.c
+++ b/target/ppc/excp_helper.c
@@ -1554,6 +1554,21 @@ static void powerpc_excp_books(PowerPCCPU *cpu, int excp)
new_msr |= (target_ulong)MSR_HVB;
new_msr |= env->msr & ((target_ulong)1 << MSR_RI);
break;
+ case POWERPC_EXCP_PERFM_EBB: /* Performance Monitor EBB Exception */
+ case POWERPC_EXCP_EXTERNAL_EBB: /* External EBB Exception */
+ env->spr[SPR_BESCR] &= ~BESCR_GE;
+
+ /*
+ * Save NIP for rfebb insn in SPR_EBBRR. Next nip is
+ * stored in the EBB Handler SPR_EBBHR.
+ */
+ env->spr[SPR_EBBRR] = env->nip;
+ powerpc_set_excp_state(cpu, env->spr[SPR_EBBHR], env->msr);
+
+ /*
+ * This exception is handled in userspace. No need to proceed.
+ */
+ return;
case POWERPC_EXCP_THERM: /* Thermal interrupt */
case POWERPC_EXCP_PERFM: /* Embedded performance monitor interrupt */
case POWERPC_EXCP_VPUA: /* Vector assist exception */
@@ -1797,6 +1812,24 @@ static void ppc_hw_interrupt(CPUPPCState *env)
powerpc_excp(cpu, POWERPC_EXCP_THERM);
return;
}
+ /* EBB exception */
+ if (env->pending_interrupts & (1 << PPC_INTERRUPT_EBB)) {
+ /*
+ * EBB exception must be taken in problem state and
+ * with BESCR_GE set.
+ */
+ if (msr_pr == 1 && env->spr[SPR_BESCR] & BESCR_GE) {
+ env->pending_interrupts &= ~(1 << PPC_INTERRUPT_EBB);
+
+ if (env->spr[SPR_BESCR] & BESCR_PMEO) {
+ powerpc_excp(cpu, POWERPC_EXCP_PERFM_EBB);
+ } else if (env->spr[SPR_BESCR] & BESCR_EEO) {
+ powerpc_excp(cpu, POWERPC_EXCP_EXTERNAL_EBB);
+ }
+
+ return;
+ }
+ }
}
if (env->resume_as_sreset) {
--
2.35.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v14 4/4] target/ppc: trigger PERFM EBBs from power8-pmu.c
2022-02-25 10:11 [PATCH v14 0/4] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
` (2 preceding siblings ...)
2022-02-25 10:11 ` [PATCH v14 3/4] target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions Daniel Henrique Barboza
@ 2022-02-25 10:11 ` Daniel Henrique Barboza
2022-02-25 19:58 ` Richard Henderson
2022-03-01 8:29 ` [PATCH v14 0/4] PMU-EBB support for PPC64 TCG Cédric Le Goater
4 siblings, 1 reply; 7+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-25 10:11 UTC (permalink / raw)
To: qemu-devel; +Cc: Daniel Henrique Barboza, qemu-ppc, clg, david
This patch adds the EBB exception support that are triggered by
Performance Monitor alerts. This happens when a Performance Monitor
alert occurs and MMCR0_EBE, BESCR_PME and BESCR_GE are set.
fire_PMC_interrupt() will execute the raise_ebb_perfm_exception() helper
which will check for MMCR0_EBE, BESCR_PME and BESCR_GE bits. If all bits
are set, do_ebb() will attempt to trigger a PERFM EBB event.
If the EBB facility is enabled in both FSCR and HFSCR we consider that
the EBB is valid and set BESCR_PMEO. After that, if we're running in
problem state, fire a POWERPC_EXCP_PERM_EBB immediately. Otherwise we'll
queue a PPC_INTERRUPT_EBB.
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
target/ppc/cpu.h | 5 +++++
target/ppc/excp_helper.c | 48 ++++++++++++++++++++++++++++++++++++++++
target/ppc/power8-pmu.c | 3 +--
3 files changed, 54 insertions(+), 2 deletions(-)
diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
index 79375e8df4..1b687521c7 100644
--- a/target/ppc/cpu.h
+++ b/target/ppc/cpu.h
@@ -2502,6 +2502,11 @@ void QEMU_NORETURN raise_exception_err(CPUPPCState *env, uint32_t exception,
void QEMU_NORETURN raise_exception_err_ra(CPUPPCState *env, uint32_t exception,
uint32_t error_code, uintptr_t raddr);
+/* PERFM EBB helper*/
+#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
+void raise_ebb_perfm_exception(CPUPPCState *env);
+#endif
+
#if !defined(CONFIG_USER_ONLY)
static inline int booke206_tlbm_id(CPUPPCState *env, ppcmas_tlb_t *tlbm)
{
diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
index 5e7d29ae00..d3e2cfcd71 100644
--- a/target/ppc/excp_helper.c
+++ b/target/ppc/excp_helper.c
@@ -2066,6 +2066,54 @@ void helper_rfebb(CPUPPCState *env, target_ulong s)
env->spr[SPR_BESCR] &= ~BESCR_GE;
}
}
+
+/*
+ * Triggers or queues an 'ebb_excp' EBB exception. All checks
+ * but FSCR, HFSCR and msr_pr must be done beforehand.
+ *
+ * PowerISA v3.1 isn't clear about whether an EBB should be
+ * postponed or cancelled if the EBB facility is unavailable.
+ * Our assumption here is that the EBB is cancelled if both
+ * FSCR and HFSCR EBB facilities aren't available.
+ */
+static void do_ebb(CPUPPCState *env, int ebb_excp)
+{
+ PowerPCCPU *cpu = env_archcpu(env);
+ CPUState *cs = CPU(cpu);
+
+ /*
+ * FSCR_EBB and FSCR_IC_EBB are the same bits used with
+ * HFSCR.
+ */
+ helper_fscr_facility_check(env, FSCR_EBB, 0, FSCR_IC_EBB);
+ helper_hfscr_facility_check(env, FSCR_EBB, "EBB", FSCR_IC_EBB);
+
+ if (ebb_excp == POWERPC_EXCP_PERFM_EBB) {
+ env->spr[SPR_BESCR] |= BESCR_PMEO;
+ } else if (ebb_excp == POWERPC_EXCP_EXTERNAL_EBB) {
+ env->spr[SPR_BESCR] |= BESCR_EEO;
+ }
+
+ if (msr_pr == 1) {
+ powerpc_excp(cpu, ebb_excp);
+ } else {
+ env->pending_interrupts |= 1 << PPC_INTERRUPT_EBB;
+ cpu_interrupt(cs, CPU_INTERRUPT_HARD);
+ }
+}
+
+void raise_ebb_perfm_exception(CPUPPCState *env)
+{
+ bool perfm_ebb_enabled = env->spr[SPR_POWER_MMCR0] & MMCR0_EBE &&
+ env->spr[SPR_BESCR] & BESCR_PME &&
+ env->spr[SPR_BESCR] & BESCR_GE;
+
+ if (!perfm_ebb_enabled) {
+ return;
+ }
+
+ do_ebb(env, POWERPC_EXCP_PERFM_EBB);
+}
#endif
/*****************************************************************************/
diff --git a/target/ppc/power8-pmu.c b/target/ppc/power8-pmu.c
index d245663158..beeab5c494 100644
--- a/target/ppc/power8-pmu.c
+++ b/target/ppc/power8-pmu.c
@@ -307,8 +307,7 @@ static void fire_PMC_interrupt(PowerPCCPU *cpu)
env->spr[SPR_POWER_MMCR0] |= MMCR0_PMAO;
}
- /* PMC interrupt not implemented yet */
- return;
+ raise_ebb_perfm_exception(env);
}
/* This helper assumes that the PMC is running. */
--
2.35.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v14 4/4] target/ppc: trigger PERFM EBBs from power8-pmu.c
2022-02-25 10:11 ` [PATCH v14 4/4] target/ppc: trigger PERFM EBBs from power8-pmu.c Daniel Henrique Barboza
@ 2022-02-25 19:58 ` Richard Henderson
0 siblings, 0 replies; 7+ messages in thread
From: Richard Henderson @ 2022-02-25 19:58 UTC (permalink / raw)
To: Daniel Henrique Barboza, qemu-devel; +Cc: qemu-ppc, clg, david
On 2/25/22 00:11, Daniel Henrique Barboza wrote:
> This patch adds the EBB exception support that are triggered by
> Performance Monitor alerts. This happens when a Performance Monitor
> alert occurs and MMCR0_EBE, BESCR_PME and BESCR_GE are set.
>
> fire_PMC_interrupt() will execute the raise_ebb_perfm_exception() helper
> which will check for MMCR0_EBE, BESCR_PME and BESCR_GE bits. If all bits
> are set, do_ebb() will attempt to trigger a PERFM EBB event.
>
> If the EBB facility is enabled in both FSCR and HFSCR we consider that
> the EBB is valid and set BESCR_PMEO. After that, if we're running in
> problem state, fire a POWERPC_EXCP_PERM_EBB immediately. Otherwise we'll
> queue a PPC_INTERRUPT_EBB.
>
> Signed-off-by: Daniel Henrique Barboza<danielhb413@gmail.com>
> ---
> target/ppc/cpu.h | 5 +++++
> target/ppc/excp_helper.c | 48 ++++++++++++++++++++++++++++++++++++++++
> target/ppc/power8-pmu.c | 3 +--
> 3 files changed, 54 insertions(+), 2 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v14 0/4] PMU-EBB support for PPC64 TCG
2022-02-25 10:11 [PATCH v14 0/4] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
` (3 preceding siblings ...)
2022-02-25 10:11 ` [PATCH v14 4/4] target/ppc: trigger PERFM EBBs from power8-pmu.c Daniel Henrique Barboza
@ 2022-03-01 8:29 ` Cédric Le Goater
4 siblings, 0 replies; 7+ messages in thread
From: Cédric Le Goater @ 2022-03-01 8:29 UTC (permalink / raw)
To: Daniel Henrique Barboza, qemu-devel; +Cc: qemu-ppc, david
On 2/25/22 11:11, Daniel Henrique Barboza wrote:
> Hi,
>
> This new version contains a change suggested by Richard in patch 4. No
> function change was made.
>
> Changes from v13:
> - patch 1:
> * added Richard's r-b
> - patch 4:
> * renamed helper_ebb_perfm_excp() to raise_ebb_perfm_exception(). The
> function is no longer declared as translation helper
> - v13 link: https://lists.gnu.org/archive/html/qemu-devel/2022-02/msg05414.html
>
> Daniel Henrique Barboza (4):
> target/ppc: make power8-pmu.c CONFIG_TCG only
> target/ppc: finalize pre-EBB PMU logic
> target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions
> target/ppc: trigger PERFM EBBs from power8-pmu.c
>
> target/ppc/cpu.h | 10 ++++-
> target/ppc/cpu_init.c | 20 +++++-----
> target/ppc/excp_helper.c | 81 ++++++++++++++++++++++++++++++++++++++++
> target/ppc/machine.c | 6 ++-
> target/ppc/meson.build | 2 +-
> target/ppc/power8-pmu.c | 39 +++++++++++++++++--
> target/ppc/power8-pmu.h | 4 +-
> 7 files changed, 144 insertions(+), 18 deletions(-)
>
Applied to ppc-7.0.
Thanks,
C.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-03-01 8:32 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-25 10:11 [PATCH v14 0/4] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
2022-02-25 10:11 ` [PATCH v14 1/4] target/ppc: make power8-pmu.c CONFIG_TCG only Daniel Henrique Barboza
2022-02-25 10:11 ` [PATCH v14 2/4] target/ppc: finalize pre-EBB PMU logic Daniel Henrique Barboza
2022-02-25 10:11 ` [PATCH v14 3/4] target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions Daniel Henrique Barboza
2022-02-25 10:11 ` [PATCH v14 4/4] target/ppc: trigger PERFM EBBs from power8-pmu.c Daniel Henrique Barboza
2022-02-25 19:58 ` Richard Henderson
2022-03-01 8:29 ` [PATCH v14 0/4] PMU-EBB support for PPC64 TCG Cédric Le Goater
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).