qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v1 06/27] s390x/tcg: injection of emergency sign


From: David Hildenbrand
Subject: Re: [Qemu-devel] [PATCH v1 06/27] s390x/tcg: injection of emergency signals and extarnal calls
Date: Mon, 25 Sep 2017 15:16:31 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0

> @@ -248,6 +249,19 @@ static void do_ext_interrupt(CPUS390XState *env)
>          lowcore->ext_int_code = cpu_to_be16(EXT_CPU_TIMER);
>          lowcore->cpu_addr = 0;
>          env->pending_int &= ~INTERRUPT_EXT_CPU_TIMER;
> +    } else if (env->pending_int & INTERRUPT_EMERGENCY_SIGNAL) {
> +        lowcore->ext_int_code = cpu_to_be16(EXT_EMERGENCY);
> +        cpu_addr = find_first_bit(env->emergency_signals, S390_MAX_CPUS);
> +        g_assert(cpu_addr < S390_MAX_CPUS);
> +        lowcore->cpu_addr = cpu_to_be16(cpu_addr);
> +        clear_bit(cpu_addr, env->emergency_signals);
> +        if (bitmap_empty(env->emergency_signals, max_cpus)) {
> +            env->pending_int &= ~INTERRUPT_EMERGENCY_SIGNAL;
> +        }
> +    } else if (env->pending_int & INTERRUPT_EXTERNAL_CALL) {
> +        lowcore->ext_int_code = cpu_to_be16(EXT_EXTERNAL_CALL);
> +        lowcore->cpu_addr = cpu_to_be16(env->external_call_addr);
> +        env->pending_int &= ~INTERRUPT_EXTERNAL_CALL;

The priority of the interrupts is still wrong and we don't check for the
subclass-mask bits. Will fix this.

-- 

Thanks,

David



reply via email to

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