Revision 7f7f9752

b/cpus.c
1401 1401
            apic_deliver_nmi(env->apic_state);
1402 1402
        }
1403 1403
    }
1404
#elif defined(TARGET_S390X)
1405
    CPUState *cs;
1406
    S390CPU *cpu;
1407

  
1408
    for (cs = first_cpu; cs != NULL; cs = cs->next_cpu) {
1409
        cpu = S390_CPU(cs);
1410
        if (cpu->env.cpu_num == monitor_get_cpu_index()) {
1411
            if (s390_cpu_restart(S390_CPU(cs)) == -1) {
1412
                error_set(errp, QERR_UNSUPPORTED);
1413
                return;
1414
            }
1415
            break;
1416
        }
1417
    }
1404 1418
#else
1405 1419
    error_set(errp, QERR_UNSUPPORTED);
1406 1420
#endif
b/hmp-commands.hx
822 822
the same that can be specified in the @code{-boot} command line option.
823 823
ETEXI
824 824

  
825
#if defined(TARGET_I386)
825
#if defined(TARGET_I386) || defined(TARGET_S390X)
826 826
    {
827 827
        .name       = "nmi",
828 828
        .args_type  = "",
......
834 834
STEXI
835 835
@item nmi @var{cpu}
836 836
@findex nmi
837
Inject an NMI on the given CPU (x86 only).
837
Inject an NMI (x86) or RESTART (s390x) on the given CPU.
838 838

  
839 839
ETEXI
840 840

  
b/qmp-commands.hx
487 487
<- { "return": {} }
488 488

  
489 489
Note: inject-nmi fails when the guest doesn't support injecting.
490
      Currently, only x86 guests do.
490
      Currently, only x86 (NMI) and s390x (RESTART) guests do.
491 491

  
492 492
EQMP
493 493

  
b/target-s390x/cpu.h
1069 1069
int kvm_s390_get_registers_partial(CPUState *cpu);
1070 1070
int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,
1071 1071
                                    int vq, bool assign);
1072
int kvm_s390_cpu_restart(S390CPU *cpu);
1072 1073
#else
1073 1074
static inline void kvm_s390_io_interrupt(S390CPU *cpu,
1074 1075
                                        uint16_t subchannel_id,
......
1093 1094
{
1094 1095
    return -ENOSYS;
1095 1096
}
1097
static inline int kvm_s390_cpu_restart(S390CPU *cpu)
1098
{
1099
    return -ENOSYS;
1100
}
1096 1101
#endif
1097 1102

  
1103
static inline int s390_cpu_restart(S390CPU *cpu)
1104
{
1105
    if (kvm_enabled()) {
1106
        return kvm_s390_cpu_restart(cpu);
1107
    }
1108
    return -ENOSYS;
1109
}
1110

  
1098 1111
static inline void s390_io_interrupt(S390CPU *cpu,
1099 1112
                                     uint16_t subchannel_id,
1100 1113
                                     uint16_t subchannel_nr,
b/target-s390x/kvm.c
612 612
    return r;
613 613
}
614 614

  
615
static int s390_cpu_restart(S390CPU *cpu)
615
int kvm_s390_cpu_restart(S390CPU *cpu)
616 616
{
617 617
    kvm_s390_interrupt(cpu, KVM_S390_RESTART, 0);
618 618
    s390_add_running_cpu(cpu);
619 619
    qemu_cpu_kick(CPU(cpu));
620
    DPRINTF("DONE: SIGP cpu restart: %p\n", &cpu->env);
620
    DPRINTF("DONE: KVM cpu restart: %p\n", &cpu->env);
621 621
    return 0;
622 622
}
623 623

  
......
686 686

  
687 687
    switch (order_code) {
688 688
        case SIGP_RESTART:
689
            r = s390_cpu_restart(target_cpu);
689
            r = kvm_s390_cpu_restart(target_cpu);
690 690
            break;
691 691
        case SIGP_STORE_STATUS_ADDR:
692 692
            r = s390_store_status(target_env, parameter);

Also available in: Unified diff