Commit de5ecd28 authored by David Mosberger's avatar David Mosberger

ia64: Move local per-CPU area to the last page of the address space.

	This makes it possible to address CPU-local variables via
	an addl (instead of addl/ld8 or movl).  Suggsted by John Worley.

	This doesn't buy us much at the moment, since GCC cannot take
	advantage of it, but hopefully GCC will support this type of
	addressing some day.
parent 3483a9c3
...@@ -688,7 +688,7 @@ GLOBAL_ENTRY(ia64_leave_syscall) ...@@ -688,7 +688,7 @@ GLOBAL_ENTRY(ia64_leave_syscall)
mov b7=r0 // clear b7 mov b7=r0 // clear b7
;; ;;
(pUStk) st1 [r14]=r3 (pUStk) st1 [r14]=r3
movl r17=THIS_CPU(ia64_phys_stacked_size_p8) addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0
;; ;;
mov r16=ar.bsp // get existing backing store pointer mov r16=ar.bsp // get existing backing store pointer
srlz.i // ensure interruption collection is off srlz.i // ensure interruption collection is off
...@@ -841,7 +841,7 @@ GLOBAL_ENTRY(ia64_leave_kernel) ...@@ -841,7 +841,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
shr.u r18=r19,16 // get byte size of existing "dirty" partition shr.u r18=r19,16 // get byte size of existing "dirty" partition
;; ;;
mov r16=ar.bsp // get existing backing store pointer mov r16=ar.bsp // get existing backing store pointer
movl r17=THIS_CPU(ia64_phys_stacked_size_p8) addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0
;; ;;
ld4 r17=[r17] // r17 = cpu_data->phys_stacked_size_p8 ld4 r17=[r17] // r17 = cpu_data->phys_stacked_size_p8
(pKStk) br.cond.dpnt skip_rbs_switch (pKStk) br.cond.dpnt skip_rbs_switch
......
...@@ -165,7 +165,7 @@ ENTRY(fsys_gettimeofday) ...@@ -165,7 +165,7 @@ ENTRY(fsys_gettimeofday)
.altrp b6 .altrp b6
.body .body
add r9=TI_FLAGS+IA64_TASK_SIZE,r16 add r9=TI_FLAGS+IA64_TASK_SIZE,r16
movl r3=THIS_CPU(cpu_info) addl r3=THIS_CPU(cpu_info),r0
mov.m r31=ar.itc // put time stamp into r31 (ITC) == now (35 cyc) mov.m r31=ar.itc // put time stamp into r31 (ITC) == now (35 cyc)
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
...@@ -177,7 +177,7 @@ ENTRY(fsys_gettimeofday) ...@@ -177,7 +177,7 @@ ENTRY(fsys_gettimeofday)
movl r19=xtime // xtime is a timespec struct movl r19=xtime // xtime is a timespec struct
ld8 r10=[r10] // r10 <- __per_cpu_offset[0] ld8 r10=[r10] // r10 <- __per_cpu_offset[0]
movl r21=THIS_CPU(cpu_info) addl r21=THIS_CPU(cpu_info),r0
;; ;;
add r10=r21, r10 // r10 <- &cpu_data(time_keeper_id) add r10=r21, r10 // r10 <- &cpu_data(time_keeper_id)
tbit.nz p8,p0 = r2, IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT_BIT tbit.nz p8,p0 = r2, IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT_BIT
......
...@@ -20,9 +20,9 @@ ...@@ -20,9 +20,9 @@
#include <asm/percpu.h> #include <asm/percpu.h>
/* 0xa000000000000000 - 0xa000000000000000+PERCPU_PAGE_SIZE remain unmapped */ /* 0xa000000000000000 - 0xa000000000000000+PERCPU_PAGE_SIZE remain unmapped */
#define PERCPU_ADDR (0xa000000000000000 + PERCPU_PAGE_SIZE) #define GATE_ADDR (0xa000000000000000 + PERCPU_PAGE_SIZE)
#define GATE_ADDR (0xa000000000000000 + 2*PERCPU_PAGE_SIZE)
#define KERNEL_START 0xa000000100000000 #define KERNEL_START 0xa000000100000000
#define PERCPU_ADDR (-PERCPU_PAGE_SIZE)
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
......
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