mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 00:21:17 +00:00
sparc32: Implement hard_smp_processor_id() via instruction patching.
This is the last non-trivial user of btfixup. Like sparc64, use a special patch section to resolve the various implementations of how to read the current CPU's ID when we don't have current_thread_info()->cpu necessarily available. Signed-off-by: David S. Miller <davem@davemloft.net> Tested-by: Sam Ravnborg <sam@ravnborg.org>
This commit is contained in:
parent
5d83d66635
commit
c68e5d39a5
10 changed files with 99 additions and 175 deletions
|
@ -7,6 +7,7 @@
|
|||
* Copyright (C) 1997 Anton Blanchard (anton@progsoc.uts.edu.au)
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/errno.h>
|
||||
|
||||
#include <asm/head.h>
|
||||
|
@ -1347,4 +1348,26 @@ flushw_all:
|
|||
ret
|
||||
restore
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
ENTRY(hard_smp_processor_id)
|
||||
661: rd %tbr, %g1
|
||||
srl %g1, 12, %o0
|
||||
and %o0, 3, %o0
|
||||
.section .cpuid_patch, "ax"
|
||||
/* Instruction location. */
|
||||
.word 661b
|
||||
/* SUN4D implementation. */
|
||||
lda [%g0] ASI_M_VIKING_TMP1, %o0
|
||||
nop
|
||||
nop
|
||||
/* LEON implementation. */
|
||||
rd %asr17, %o0
|
||||
srl %o0, 0x1c, %o0
|
||||
nop
|
||||
.previous
|
||||
retl
|
||||
nop
|
||||
ENDPROC(hard_smp_processor_id)
|
||||
#endif
|
||||
|
||||
/* End of entry.S */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue