From: David Gibson <david@gibson.dropbear.id.au>
To: Matheus Ferst <matheus.ferst@eldorado.org.br>
Cc: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, clg@kaod.org,
danielhb413@gmail.com, groug@kaod.org, fbarrat@linux.ibm.com,
alex.bennee@linaro.org
Subject: Re: [RFC PATCH 01/13] target/ppc: define PPC_INTERRUPT_* values directly
Date: Thu, 18 Aug 2022 12:18:01 +1000 [thread overview]
Message-ID: <Yv2hWTtmjUwqScQP@yekko> (raw)
In-Reply-To: <20220815162020.2420093-2-matheus.ferst@eldorado.org.br>
[-- Attachment #1: Type: text/plain, Size: 26194 bytes --]
On Mon, Aug 15, 2022 at 01:20:07PM -0300, Matheus Ferst wrote:
> This enum defines the bit positions in env->pending_interrupts for each
> interrupt. However, except for the comparison in kvmppc_set_interrupt,
> the values are always used as (1 << PPC_INTERRUPT_*). Define them
> directly like that to save some clutter. No functional change intended.
>
> Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br>
Good idea.
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> hw/ppc/ppc.c | 10 +++---
> hw/ppc/trace-events | 2 +-
> target/ppc/cpu.h | 40 +++++++++++-----------
> target/ppc/cpu_init.c | 56 +++++++++++++++---------------
> target/ppc/excp_helper.c | 74 ++++++++++++++++++++--------------------
> target/ppc/misc_helper.c | 6 ++--
> 6 files changed, 94 insertions(+), 94 deletions(-)
>
> diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c
> index 690f448cb9..77e611e81c 100644
> --- a/hw/ppc/ppc.c
> +++ b/hw/ppc/ppc.c
> @@ -40,7 +40,7 @@
> static void cpu_ppc_tb_stop (CPUPPCState *env);
> static void cpu_ppc_tb_start (CPUPPCState *env);
>
> -void ppc_set_irq(PowerPCCPU *cpu, int n_IRQ, int level)
> +void ppc_set_irq(PowerPCCPU *cpu, int irq, int level)
> {
> CPUState *cs = CPU(cpu);
> CPUPPCState *env = &cpu->env;
> @@ -56,21 +56,21 @@ void ppc_set_irq(PowerPCCPU *cpu, int n_IRQ, int level)
> old_pending = env->pending_interrupts;
>
> if (level) {
> - env->pending_interrupts |= 1 << n_IRQ;
> + env->pending_interrupts |= irq;
> cpu_interrupt(cs, CPU_INTERRUPT_HARD);
> } else {
> - env->pending_interrupts &= ~(1 << n_IRQ);
> + env->pending_interrupts &= ~irq;
> if (env->pending_interrupts == 0) {
> cpu_reset_interrupt(cs, CPU_INTERRUPT_HARD);
> }
> }
>
> if (old_pending != env->pending_interrupts) {
> - kvmppc_set_interrupt(cpu, n_IRQ, level);
> + kvmppc_set_interrupt(cpu, irq, level);
> }
>
>
> - trace_ppc_irq_set_exit(env, n_IRQ, level, env->pending_interrupts,
> + trace_ppc_irq_set_exit(env, irq, level, env->pending_interrupts,
> CPU(cpu)->interrupt_request);
>
> if (locked) {
> diff --git a/hw/ppc/trace-events b/hw/ppc/trace-events
> index 5c0a215cad..c9ee1285b8 100644
> --- a/hw/ppc/trace-events
> +++ b/hw/ppc/trace-events
> @@ -116,7 +116,7 @@ ppc40x_set_tb_clk(uint32_t value) "new frequency %" PRIu32
> ppc40x_timers_init(uint32_t value) "frequency %" PRIu32
>
> ppc_irq_set(void *env, uint32_t pin, uint32_t level) "env [%p] pin %d level %d"
> -ppc_irq_set_exit(void *env, uint32_t n_IRQ, uint32_t level, uint32_t pending, uint32_t request) "env [%p] n_IRQ %d level %d => pending 0x%08" PRIx32 " req 0x%08" PRIx32
> +ppc_irq_set_exit(void *env, uint32_t irq, uint32_t level, uint32_t pending, uint32_t request) "env [%p] irq 0x%05" PRIx32 " level %d => pending 0x%08" PRIx32 " req 0x%08" PRIx32
> ppc_irq_set_state(const char *name, uint32_t level) "\"%s\" level %d"
> ppc_irq_reset(const char *name) "%s"
> ppc_irq_cpu(const char *action) "%s"
> diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
> index a4c893cfad..c7864bb3b1 100644
> --- a/target/ppc/cpu.h
> +++ b/target/ppc/cpu.h
> @@ -2418,27 +2418,27 @@ enum {
> /* Hardware exceptions definitions */
> enum {
> /* External hardware exception sources */
> - PPC_INTERRUPT_RESET = 0, /* Reset exception */
> - PPC_INTERRUPT_WAKEUP, /* Wakeup exception */
> - PPC_INTERRUPT_MCK, /* Machine check exception */
> - PPC_INTERRUPT_EXT, /* External interrupt */
> - PPC_INTERRUPT_SMI, /* System management interrupt */
> - PPC_INTERRUPT_CEXT, /* Critical external interrupt */
> - PPC_INTERRUPT_DEBUG, /* External debug exception */
> - PPC_INTERRUPT_THERM, /* Thermal exception */
> + PPC_INTERRUPT_RESET = 0x00001, /* Reset exception */
> + PPC_INTERRUPT_WAKEUP = 0x00002, /* Wakeup exception */
> + PPC_INTERRUPT_MCK = 0x00004, /* Machine check exception */
> + PPC_INTERRUPT_EXT = 0x00008, /* External interrupt */
> + PPC_INTERRUPT_SMI = 0x00010, /* System management interrupt */
> + PPC_INTERRUPT_CEXT = 0x00020, /* Critical external interrupt */
> + PPC_INTERRUPT_DEBUG = 0x00040, /* External debug exception */
> + PPC_INTERRUPT_THERM = 0x00080, /* Thermal exception */
> /* Internal hardware exception sources */
> - PPC_INTERRUPT_DECR, /* Decrementer exception */
> - PPC_INTERRUPT_HDECR, /* Hypervisor decrementer exception */
> - PPC_INTERRUPT_PIT, /* Programmable interval timer interrupt */
> - PPC_INTERRUPT_FIT, /* Fixed interval timer interrupt */
> - PPC_INTERRUPT_WDT, /* Watchdog timer interrupt */
> - PPC_INTERRUPT_CDOORBELL, /* Critical doorbell interrupt */
> - PPC_INTERRUPT_DOORBELL, /* Doorbell interrupt */
> - PPC_INTERRUPT_PERFM, /* Performance monitor interrupt */
> - 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 */
> + PPC_INTERRUPT_DECR = 0x00100, /* Decrementer exception */
> + PPC_INTERRUPT_HDECR = 0x00200, /* Hypervisor decrementer exception */
> + PPC_INTERRUPT_PIT = 0x00400, /* Programmable interval timer int. */
> + PPC_INTERRUPT_FIT = 0x00800, /* Fixed interval timer interrupt */
> + PPC_INTERRUPT_WDT = 0x01000, /* Watchdog timer interrupt */
> + PPC_INTERRUPT_CDOORBELL = 0x02000, /* Critical doorbell interrupt */
> + PPC_INTERRUPT_DOORBELL = 0x04000, /* Doorbell interrupt */
> + PPC_INTERRUPT_PERFM = 0x08000, /* Performance monitor interrupt */
> + PPC_INTERRUPT_HMI = 0x10000, /* Hypervisor Maintenance interrupt */
> + PPC_INTERRUPT_HDOORBELL = 0x20000, /* Hypervisor Doorbell interrupt */
> + PPC_INTERRUPT_HVIRT = 0x40000, /* Hypervisor virtualization interrupt */
> + PPC_INTERRUPT_EBB = 0x80000, /* Event-based Branch exception */
> };
>
> /* Processor Compatibility mask (PCR) */
> diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
> index d1493a660c..850334545a 100644
> --- a/target/ppc/cpu_init.c
> +++ b/target/ppc/cpu_init.c
> @@ -5932,23 +5932,23 @@ static bool cpu_has_work_POWER7(CPUState *cs)
> if (!(cs->interrupt_request & CPU_INTERRUPT_HARD)) {
> return false;
> }
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_EXT)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_EXT) &&
> (env->spr[SPR_LPCR] & LPCR_P7_PECE0)) {
> return true;
> }
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_DECR)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_DECR) &&
> (env->spr[SPR_LPCR] & LPCR_P7_PECE1)) {
> return true;
> }
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_MCK)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_MCK) &&
> (env->spr[SPR_LPCR] & LPCR_P7_PECE2)) {
> return true;
> }
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_HMI)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_HMI) &&
> (env->spr[SPR_LPCR] & LPCR_P7_PECE2)) {
> return true;
> }
> - if (env->pending_interrupts & (1u << PPC_INTERRUPT_RESET)) {
> + if (env->pending_interrupts & PPC_INTERRUPT_RESET) {
> return true;
> }
> return false;
> @@ -6096,31 +6096,31 @@ static bool cpu_has_work_POWER8(CPUState *cs)
> if (!(cs->interrupt_request & CPU_INTERRUPT_HARD)) {
> return false;
> }
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_EXT)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_EXT) &&
> (env->spr[SPR_LPCR] & LPCR_P8_PECE2)) {
> return true;
> }
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_DECR)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_DECR) &&
> (env->spr[SPR_LPCR] & LPCR_P8_PECE3)) {
> return true;
> }
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_MCK)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_MCK) &&
> (env->spr[SPR_LPCR] & LPCR_P8_PECE4)) {
> return true;
> }
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_HMI)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_HMI) &&
> (env->spr[SPR_LPCR] & LPCR_P8_PECE4)) {
> return true;
> }
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_DOORBELL)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_DOORBELL) &&
> (env->spr[SPR_LPCR] & LPCR_P8_PECE0)) {
> return true;
> }
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_HDOORBELL)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_HDOORBELL) &&
> (env->spr[SPR_LPCR] & LPCR_P8_PECE1)) {
> return true;
> }
> - if (env->pending_interrupts & (1u << PPC_INTERRUPT_RESET)) {
> + if (env->pending_interrupts & PPC_INTERRUPT_RESET) {
> return true;
> }
> return false;
> @@ -6307,7 +6307,7 @@ static bool cpu_has_work_POWER9(CPUState *cs)
> return true;
> }
> /* External Exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_EXT)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_EXT) &&
> (env->spr[SPR_LPCR] & LPCR_EEE)) {
> bool heic = !!(env->spr[SPR_LPCR] & LPCR_HEIC);
> if (!heic || !FIELD_EX64_HV(env->msr) ||
> @@ -6316,31 +6316,31 @@ static bool cpu_has_work_POWER9(CPUState *cs)
> }
> }
> /* Decrementer Exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_DECR)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_DECR) &&
> (env->spr[SPR_LPCR] & LPCR_DEE)) {
> return true;
> }
> /* Machine Check or Hypervisor Maintenance Exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_MCK |
> - 1u << PPC_INTERRUPT_HMI)) && (env->spr[SPR_LPCR] & LPCR_OEE)) {
> + if ((env->pending_interrupts & (PPC_INTERRUPT_MCK | PPC_INTERRUPT_HMI))
> + && (env->spr[SPR_LPCR] & LPCR_OEE)) {
> return true;
> }
> /* Privileged Doorbell Exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_DOORBELL)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_DOORBELL) &&
> (env->spr[SPR_LPCR] & LPCR_PDEE)) {
> return true;
> }
> /* Hypervisor Doorbell Exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_HDOORBELL)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_HDOORBELL) &&
> (env->spr[SPR_LPCR] & LPCR_HDEE)) {
> return true;
> }
> /* Hypervisor virtualization exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_HVIRT)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_HVIRT) &&
> (env->spr[SPR_LPCR] & LPCR_HVEE)) {
> return true;
> }
> - if (env->pending_interrupts & (1u << PPC_INTERRUPT_RESET)) {
> + if (env->pending_interrupts & PPC_INTERRUPT_RESET) {
> return true;
> }
> return false;
> @@ -6524,7 +6524,7 @@ static bool cpu_has_work_POWER10(CPUState *cs)
> return true;
> }
> /* External Exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_EXT)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_EXT) &&
> (env->spr[SPR_LPCR] & LPCR_EEE)) {
> bool heic = !!(env->spr[SPR_LPCR] & LPCR_HEIC);
> if (!heic || !FIELD_EX64_HV(env->msr) ||
> @@ -6533,31 +6533,31 @@ static bool cpu_has_work_POWER10(CPUState *cs)
> }
> }
> /* Decrementer Exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_DECR)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_DECR) &&
> (env->spr[SPR_LPCR] & LPCR_DEE)) {
> return true;
> }
> /* Machine Check or Hypervisor Maintenance Exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_MCK |
> - 1u << PPC_INTERRUPT_HMI)) && (env->spr[SPR_LPCR] & LPCR_OEE)) {
> + if ((env->pending_interrupts & (PPC_INTERRUPT_MCK | PPC_INTERRUPT_HMI))
> + && (env->spr[SPR_LPCR] & LPCR_OEE)) {
> return true;
> }
> /* Privileged Doorbell Exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_DOORBELL)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_DOORBELL) &&
> (env->spr[SPR_LPCR] & LPCR_PDEE)) {
> return true;
> }
> /* Hypervisor Doorbell Exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_HDOORBELL)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_HDOORBELL) &&
> (env->spr[SPR_LPCR] & LPCR_HDEE)) {
> return true;
> }
> /* Hypervisor virtualization exception */
> - if ((env->pending_interrupts & (1u << PPC_INTERRUPT_HVIRT)) &&
> + if ((env->pending_interrupts & PPC_INTERRUPT_HVIRT) &&
> (env->spr[SPR_LPCR] & LPCR_HVEE)) {
> return true;
> }
> - if (env->pending_interrupts & (1u << PPC_INTERRUPT_RESET)) {
> + if (env->pending_interrupts & PPC_INTERRUPT_RESET) {
> return true;
> }
> return false;
> diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
> index 7550aafed6..b9476b5d03 100644
> --- a/target/ppc/excp_helper.c
> +++ b/target/ppc/excp_helper.c
> @@ -1683,21 +1683,21 @@ static void ppc_hw_interrupt(CPUPPCState *env)
> bool async_deliver;
>
> /* External reset */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_RESET)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_RESET);
> + if (env->pending_interrupts & PPC_INTERRUPT_RESET) {
> + env->pending_interrupts &= ~PPC_INTERRUPT_RESET;
> powerpc_excp(cpu, POWERPC_EXCP_RESET);
> return;
> }
> /* Machine check exception */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_MCK)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_MCK);
> + if (env->pending_interrupts & PPC_INTERRUPT_MCK) {
> + env->pending_interrupts &= ~PPC_INTERRUPT_MCK;
> powerpc_excp(cpu, POWERPC_EXCP_MCHECK);
> return;
> }
> #if 0 /* TODO */
> /* External debug exception */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_DEBUG)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_DEBUG);
> + if (env->pending_interrupts & PPC_INTERRUPT_DEBUG) {
> + env->pending_interrupts &= ~PPC_INTERRUPT_DEBUG;
> powerpc_excp(cpu, POWERPC_EXCP_DEBUG);
> return;
> }
> @@ -1712,19 +1712,19 @@ static void ppc_hw_interrupt(CPUPPCState *env)
> async_deliver = FIELD_EX64(env->msr, MSR, EE) || env->resume_as_sreset;
>
> /* Hypervisor decrementer exception */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_HDECR)) {
> + if (env->pending_interrupts & PPC_INTERRUPT_HDECR) {
> /* LPCR will be clear when not supported so this will work */
> bool hdice = !!(env->spr[SPR_LPCR] & LPCR_HDICE);
> if ((async_deliver || !FIELD_EX64_HV(env->msr)) && hdice) {
> /* HDEC clears on delivery */
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_HDECR);
> + env->pending_interrupts &= ~PPC_INTERRUPT_HDECR;
> powerpc_excp(cpu, POWERPC_EXCP_HDECR);
> return;
> }
> }
>
> /* Hypervisor virtualization interrupt */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_HVIRT)) {
> + if (env->pending_interrupts & PPC_INTERRUPT_HVIRT) {
> /* LPCR will be clear when not supported so this will work */
> bool hvice = !!(env->spr[SPR_LPCR] & LPCR_HVICE);
> if ((async_deliver || !FIELD_EX64_HV(env->msr)) && hvice) {
> @@ -1734,7 +1734,7 @@ static void ppc_hw_interrupt(CPUPPCState *env)
> }
>
> /* External interrupt can ignore MSR:EE under some circumstances */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_EXT)) {
> + if (env->pending_interrupts & PPC_INTERRUPT_EXT) {
> bool lpes0 = !!(env->spr[SPR_LPCR] & LPCR_LPES0);
> bool heic = !!(env->spr[SPR_LPCR] & LPCR_HEIC);
> /* HEIC blocks delivery to the hypervisor */
> @@ -1751,45 +1751,45 @@ static void ppc_hw_interrupt(CPUPPCState *env)
> }
> if (FIELD_EX64(env->msr, MSR, CE)) {
> /* External critical interrupt */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_CEXT)) {
> + if (env->pending_interrupts & PPC_INTERRUPT_CEXT) {
> powerpc_excp(cpu, POWERPC_EXCP_CRITICAL);
> return;
> }
> }
> if (async_deliver != 0) {
> /* Watchdog timer on embedded PowerPC */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_WDT)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_WDT);
> + if (env->pending_interrupts & PPC_INTERRUPT_WDT) {
> + env->pending_interrupts &= ~PPC_INTERRUPT_WDT;
> powerpc_excp(cpu, POWERPC_EXCP_WDT);
> return;
> }
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_CDOORBELL)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_CDOORBELL);
> + if (env->pending_interrupts & PPC_INTERRUPT_CDOORBELL) {
> + env->pending_interrupts &= ~PPC_INTERRUPT_CDOORBELL;
> powerpc_excp(cpu, POWERPC_EXCP_DOORCI);
> return;
> }
> /* Fixed interval timer on embedded PowerPC */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_FIT)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_FIT);
> + if (env->pending_interrupts & PPC_INTERRUPT_FIT) {
> + env->pending_interrupts &= ~PPC_INTERRUPT_FIT;
> powerpc_excp(cpu, POWERPC_EXCP_FIT);
> return;
> }
> /* Programmable interval timer on embedded PowerPC */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_PIT)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_PIT);
> + if (env->pending_interrupts & PPC_INTERRUPT_PIT) {
> + env->pending_interrupts &= ~PPC_INTERRUPT_PIT;
> powerpc_excp(cpu, POWERPC_EXCP_PIT);
> return;
> }
> /* Decrementer exception */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_DECR)) {
> + if (env->pending_interrupts & PPC_INTERRUPT_DECR) {
> if (ppc_decr_clear_on_delivery(env)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_DECR);
> + env->pending_interrupts &= ~PPC_INTERRUPT_DECR;
> }
> powerpc_excp(cpu, POWERPC_EXCP_DECR);
> return;
> }
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_DOORBELL)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_DOORBELL);
> + if (env->pending_interrupts & PPC_INTERRUPT_DOORBELL) {
> + env->pending_interrupts &= ~PPC_INTERRUPT_DOORBELL;
> if (is_book3s_arch2x(env)) {
> powerpc_excp(cpu, POWERPC_EXCP_SDOOR);
> } else {
> @@ -1797,31 +1797,31 @@ static void ppc_hw_interrupt(CPUPPCState *env)
> }
> return;
> }
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_HDOORBELL)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_HDOORBELL);
> + if (env->pending_interrupts & PPC_INTERRUPT_HDOORBELL) {
> + env->pending_interrupts &= ~PPC_INTERRUPT_HDOORBELL;
> powerpc_excp(cpu, POWERPC_EXCP_SDOOR_HV);
> return;
> }
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_PERFM)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_PERFM);
> + if (env->pending_interrupts & PPC_INTERRUPT_PERFM) {
> + env->pending_interrupts &= ~PPC_INTERRUPT_PERFM;
> powerpc_excp(cpu, POWERPC_EXCP_PERFM);
> return;
> }
> /* Thermal interrupt */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_THERM)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_THERM);
> + if (env->pending_interrupts & PPC_INTERRUPT_THERM) {
> + env->pending_interrupts &= ~PPC_INTERRUPT_THERM;
> powerpc_excp(cpu, POWERPC_EXCP_THERM);
> return;
> }
> /* EBB exception */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_EBB)) {
> + if (env->pending_interrupts & PPC_INTERRUPT_EBB) {
> /*
> * EBB exception must be taken in problem state and
> * with BESCR_GE set.
> */
> if (FIELD_EX64(env->msr, MSR, PR) &&
> (env->spr[SPR_BESCR] & BESCR_GE)) {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_EBB);
> + env->pending_interrupts &= ~PPC_INTERRUPT_EBB;
>
> if (env->spr[SPR_BESCR] & BESCR_PMEO) {
> powerpc_excp(cpu, POWERPC_EXCP_PERFM_EBB);
> @@ -2098,7 +2098,7 @@ static void do_ebb(CPUPPCState *env, int ebb_excp)
> if (FIELD_EX64(env->msr, MSR, PR)) {
> powerpc_excp(cpu, ebb_excp);
> } else {
> - env->pending_interrupts |= 1 << PPC_INTERRUPT_EBB;
> + env->pending_interrupts |= PPC_INTERRUPT_EBB;
> cpu_interrupt(cs, CPU_INTERRUPT_HARD);
> }
> }
> @@ -2209,7 +2209,7 @@ void helper_msgclr(CPUPPCState *env, target_ulong rb)
> return;
> }
>
> - env->pending_interrupts &= ~(1 << irq);
> + env->pending_interrupts &= ~irq;
> }
>
> void helper_msgsnd(target_ulong rb)
> @@ -2228,7 +2228,7 @@ void helper_msgsnd(target_ulong rb)
> CPUPPCState *cenv = &cpu->env;
>
> if ((rb & DBELL_BRDCAST) || (cenv->spr[SPR_BOOKE_PIR] == pir)) {
> - cenv->pending_interrupts |= 1 << irq;
> + cenv->pending_interrupts |= irq;
> cpu_interrupt(cs, CPU_INTERRUPT_HARD);
> }
> }
> @@ -2253,7 +2253,7 @@ void helper_book3s_msgclr(CPUPPCState *env, target_ulong rb)
> return;
> }
>
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_HDOORBELL);
> + env->pending_interrupts &= ~PPC_INTERRUPT_HDOORBELL;
> }
>
> static void book3s_msgsnd_common(int pir, int irq)
> @@ -2267,7 +2267,7 @@ static void book3s_msgsnd_common(int pir, int irq)
>
> /* TODO: broadcast message to all threads of the same processor */
> if (cenv->spr_cb[SPR_PIR].default_value == pir) {
> - cenv->pending_interrupts |= 1 << irq;
> + cenv->pending_interrupts |= irq;
> cpu_interrupt(cs, CPU_INTERRUPT_HARD);
> }
> }
> @@ -2294,7 +2294,7 @@ void helper_book3s_msgclrp(CPUPPCState *env, target_ulong rb)
> return;
> }
>
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_DOORBELL);
> + env->pending_interrupts &= ~PPC_INTERRUPT_DOORBELL;
> }
>
> /*
> diff --git a/target/ppc/misc_helper.c b/target/ppc/misc_helper.c
> index b0a5e7ce76..05e35572bc 100644
> --- a/target/ppc/misc_helper.c
> +++ b/target/ppc/misc_helper.c
> @@ -163,7 +163,7 @@ target_ulong helper_load_dpdes(CPUPPCState *env)
> helper_hfscr_facility_check(env, HFSCR_MSGP, "load DPDES", HFSCR_IC_MSGP);
>
> /* TODO: TCG supports only one thread */
> - if (env->pending_interrupts & (1 << PPC_INTERRUPT_DOORBELL)) {
> + if (env->pending_interrupts & PPC_INTERRUPT_DOORBELL) {
> dpdes = 1;
> }
>
> @@ -185,10 +185,10 @@ void helper_store_dpdes(CPUPPCState *env, target_ulong val)
> }
>
> if (val & 0x1) {
> - env->pending_interrupts |= 1 << PPC_INTERRUPT_DOORBELL;
> + env->pending_interrupts |= PPC_INTERRUPT_DOORBELL;
> cpu_interrupt(cs, CPU_INTERRUPT_HARD);
> } else {
> - env->pending_interrupts &= ~(1 << PPC_INTERRUPT_DOORBELL);
> + env->pending_interrupts &= ~PPC_INTERRUPT_DOORBELL;
> }
> }
> #endif /* defined(TARGET_PPC64) */
--
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 --]
next prev parent reply other threads:[~2022-08-18 6:27 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-15 16:20 [RFC PATCH 00/13] PowerPC interrupt rework Matheus Ferst
2022-08-15 16:20 ` [RFC PATCH 01/13] target/ppc: define PPC_INTERRUPT_* values directly Matheus Ferst
2022-08-18 2:18 ` David Gibson [this message]
2022-08-15 16:20 ` [RFC PATCH 02/13] target/ppc: always use ppc_set_irq to set env->pending_interrupts Matheus Ferst
2022-08-15 16:20 ` [RFC PATCH 03/13] target/ppc: move interrupt masking out of ppc_hw_interrupt Matheus Ferst
2022-08-15 20:09 ` Fabiano Rosas
2022-08-17 13:42 ` Matheus K. Ferst
2022-08-19 14:18 ` Fabiano Rosas
2022-08-15 16:20 ` [RFC PATCH 04/13] target/ppc: prepare to split ppc_interrupt_pending by excp_model Matheus Ferst
2022-08-15 20:25 ` Fabiano Rosas
2022-08-17 13:42 ` Matheus K. Ferst
2022-08-15 16:20 ` [RFC PATCH 05/13] target/ppc: create an interrupt masking method for POWER9/POWER10 Matheus Ferst
2022-08-15 22:39 ` Fabiano Rosas
2022-08-17 13:43 ` Matheus K. Ferst
2022-08-15 16:20 ` [RFC PATCH 06/13] target/ppc: remove embedded interrupts from ppc_pending_interrupt_p9 Matheus Ferst
2022-08-15 21:23 ` Fabiano Rosas
2022-08-17 13:44 ` Matheus K. Ferst
2022-08-19 16:04 ` Fabiano Rosas
2022-08-15 16:20 ` [RFC PATCH 07/13] target/ppc: create an interrupt masking method for POWER8 Matheus Ferst
2022-08-15 16:20 ` [RFC PATCH 08/13] target/ppc: remove unused interrupts from ppc_pending_interrupt_p8 Matheus Ferst
2022-08-15 16:20 ` [RFC PATCH 09/13] target/ppc: create an interrupt masking method for POWER7 Matheus Ferst
2022-08-15 16:20 ` [RFC PATCH 10/13] target/ppc: remove unused interrupts from ppc_pending_interrupt_p7 Matheus Ferst
2022-08-15 16:20 ` [RFC PATCH 11/13] target/ppc: remove ppc_store_lpcr from CONFIG_USER_ONLY builds Matheus Ferst
2022-08-15 16:20 ` [RFC PATCH 12/13] target/ppc: introduce ppc_maybe_interrupt Matheus Ferst
2022-08-15 16:20 ` [RFC PATCH 13/13] target/ppc: unify cpu->has_work based on cs->interrupt_request Matheus Ferst
2022-08-15 20:02 ` [RFC PATCH 00/13] PowerPC interrupt rework Cédric Le Goater
2022-08-17 13:42 ` Matheus K. Ferst
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=Yv2hWTtmjUwqScQP@yekko \
--to=david@gibson.dropbear.id.au \
--cc=alex.bennee@linaro.org \
--cc=clg@kaod.org \
--cc=danielhb413@gmail.com \
--cc=fbarrat@linux.ibm.com \
--cc=groug@kaod.org \
--cc=matheus.ferst@eldorado.org.br \
--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.