Skip to content

Commit

Permalink
[S390] hibernation: fix lowcore handling
Browse files Browse the repository at this point in the history
Our swsusp_arch_suspend() backend implementation disables prefixing
by setting the contents of the prefix register to 0.
However afterwards common code functions are called which might
access percpu data structures.
Since the lowcore contains e.g. the percpu base pointer this isn't
a good idea. So fix this by copying the hibernating cpu's lowcore to
absolute address zero.

Signed-off-by: Heiko Carstens <[email protected]>
Signed-off-by: Martin Schwidefsky <[email protected]>
  • Loading branch information
heicarst authored and Martin Schwidefsky committed Jul 24, 2009
1 parent 4be3bd7 commit 5f954c3
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
4 changes: 2 additions & 2 deletions arch/s390/kernel/early.c
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ static noinline __init void detect_machine_type(void)
machine_flags |= MACHINE_FLAG_VM;
}

static void early_pgm_check_handler(void)
static __init void early_pgm_check_handler(void)
{
unsigned long addr;
const struct exception_table_entry *fixup;
Expand All @@ -222,7 +222,7 @@ static void early_pgm_check_handler(void)
S390_lowcore.program_old_psw.addr = fixup->fixup | PSW_ADDR_AMODE;
}

void setup_lowcore_early(void)
static noinline __init void setup_lowcore_early(void)
{
psw_t psw;

Expand Down
13 changes: 8 additions & 5 deletions arch/s390/power/swsusp_asm64.S
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ swsusp_arch_suspend:
/* Store prefix register on stack */
stpx __SF_EMPTY(%r15)

/* Setup base register for lowcore (absolute 0) */
llgf %r1,__SF_EMPTY(%r15)
/* Save prefix register contents for lowcore */
llgf %r4,__SF_EMPTY(%r15)

/* Get pointer to save area */
aghi %r1,0x1000
lghi %r1,0x1000

/* Store registers */
mvc 0x318(4,%r1),__SF_EMPTY(%r15) /* move prefix to lowcore */
Expand Down Expand Up @@ -79,8 +79,11 @@ swsusp_arch_suspend:
xc __SF_EMPTY(4,%r15),__SF_EMPTY(%r15)
spx __SF_EMPTY(%r15)

/* Setup lowcore */
brasl %r14,setup_lowcore_early
lghi %r2,0
lghi %r3,2*PAGE_SIZE
lghi %r5,2*PAGE_SIZE
1: mvcle %r2,%r4,0
jo 1b

/* Save image */
brasl %r14,swsusp_save
Expand Down

0 comments on commit 5f954c3

Please sign in to comment.