qemu-devel
[Top][All Lists]
Advanced

[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);
>      }
>  }
>  




reply via email to

[Prev in Thread] Current Thread [Next in Thread]