diff --git a/arch/s390/kernel/machine_kexec.c b/arch/s390/kernel/machine_kexec.c
index 2a8e73266428e360bf0992d0d4eb28bb0c1aa78a..eb473fc835b2398d738a4c72f693a1a35d1dc53a 100644
--- a/arch/s390/kernel/machine_kexec.c
+++ b/arch/s390/kernel/machine_kexec.c
@@ -254,14 +254,13 @@ static void __do_machine_kexec(void *data)
 	relocate_kernel_t data_mover;
 	struct kimage *image = data;
 
-	s390_reset_system();
 	data_mover = (relocate_kernel_t) page_to_phys(image->control_code_page);
-
-	__arch_local_irq_stnsm(0xfb); /* disable DAT - avoid no-execute */
-	/* Call the moving routine */
 	diag308_subcode = DIAG308_CLEAR_RESET;
 	if (sclp.has_iplcc)
 		diag308_subcode |= DIAG308_FLAG_EI;
+	s390_reset_system();
+
+	__arch_local_irq_stnsm(0xfb); /* disable DAT - avoid no-execute */
 	(*data_mover)(&image->head, image->start, diag308_subcode);
 
 	/* Die if kexec returns */