Merge branch 'parisc-3.12' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux
Pull parisc fix from Helge Deller: "This is a 2-line patch to save the CPU register which holds our task thread info pointer before calling a firmware function and then to restore it again afterwards. This is necessary because on some 64bit machines the high-order 32bits are being clobbered by the firmware call, and thus we failed to bring up secondary CPUs (and instead crashed the kernel) in some situations eg if we had more than 4GB RAM. This patch fixes a bug which has been since ever in the parisc linux kernel and which prevented some people to use a 64bit kernel" * 'parisc-3.12' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux: parisc: Do not crash 64bit SMP kernels on machines with >= 4GB RAM
This commit is contained in:
commit
a2ff82065b
|
@ -195,6 +195,8 @@ common_stext:
|
||||||
ldw MEM_PDC_HI(%r0),%r6
|
ldw MEM_PDC_HI(%r0),%r6
|
||||||
depd %r6, 31, 32, %r3 /* move to upper word */
|
depd %r6, 31, 32, %r3 /* move to upper word */
|
||||||
|
|
||||||
|
mfctl %cr30,%r6 /* PCX-W2 firmware bug */
|
||||||
|
|
||||||
ldo PDC_PSW(%r0),%arg0 /* 21 */
|
ldo PDC_PSW(%r0),%arg0 /* 21 */
|
||||||
ldo PDC_PSW_SET_DEFAULTS(%r0),%arg1 /* 2 */
|
ldo PDC_PSW_SET_DEFAULTS(%r0),%arg1 /* 2 */
|
||||||
ldo PDC_PSW_WIDE_BIT(%r0),%arg2 /* 2 */
|
ldo PDC_PSW_WIDE_BIT(%r0),%arg2 /* 2 */
|
||||||
|
@ -203,6 +205,8 @@ common_stext:
|
||||||
copy %r0,%arg3
|
copy %r0,%arg3
|
||||||
|
|
||||||
stext_pdc_ret:
|
stext_pdc_ret:
|
||||||
|
mtctl %r6,%cr30 /* restore task thread info */
|
||||||
|
|
||||||
/* restore rfi target address*/
|
/* restore rfi target address*/
|
||||||
ldd TI_TASK-THREAD_SZ_ALGN(%sp), %r10
|
ldd TI_TASK-THREAD_SZ_ALGN(%sp), %r10
|
||||||
tophys_r1 %r10
|
tophys_r1 %r10
|
||||||
|
|
Loading…
Reference in a new issue