[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 02/30] s390x/tcg: cleanup service interrupt i
From: |
Cornelia Huck |
Subject: |
Re: [Qemu-devel] [PATCH v2 02/30] s390x/tcg: cleanup service interrupt injection |
Date: |
Tue, 10 Oct 2017 16:23:54 +0200 |
On Thu, 28 Sep 2017 22:36:40 +0200
David Hildenbrand <address@hidden> wrote:
> There are still some leftovers from old virtio interrupts in there.
> Most importantly, we don't have to queue service interrupts anymore.
> Just like KVM, we can simply multiplex the SCLP service interrupts and
> avoid the queue.
>
> Also, now only valid parametes/cpu_addr will be stored on service
s/parametes/parameters/
> interrupts.
>
> Signed-off-by: David Hildenbrand <address@hidden>
> ---
> target/s390x/cpu.c | 2 --
> target/s390x/cpu.h | 10 +---------
> target/s390x/excp_helper.c | 16 +++++-----------
> target/s390x/internal.h | 2 --
> target/s390x/interrupt.c | 18 ++++--------------
> 5 files changed, 10 insertions(+), 38 deletions(-)
>
> diff --git a/target/s390x/interrupt.c b/target/s390x/interrupt.c
> index b9c30f86d7..cbc7b7696d 100644
> --- a/target/s390x/interrupt.c
> +++ b/target/s390x/interrupt.c
> @@ -54,22 +54,12 @@ void program_interrupt(CPUS390XState *env, uint32_t code,
> int ilen)
> }
>
> #if !defined(CONFIG_USER_ONLY)
> -void cpu_inject_ext(S390CPU *cpu, uint32_t code, uint32_t param,
> - uint64_t param64)
> +static void cpu_inject_service(S390CPU *cpu, uint32_t param)
> {
> CPUS390XState *env = &cpu->env;
>
> - if (env->ext_index == MAX_EXT_QUEUE - 1) {
> - /* ugh - can't queue anymore. Let's drop. */
> - return;
> - }
> -
> - env->ext_index++;
> - assert(env->ext_index < MAX_EXT_QUEUE);
> -
> - env->ext_queue[env->ext_index].code = code;
> - env->ext_queue[env->ext_index].param = param;
> - env->ext_queue[env->ext_index].param64 = param64;
> + /* multiplexing is good enough for sclp - also kvm does that internally
> */
"kvm does that internally as well"?
(Can fix while applying.)
> + env->service_param |= param;
>
> env->pending_int |= INTERRUPT_EXT_SERVICE;
> cpu_interrupt(CPU(cpu), CPU_INTERRUPT_HARD);
> @@ -145,7 +135,7 @@ void s390_sclp_extint(uint32_t parm)
> } else {
> S390CPU *dummy_cpu = s390_cpu_addr2state(0);
>
> - cpu_inject_ext(dummy_cpu, EXT_SERVICE, parm, 0);
> + cpu_inject_service(dummy_cpu, parm);
> }
> }
>