s390: add machine check SIGP
authorSven Schnelle <svens@linux.ibm.com>
Tue, 17 Mar 2020 12:37:49 +0000 (13:37 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Thu, 28 May 2020 10:21:42 +0000 (12:21 +0200)
This will be used with the upcoming entry.S changes to signal
that there's a machine check pending that cannot be handled in
the Machine check handler itself.

Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/smp.h
arch/s390/kernel/smp.c

index 231a51e..7326f11 100644 (file)
@@ -58,5 +58,6 @@ extern int smp_rescan_cpus(void);
 extern void __noreturn cpu_die(void);
 extern void __cpu_die(unsigned int cpu);
 extern int __cpu_disable(void);
+extern void schedule_mcck_handler(void);
 
 #endif /* __ASM_SMP_H */
index 7eaabba..fc10412 100644 (file)
@@ -61,6 +61,7 @@ enum {
        ec_schedule = 0,
        ec_call_function_single,
        ec_stop_cpu,
+       ec_mcck_pending,
 };
 
 enum {
@@ -403,6 +404,11 @@ int smp_find_processor_id(u16 address)
        return -1;
 }
 
+void schedule_mcck_handler(void)
+{
+       pcpu_ec_call(pcpu_devices + smp_processor_id(), ec_mcck_pending);
+}
+
 bool arch_vcpu_is_preempted(int cpu)
 {
        if (test_cpu_flag_of(CIF_ENABLED_WAIT, cpu))
@@ -497,6 +503,8 @@ static void smp_handle_ext_call(void)
                scheduler_ipi();
        if (test_bit(ec_call_function_single, &bits))
                generic_smp_call_function_single_interrupt();
+       if (test_bit(ec_mcck_pending, &bits))
+               s390_handle_mcck();
 }
 
 static void do_ext_call_interrupt(struct ext_code ext_code,