Commit 4851d226 authored by Alexander Gordeev's avatar Alexander Gordeev Committed by Vasily Gorbik

s390/smp: sort out physical vs virtual pointers usage

With commit 57892847 ("s390/smp: reallocate IPL CPU lowcore")
virtual addresses are wrongly passed to memblock_free_late() and
SPX instructions on IPL CPU reinitialization.

Note: this does not fix a bug currently, since virtual and
physical addresses are identical.

Fixes: 57892847 ("s390/smp: reallocate IPL CPU lowcore")
Reviewed-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent 8944d05f
...@@ -1252,7 +1252,7 @@ static __always_inline void set_new_lowcore(struct lowcore *lc) ...@@ -1252,7 +1252,7 @@ static __always_inline void set_new_lowcore(struct lowcore *lc)
src.odd = sizeof(S390_lowcore); src.odd = sizeof(S390_lowcore);
dst.even = (unsigned long) lc; dst.even = (unsigned long) lc;
dst.odd = sizeof(*lc); dst.odd = sizeof(*lc);
pfx = (unsigned long) lc; pfx = __pa(lc);
asm volatile( asm volatile(
" mvcl %[dst],%[src]\n" " mvcl %[dst],%[src]\n"
...@@ -1292,8 +1292,8 @@ static int __init smp_reinit_ipl_cpu(void) ...@@ -1292,8 +1292,8 @@ static int __init smp_reinit_ipl_cpu(void)
local_irq_restore(flags); local_irq_restore(flags);
free_pages(lc_ipl->async_stack - STACK_INIT_OFFSET, THREAD_SIZE_ORDER); free_pages(lc_ipl->async_stack - STACK_INIT_OFFSET, THREAD_SIZE_ORDER);
memblock_free_late(lc_ipl->mcck_stack - STACK_INIT_OFFSET, THREAD_SIZE); memblock_free_late(__pa(lc_ipl->mcck_stack - STACK_INIT_OFFSET), THREAD_SIZE);
memblock_free_late((unsigned long) lc_ipl, sizeof(*lc_ipl)); memblock_free_late(__pa(lc_ipl), sizeof(*lc_ipl));
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment