On Thu, 28 Sep 2017 22:36:40 +0200 David Hildenbrand <da...@redhat.com> 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 <da...@redhat.com> > --- > 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); > } > } >