mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 01:03:55 -06:00
s390x/tcg: injection of emergency signals and external calls
Preparation for new TCG SIGP code. Especially also prepare for indicating that another external call is already pending. Take care of interrupt priority. Signed-off-by: David Hildenbrand <david@redhat.com> Message-Id: <20170928203708.9376-4-david@redhat.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
d516f74c99
commit
14ca122e75
4 changed files with 50 additions and 2 deletions
|
@ -81,6 +81,32 @@ void cpu_inject_cpu_timer(S390CPU *cpu)
|
|||
cpu_interrupt(CPU(cpu), CPU_INTERRUPT_HARD);
|
||||
}
|
||||
|
||||
void cpu_inject_emergency_signal(S390CPU *cpu, uint16_t src_cpu_addr)
|
||||
{
|
||||
CPUS390XState *env = &cpu->env;
|
||||
|
||||
g_assert(src_cpu_addr < S390_MAX_CPUS);
|
||||
set_bit(src_cpu_addr, env->emergency_signals);
|
||||
|
||||
env->pending_int |= INTERRUPT_EMERGENCY_SIGNAL;
|
||||
cpu_interrupt(CPU(cpu), CPU_INTERRUPT_HARD);
|
||||
}
|
||||
|
||||
int cpu_inject_external_call(S390CPU *cpu, uint16_t src_cpu_addr)
|
||||
{
|
||||
CPUS390XState *env = &cpu->env;
|
||||
|
||||
g_assert(src_cpu_addr < S390_MAX_CPUS);
|
||||
if (env->pending_int & INTERRUPT_EXTERNAL_CALL) {
|
||||
return -EBUSY;
|
||||
}
|
||||
env->external_call_addr = src_cpu_addr;
|
||||
|
||||
env->pending_int |= INTERRUPT_EXTERNAL_CALL;
|
||||
cpu_interrupt(CPU(cpu), CPU_INTERRUPT_HARD);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cpu_inject_io(S390CPU *cpu, uint16_t subchannel_id,
|
||||
uint16_t subchannel_number,
|
||||
uint32_t io_int_parm, uint32_t io_int_word)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue