Index: include/cpu.h =================================================================== RCS file: /cvs/src/sys/arch/sparc64/include/cpu.h,v retrieving revision 1.88 diff -u -p -r1.88 cpu.h --- include/cpu.h 28 Aug 2015 23:28:39 -0000 1.88 +++ include/cpu.h 17 Aug 2016 06:19:45 -0000 @@ -169,22 +169,12 @@ struct cpu_info { extern struct cpu_info *cpus; -#define curpcb curcpu()->ci_cpcb -#define fpproc curcpu()->ci_fpproc - #ifdef MULTIPROCESSOR -#define cpu_number() (curcpu()->ci_number) +register struct cpu_info *__curcpu asm ("%g7"); -extern __inline struct cpu_info *curcpu(void); -extern __inline struct cpu_info * -curcpu(void) -{ - struct cpu_info *ci; - - __asm volatile("mov %%g7, %0" : "=r"(ci)); - return (ci->ci_self); -} +#define curcpu() (__curcpu->ci_self) +#define cpu_number() (__curcpu->ci_number) #define CPU_IS_PRIMARY(ci) ((ci)->ci_number == 0) #define CPU_INFO_ITERATOR int @@ -200,10 +190,11 @@ void sparc64_broadcast_ipi(void (*)(void void cpu_unidle(struct cpu_info *); -#else +#else /* MULTIPROCESSOR */ +#define __curcpu ((struct cpu_info *)CPUINFO_VA) +#define curcpu() __curcpu #define cpu_number() 0 -#define curcpu() ((struct cpu_info *)CPUINFO_VA) #define CPU_IS_PRIMARY(ci) 1 #define CPU_INFO_ITERATOR int @@ -214,7 +205,10 @@ void cpu_unidle(struct cpu_info *); #define cpu_unidle(ci) -#endif +#endif /* MULTIPROCESSOR */ + +#define curpcb __curcpu->ci_cpcb +#define fpproc __curcpu->ci_fpproc #define CPU_BUSY_CYCLE() do {} while (0)