s390/hibernate: add early resume function
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Thu, 29 Aug 2013 17:36:49 +0000 (19:36 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 30 Aug 2013 06:57:15 +0000 (08:57 +0200)
Some functions that do arch specific resume actions are called
directly from swsusp_asm64.S . Before we add another function call
provide a generic s390_early_resume function which can be used
for this purpose.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/cio.h
arch/s390/kernel/suspend.c
arch/s390/kernel/swsusp_asm64.S
drivers/s390/cio/css.h

index ffb898961c8d28ecdc385443a37d8f523cf72daf..d42625053c37bed90015ffc0abe02a67acbd6f02 100644 (file)
@@ -296,6 +296,7 @@ static inline int ccw_dev_id_is_equal(struct ccw_dev_id *dev_id1,
        return 0;
 }
 
+void channel_subsystem_reinit(void);
 extern void css_schedule_reprobe(void);
 
 extern void reipl_ccw_dev(struct ccw_dev_id *id);
index c479d2f9605ba6ef3dede5a669be872f97494b0f..eebab9f83f1d053a600b76aecb8a3090c78cb696 100644 (file)
@@ -10,6 +10,8 @@
 #include <linux/suspend.h>
 #include <linux/mm.h>
 #include <asm/ctl_reg.h>
+#include <asm/ipl.h>
+#include <asm/cio.h>
 
 /*
  * References to section boundaries
@@ -211,3 +213,10 @@ void restore_processor_state(void)
        __ctl_set_bit(0,28);
        local_mcck_enable();
 }
+
+/* Called at the end of swsusp_arch_resume */
+void s390_early_resume(void)
+{
+       lgr_info_log();
+       channel_subsystem_reinit();
+}
index c487be4cfc81c5a9cf288b448ec049b0f11fec66..6b09fdffbd2f7e7a787ca5100f074be15ff71f33 100644 (file)
@@ -281,11 +281,8 @@ restore_registers:
        lghi    %r2,0
        brasl   %r14,arch_set_page_states
 
-       /* Log potential guest relocation */
-       brasl   %r14,lgr_info_log
-
-       /* Reinitialize the channel subsystem */
-       brasl   %r14,channel_subsystem_reinit
+       /* Call arch specific early resume code */
+       brasl   %r14,s390_early_resume
 
        /* Return 0 */
        lmg     %r6,%r15,STACK_FRAME_OVERHEAD + __SF_GPRS(%r15)
index b1de6033523806e8fa58e1f2ed87b31c0ca950d2..29351321bad6c73b97cdfc490c1d5d71ae12e6ce 100644 (file)
@@ -130,8 +130,6 @@ struct channel_subsystem {
 
 extern struct channel_subsystem *channel_subsystems[];
 
-void channel_subsystem_reinit(void);
-
 /* Helper functions to build lists for the slow path. */
 void css_schedule_eval(struct subchannel_id schid);
 void css_schedule_eval_all(void);
This page took 0.027505 seconds and 5 git commands to generate.