Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
9b80b11c
Commit
9b80b11c
authored
Nov 11, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc-merge
parents
b0b7b8ea
271c3f35
Changes
59
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
59 changed files
with
1790 additions
and
492 deletions
+1790
-492
arch/powerpc/Kconfig
arch/powerpc/Kconfig
+3
-8
arch/powerpc/kernel/Makefile
arch/powerpc/kernel/Makefile
+8
-2
arch/powerpc/kernel/asm-offsets.c
arch/powerpc/kernel/asm-offsets.c
+31
-14
arch/powerpc/kernel/head_32.S
arch/powerpc/kernel/head_32.S
+1
-0
arch/powerpc/kernel/lparcfg.c
arch/powerpc/kernel/lparcfg.c
+10
-13
arch/powerpc/kernel/paca.c
arch/powerpc/kernel/paca.c
+0
-7
arch/powerpc/kernel/proc_ppc64.c
arch/powerpc/kernel/proc_ppc64.c
+2
-2
arch/powerpc/kernel/rtas-proc.c
arch/powerpc/kernel/rtas-proc.c
+0
-1
arch/powerpc/kernel/setup-common.c
arch/powerpc/kernel/setup-common.c
+3
-5
arch/powerpc/kernel/setup_64.c
arch/powerpc/kernel/setup_64.c
+10
-52
arch/powerpc/kernel/signal_32.c
arch/powerpc/kernel/signal_32.c
+3
-9
arch/powerpc/kernel/smp.c
arch/powerpc/kernel/smp.c
+2
-2
arch/powerpc/kernel/sysfs.c
arch/powerpc/kernel/sysfs.c
+0
-1
arch/powerpc/kernel/time.c
arch/powerpc/kernel/time.c
+18
-22
arch/powerpc/kernel/traps.c
arch/powerpc/kernel/traps.c
+0
-1
arch/powerpc/kernel/udbg.c
arch/powerpc/kernel/udbg.c
+0
-0
arch/powerpc/kernel/udbg_16550.c
arch/powerpc/kernel/udbg_16550.c
+0
-0
arch/powerpc/kernel/udbg_scc.c
arch/powerpc/kernel/udbg_scc.c
+0
-0
arch/powerpc/kernel/vdso.c
arch/powerpc/kernel/vdso.c
+746
-0
arch/powerpc/kernel/vdso32/Makefile
arch/powerpc/kernel/vdso32/Makefile
+5
-1
arch/powerpc/kernel/vdso32/cacheflush.S
arch/powerpc/kernel/vdso32/cacheflush.S
+0
-0
arch/powerpc/kernel/vdso32/datapage.S
arch/powerpc/kernel/vdso32/datapage.S
+16
-0
arch/powerpc/kernel/vdso32/gettimeofday.S
arch/powerpc/kernel/vdso32/gettimeofday.S
+315
-0
arch/powerpc/kernel/vdso32/note.S
arch/powerpc/kernel/vdso32/note.S
+0
-0
arch/powerpc/kernel/vdso32/sigtramp.S
arch/powerpc/kernel/vdso32/sigtramp.S
+0
-0
arch/powerpc/kernel/vdso32/vdso32.lds.S
arch/powerpc/kernel/vdso32/vdso32.lds.S
+4
-1
arch/powerpc/kernel/vdso32/vdso32_wrapper.S
arch/powerpc/kernel/vdso32/vdso32_wrapper.S
+1
-1
arch/powerpc/kernel/vdso64/Makefile
arch/powerpc/kernel/vdso64/Makefile
+0
-0
arch/powerpc/kernel/vdso64/cacheflush.S
arch/powerpc/kernel/vdso64/cacheflush.S
+0
-0
arch/powerpc/kernel/vdso64/datapage.S
arch/powerpc/kernel/vdso64/datapage.S
+16
-0
arch/powerpc/kernel/vdso64/gettimeofday.S
arch/powerpc/kernel/vdso64/gettimeofday.S
+242
-0
arch/powerpc/kernel/vdso64/note.S
arch/powerpc/kernel/vdso64/note.S
+0
-0
arch/powerpc/kernel/vdso64/sigtramp.S
arch/powerpc/kernel/vdso64/sigtramp.S
+0
-0
arch/powerpc/kernel/vdso64/vdso64.lds.S
arch/powerpc/kernel/vdso64/vdso64.lds.S
+4
-1
arch/powerpc/kernel/vdso64/vdso64_wrapper.S
arch/powerpc/kernel/vdso64/vdso64_wrapper.S
+1
-1
arch/powerpc/mm/mem.c
arch/powerpc/mm/mem.c
+0
-4
arch/powerpc/mm/numa.c
arch/powerpc/mm/numa.c
+159
-210
arch/powerpc/oprofile/op_model_power4.c
arch/powerpc/oprofile/op_model_power4.c
+0
-1
arch/powerpc/platforms/pseries/rtasd.c
arch/powerpc/platforms/pseries/rtasd.c
+0
-1
arch/powerpc/platforms/pseries/setup.c
arch/powerpc/platforms/pseries/setup.c
+1
-3
arch/powerpc/platforms/pseries/smp.c
arch/powerpc/platforms/pseries/smp.c
+2
-2
arch/powerpc/xmon/xmon.c
arch/powerpc/xmon/xmon.c
+18
-7
arch/ppc/kernel/asm-offsets.c
arch/ppc/kernel/asm-offsets.c
+28
-0
arch/ppc/syslib/cpm2_pic.c
arch/ppc/syslib/cpm2_pic.c
+1
-1
arch/ppc64/Kconfig
arch/ppc64/Kconfig
+3
-8
arch/ppc64/kernel/Makefile
arch/ppc64/kernel/Makefile
+1
-9
arch/ppc64/kernel/misc.S
arch/ppc64/kernel/misc.S
+2
-1
include/asm-powerpc/auxvec.h
include/asm-powerpc/auxvec.h
+0
-2
include/asm-powerpc/elf.h
include/asm-powerpc/elf.h
+4
-6
include/asm-powerpc/irq.h
include/asm-powerpc/irq.h
+1
-0
include/asm-powerpc/processor.h
include/asm-powerpc/processor.h
+1
-1
include/asm-powerpc/sparsemem.h
include/asm-powerpc/sparsemem.h
+2
-2
include/asm-powerpc/topology.h
include/asm-powerpc/topology.h
+1
-11
include/asm-powerpc/udbg.h
include/asm-powerpc/udbg.h
+7
-7
include/asm-powerpc/vdso.h
include/asm-powerpc/vdso.h
+0
-0
include/asm-powerpc/vdso_datapage.h
include/asm-powerpc/vdso_datapage.h
+108
-0
include/asm-ppc/page.h
include/asm-ppc/page.h
+7
-1
include/asm-ppc64/mmzone.h
include/asm-ppc64/mmzone.h
+3
-66
include/asm-ppc64/page.h
include/asm-ppc64/page.h
+0
-5
No files found.
arch/powerpc/Kconfig
View file @
9b80b11c
...
...
@@ -581,17 +581,12 @@ config ARCH_FLATMEM_ENABLE
def_bool y
depends on PPC64 && !NUMA
config ARCH_DISCONTIGMEM_ENABLE
def_bool y
depends on SMP && PPC_PSERIES
config ARCH_DISCONTIGMEM_DEFAULT
config ARCH_SPARSEMEM_ENABLE
def_bool y
depends on ARCH_DISCONTIGMEM_ENABLE
config ARCH_SPARSEMEM_
ENABLE
config ARCH_SPARSEMEM_
DEFAULT
def_bool y
depends on
ARCH_DISCONTIGMEM_ENABLE
depends on
SMP && PPC_PSERIES
source "mm/Kconfig"
...
...
arch/powerpc/kernel/Makefile
View file @
9b80b11c
...
...
@@ -12,11 +12,13 @@ CFLAGS_btext.o += -fPIC
endif
obj-y
:=
semaphore.o cputable.o ptrace.o syscalls.o
\
irq.o signal_32.o pmc.o
irq.o signal_32.o pmc.o vdso.o
obj-y
+=
vdso32/
obj-$(CONFIG_PPC64)
+=
setup_64.o binfmt_elf32.o sys_ppc32.o
\
signal_64.o ptrace32.o systbl.o
\
paca.o ioctl32.o cpu_setup_power4.o
\
firmware.o sysfs.o
firmware.o sysfs.o udbg.o
obj-$(CONFIG_PPC64)
+=
vdso64/
obj-$(CONFIG_ALTIVEC)
+=
vecemu.o vector.o
obj-$(CONFIG_POWER4)
+=
idle_power4.o
obj-$(CONFIG_PPC_OF)
+=
of_device.o
...
...
@@ -29,6 +31,10 @@ obj-$(CONFIG_RTAS_PROC) += rtas-proc.o
obj-$(CONFIG_LPARCFG)
+=
lparcfg.o
obj-$(CONFIG_IBMVIO)
+=
vio.o
obj-$(CONFIG_GENERIC_TBSYNC)
+=
smp-tbsync.o
obj-$(CONFIG_PPC_PSERIES)
+=
udbg_16550.o
obj-$(CONFIG_PPC_MAPLE)
+=
udbg_16550.o
udbgscc-$(CONFIG_PPC64)
:=
udbg_scc.o
obj-$(CONFIG_PPC_PMAC)
+=
$
(
udbgscc-y
)
ifeq
($(CONFIG_PPC_MERGE),y)
...
...
arch/powerpc/kernel/asm-offsets.c
View file @
9b80b11c
...
...
@@ -37,12 +37,12 @@
#include <asm/cputable.h>
#include <asm/thread_info.h>
#include <asm/rtas.h>
#include <asm/vdso_datapage.h>
#ifdef CONFIG_PPC64
#include <asm/paca.h>
#include <asm/lppaca.h>
#include <asm/iseries/hv_lp_event.h>
#include <asm/cache.h>
#include <asm/systemcfg.h>
#include <asm/compat.h>
#endif
...
...
@@ -251,25 +251,42 @@ int main(void)
DEFINE
(
TASK_SIZE
,
TASK_SIZE
);
DEFINE
(
NUM_USER_SEGMENTS
,
TASK_SIZE
>>
28
);
#else
/* CONFIG_PPC64 */
/* systemcfg offsets for use by vdso */
DEFINE
(
CFG_TB_ORIG_STAMP
,
offsetof
(
struct
systemcfg
,
tb_orig_stamp
));
DEFINE
(
CFG_TB_TICKS_PER_SEC
,
offsetof
(
struct
systemcfg
,
tb_ticks_per_sec
));
DEFINE
(
CFG_TB_TO_XS
,
offsetof
(
struct
systemcfg
,
tb_to_xs
));
DEFINE
(
CFG_STAMP_XSEC
,
offsetof
(
struct
systemcfg
,
stamp_xsec
));
DEFINE
(
CFG_TB_UPDATE_COUNT
,
offsetof
(
struct
systemcfg
,
tb_update_count
));
DEFINE
(
CFG_TZ_MINUTEWEST
,
offsetof
(
struct
systemcfg
,
tz_minuteswest
));
DEFINE
(
CFG_TZ_DSTTIME
,
offsetof
(
struct
systemcfg
,
tz_dsttime
));
DEFINE
(
CFG_SYSCALL_MAP32
,
offsetof
(
struct
systemcfg
,
syscall_map_32
));
DEFINE
(
CFG_SYSCALL_MAP64
,
offsetof
(
struct
systemcfg
,
syscall_map_64
));
#endif
/* ! CONFIG_PPC64 */
/* timeval/timezone offsets for use by vdso */
/* datapage offsets for use by vdso */
DEFINE
(
CFG_TB_ORIG_STAMP
,
offsetof
(
struct
vdso_data
,
tb_orig_stamp
));
DEFINE
(
CFG_TB_TICKS_PER_SEC
,
offsetof
(
struct
vdso_data
,
tb_ticks_per_sec
));
DEFINE
(
CFG_TB_TO_XS
,
offsetof
(
struct
vdso_data
,
tb_to_xs
));
DEFINE
(
CFG_STAMP_XSEC
,
offsetof
(
struct
vdso_data
,
stamp_xsec
));
DEFINE
(
CFG_TB_UPDATE_COUNT
,
offsetof
(
struct
vdso_data
,
tb_update_count
));
DEFINE
(
CFG_TZ_MINUTEWEST
,
offsetof
(
struct
vdso_data
,
tz_minuteswest
));
DEFINE
(
CFG_TZ_DSTTIME
,
offsetof
(
struct
vdso_data
,
tz_dsttime
));
DEFINE
(
CFG_SYSCALL_MAP32
,
offsetof
(
struct
vdso_data
,
syscall_map_32
));
DEFINE
(
WTOM_CLOCK_SEC
,
offsetof
(
struct
vdso_data
,
wtom_clock_sec
));
DEFINE
(
WTOM_CLOCK_NSEC
,
offsetof
(
struct
vdso_data
,
wtom_clock_nsec
));
#ifdef CONFIG_PPC64
DEFINE
(
CFG_SYSCALL_MAP64
,
offsetof
(
struct
vdso_data
,
syscall_map_64
));
DEFINE
(
TVAL64_TV_SEC
,
offsetof
(
struct
timeval
,
tv_sec
));
DEFINE
(
TVAL64_TV_USEC
,
offsetof
(
struct
timeval
,
tv_usec
));
DEFINE
(
TVAL32_TV_SEC
,
offsetof
(
struct
compat_timeval
,
tv_sec
));
DEFINE
(
TVAL32_TV_USEC
,
offsetof
(
struct
compat_timeval
,
tv_usec
));
DEFINE
(
TSPC32_TV_SEC
,
offsetof
(
struct
compat_timespec
,
tv_sec
));
DEFINE
(
TSPC32_TV_NSEC
,
offsetof
(
struct
compat_timespec
,
tv_nsec
));
#else
DEFINE
(
TVAL32_TV_SEC
,
offsetof
(
struct
timeval
,
tv_sec
));
DEFINE
(
TVAL32_TV_USEC
,
offsetof
(
struct
timeval
,
tv_usec
));
DEFINE
(
TSPEC32_TV_SEC
,
offsetof
(
struct
timespec
,
tv_sec
));
DEFINE
(
TSPEC32_TV_NSEC
,
offsetof
(
struct
timespec
,
tv_nsec
));
#endif
/* timeval/timezone offsets for use by vdso */
DEFINE
(
TZONE_TZ_MINWEST
,
offsetof
(
struct
timezone
,
tz_minuteswest
));
DEFINE
(
TZONE_TZ_DSTTIME
,
offsetof
(
struct
timezone
,
tz_dsttime
));
#endif
/* CONFIG_PPC64 */
/* Other bits used by the vdso */
DEFINE
(
CLOCK_REALTIME
,
CLOCK_REALTIME
);
DEFINE
(
CLOCK_MONOTONIC
,
CLOCK_MONOTONIC
);
DEFINE
(
NSEC_PER_SEC
,
NSEC_PER_SEC
);
DEFINE
(
CLOCK_REALTIME_RES
,
TICK_NSEC
);
return
0
;
}
arch/powerpc/kernel/head_32.S
View file @
9b80b11c
...
...
@@ -1100,6 +1100,7 @@ start_here:
mr
r3
,
r31
mr
r4
,
r30
bl
machine_init
bl
__save_cpu_setup
bl
MMU_init
#ifdef CONFIG_APUS
...
...
arch/powerpc/kernel/lparcfg.c
View file @
9b80b11c
...
...
@@ -35,7 +35,7 @@
#include <asm/time.h>
#include <asm/iseries/it_exp_vpd_panel.h>
#include <asm/prom.h>
#include <asm/
systemcfg
.h>
#include <asm/
vdso_datapage
.h>
#define MODULE_VERS "1.6"
#define MODULE_NAME "lparcfg"
...
...
@@ -43,7 +43,7 @@
/* #define LPARCFG_DEBUG */
/* find a better place for this function... */
void
log_plpar_hcall_return
(
unsigned
long
rc
,
char
*
tag
)
static
void
log_plpar_hcall_return
(
unsigned
long
rc
,
char
*
tag
)
{
if
(
rc
==
0
)
/* success, return */
return
;
...
...
@@ -213,11 +213,10 @@ static void h_pic(unsigned long *pool_idle_time, unsigned long *num_procs)
unsigned
long
dummy
;
rc
=
plpar_hcall
(
H_PIC
,
0
,
0
,
0
,
0
,
pool_idle_time
,
num_procs
,
&
dummy
);
log_plpar_hcall_return
(
rc
,
"H_PIC"
);
if
(
rc
!=
H_Authority
)
log_plpar_hcall_return
(
rc
,
"H_PIC"
);
}
static
unsigned
long
get_purr
(
void
);
/* Track sum of all purrs across all processors. This is used to further */
/* calculate usage values by different applications */
...
...
@@ -319,8 +318,6 @@ static void parse_system_parameter_string(struct seq_file *m)
kfree
(
local_buffer
);
}
static
int
lparcfg_count_active_processors
(
void
);
/* Return the number of processors in the system.
* This function reads through the device tree and counts
* the virtual processors, this does not include threads.
...
...
@@ -372,7 +369,7 @@ static int lparcfg_data(struct seq_file *m, void *v)
lrdrp
=
(
int
*
)
get_property
(
rtas_node
,
"ibm,lrdr-capacity"
,
NULL
);
if
(
lrdrp
==
NULL
)
{
partition_potential_processors
=
_systemcfg
->
processorCount
;
partition_potential_processors
=
vdso_data
->
processorCount
;
}
else
{
partition_potential_processors
=
*
(
lrdrp
+
4
);
}
...
...
@@ -548,7 +545,7 @@ static ssize_t lparcfg_write(struct file *file, const char __user * buf,
retval
=
-
EIO
;
}
out:
out:
kfree
(
kbuf
);
return
retval
;
}
...
...
@@ -561,10 +558,10 @@ static int lparcfg_open(struct inode *inode, struct file *file)
}
struct
file_operations
lparcfg_fops
=
{
.
owner
=
THIS_MODULE
,
.
read
=
seq_read
,
.
open
=
lparcfg_open
,
.
release
=
single_release
,
.
owner
=
THIS_MODULE
,
.
read
=
seq_read
,
.
open
=
lparcfg_open
,
.
release
=
single_release
,
};
int
__init
lparcfg_init
(
void
)
...
...
arch/powerpc/kernel/paca.c
View file @
9b80b11c
...
...
@@ -15,17 +15,10 @@
#include <asm/processor.h>
#include <asm/ptrace.h>
#include <asm/page.h>
#include <asm/systemcfg.h>
#include <asm/lppaca.h>
#include <asm/iseries/it_lp_queue.h>
#include <asm/paca.h>
static
union
{
struct
systemcfg
data
;
u8
page
[
PAGE_SIZE
];
}
systemcfg_store
__attribute__
((
__section__
(
".data.page.aligned"
)));
struct
systemcfg
*
_systemcfg
=
&
systemcfg_store
.
data
;
/* This symbol is provided by the linker - let it fill in the paca
* field correctly */
...
...
arch/powerpc/kernel/proc_ppc64.c
View file @
9b80b11c
...
...
@@ -23,7 +23,7 @@
#include <linux/slab.h>
#include <linux/kernel.h>
#include <asm/
systemcfg
.h>
#include <asm/
vdso_datapage
.h>
#include <asm/rtas.h>
#include <asm/uaccess.h>
#include <asm/prom.h>
...
...
@@ -72,7 +72,7 @@ static int __init proc_ppc64_init(void)
if
(
!
pde
)
return
1
;
pde
->
nlink
=
1
;
pde
->
data
=
_systemcfg
;
pde
->
data
=
vdso_data
;
pde
->
size
=
PAGE_SIZE
;
pde
->
proc_fops
=
&
page_map_fops
;
...
...
arch/powerpc/kernel/rtas-proc.c
View file @
9b80b11c
...
...
@@ -32,7 +32,6 @@
#include <asm/rtas.h>
#include <asm/machdep.h>
/* for ppc_md */
#include <asm/time.h>
#include <asm/systemcfg.h>
/* Token for Sensors */
#define KEY_SWITCH 0x0001
...
...
arch/powerpc/kernel/setup-common.c
View file @
9b80b11c
...
...
@@ -33,7 +33,7 @@
#include <asm/io.h>
#include <asm/prom.h>
#include <asm/processor.h>
#include <asm/
systemcfg
.h>
#include <asm/
vdso_datapage
.h>
#include <asm/pgtable.h>
#include <asm/smp.h>
#include <asm/elf.h>
...
...
@@ -444,10 +444,8 @@ void __init check_for_initrd(void)
if
(
initrd_start
>=
KERNELBASE
&&
initrd_end
>=
KERNELBASE
&&
initrd_end
>
initrd_start
)
ROOT_DEV
=
Root_RAM0
;
else
{
printk
(
"Bogus initrd %08lx %08lx
\n
"
,
initrd_start
,
initrd_end
);
else
initrd_start
=
initrd_end
=
0
;
}
if
(
initrd_start
)
printk
(
"Found initrd at 0x%lx:0x%lx
\n
"
,
initrd_start
,
initrd_end
);
...
...
@@ -566,7 +564,7 @@ void __init smp_setup_cpu_maps(void)
cpu_set
(
cpu
^
0x1
,
cpu_sibling_map
[
cpu
]);
}
_systemcfg
->
processorCount
=
num_present_cpus
();
vdso_data
->
processorCount
=
num_present_cpus
();
#endif
/* CONFIG_PPC64 */
}
#endif
/* CONFIG_SMP */
...
...
arch/powerpc/kernel/setup_64.c
View file @
9b80b11c
...
...
@@ -57,7 +57,6 @@
#include <asm/lmb.h>
#include <asm/iseries/it_lp_naca.h>
#include <asm/firmware.h>
#include <asm/systemcfg.h>
#include <asm/xmon.h>
#include <asm/udbg.h>
...
...
@@ -375,9 +374,8 @@ static void __init initialize_cache_info(void)
DBG
(
"Argh, can't find dcache properties ! "
"sizep: %p, lsizep: %p
\n
"
,
sizep
,
lsizep
);
_systemcfg
->
dcache_size
=
ppc64_caches
.
dsize
=
size
;
_systemcfg
->
dcache_line_size
=
ppc64_caches
.
dline_size
=
lsize
;
ppc64_caches
.
dsize
=
size
;
ppc64_caches
.
dline_size
=
lsize
;
ppc64_caches
.
log_dline_size
=
__ilog2
(
lsize
);
ppc64_caches
.
dlines_per_page
=
PAGE_SIZE
/
lsize
;
...
...
@@ -393,22 +391,13 @@ static void __init initialize_cache_info(void)
DBG
(
"Argh, can't find icache properties ! "
"sizep: %p, lsizep: %p
\n
"
,
sizep
,
lsizep
);
_systemcfg
->
icache_size
=
ppc64_caches
.
isize
=
size
;
_systemcfg
->
icache_line_size
=
ppc64_caches
.
iline_size
=
lsize
;
ppc64_caches
.
isize
=
size
;
ppc64_caches
.
iline_size
=
lsize
;
ppc64_caches
.
log_iline_size
=
__ilog2
(
lsize
);
ppc64_caches
.
ilines_per_page
=
PAGE_SIZE
/
lsize
;
}
}
/* Add an eye catcher and the systemcfg layout version number */
strcpy
(
_systemcfg
->
eye_catcher
,
"SYSTEMCFG:PPC64"
);
_systemcfg
->
version
.
major
=
SYSTEMCFG_MAJOR
;
_systemcfg
->
version
.
minor
=
SYSTEMCFG_MINOR
;
_systemcfg
->
processor
=
mfspr
(
SPRN_PVR
);
_systemcfg
->
platform
=
_machine
;
_systemcfg
->
physicalMemorySize
=
lmb_phys_mem_size
();
DBG
(
" <- initialize_cache_info()
\n
"
);
}
...
...
@@ -495,15 +484,14 @@ void __init setup_system(void)
printk
(
"-----------------------------------------------------
\n
"
);
printk
(
"ppc64_pft_size = 0x%lx
\n
"
,
ppc64_pft_size
);
printk
(
"ppc64_interrupt_controller = 0x%ld
\n
"
,
ppc64_interrupt_controller
);
printk
(
"systemcfg = 0x%p
\n
"
,
_systemcfg
);
printk
(
"systemcfg->platform = 0x%x
\n
"
,
_systemcfg
->
platform
);
printk
(
"systemcfg->processorCount = 0x%lx
\n
"
,
_systemcfg
->
processorCount
);
printk
(
"systemcfg->physicalMemorySize = 0x%lx
\n
"
,
_systemcfg
->
physicalMemorySize
);
printk
(
"ppc64_interrupt_controller = 0x%ld
\n
"
,
ppc64_interrupt_controller
);
printk
(
"platform = 0x%x
\n
"
,
_machine
);
printk
(
"physicalMemorySize = 0x%lx
\n
"
,
lmb_phys_mem_size
());
printk
(
"ppc64_caches.dcache_line_size = 0x%x
\n
"
,
ppc64_caches
.
dline_size
);
ppc64_caches
.
dline_size
);
printk
(
"ppc64_caches.icache_line_size = 0x%x
\n
"
,
ppc64_caches
.
iline_size
);
ppc64_caches
.
iline_size
);
printk
(
"htab_address = 0x%p
\n
"
,
htab_address
);
printk
(
"htab_hash_mask = 0x%lx
\n
"
,
htab_hash_mask
);
printk
(
"-----------------------------------------------------
\n
"
);
...
...
@@ -567,33 +555,6 @@ static void __init emergency_stack_init(void)
__va
(
lmb_alloc_base
(
HW_PAGE_SIZE
,
128
,
limit
))
+
HW_PAGE_SIZE
;
}
/*
* Called from setup_arch to initialize the bitmap of available
* syscalls in the systemcfg page
*/
void
__init
setup_syscall_map
(
void
)
{
unsigned
int
i
,
count64
=
0
,
count32
=
0
;
extern
unsigned
long
*
sys_call_table
;
extern
unsigned
long
sys_ni_syscall
;
for
(
i
=
0
;
i
<
__NR_syscalls
;
i
++
)
{
if
(
sys_call_table
[
i
*
2
]
!=
sys_ni_syscall
)
{
count64
++
;
_systemcfg
->
syscall_map_64
[
i
>>
5
]
|=
0x80000000UL
>>
(
i
&
0x1f
);
}
if
(
sys_call_table
[
i
*
2
+
1
]
!=
sys_ni_syscall
)
{
count32
++
;
_systemcfg
->
syscall_map_32
[
i
>>
5
]
|=
0x80000000UL
>>
(
i
&
0x1f
);
}
}
printk
(
KERN_INFO
"Syscall map setup, %d 32-bit and %d 64-bit syscalls
\n
"
,
count32
,
count64
);
}
/*
* Called into from start_kernel, after lock_kernel has been called.
* Initializes bootmem, which is unsed to manage page allocation until
...
...
@@ -635,9 +596,6 @@ void __init setup_arch(char **cmdline_p)
do_init_bootmem
();
sparse_init
();
/* initialize the syscall map in systemcfg */
setup_syscall_map
();
#ifdef CONFIG_DUMMY_CONSOLE
conswitchp
=
&
dummy_con
;
#endif
...
...
arch/powerpc/kernel/signal_32.c
View file @
9b80b11c
...
...
@@ -43,10 +43,10 @@
#include <asm/uaccess.h>
#include <asm/cacheflush.h>
#include <asm/sigcontext.h>
#include <asm/vdso.h>
#ifdef CONFIG_PPC64
#include "ppc32.h"
#include <asm/unistd.h>
#include <asm/vdso.h>
#else
#include <asm/ucontext.h>
#include <asm/pgtable.h>
...
...
@@ -809,14 +809,11 @@ static int handle_rt_signal(unsigned long sig, struct k_sigaction *ka,
/* Save user registers on the stack */
frame
=
&
rt_sf
->
uc
.
uc_mcontext
;
#ifdef CONFIG_PPC64
if
(
vdso32_rt_sigtramp
&&
current
->
thread
.
vdso_base
)
{
if
(
save_user_regs
(
regs
,
frame
,
0
))
goto
badframe
;
regs
->
link
=
current
->
thread
.
vdso_base
+
vdso32_rt_sigtramp
;
}
else
#endif
{
}
else
{
if
(
save_user_regs
(
regs
,
frame
,
__NR_rt_sigreturn
))
goto
badframe
;
regs
->
link
=
(
unsigned
long
)
frame
->
tramp
;
...
...
@@ -1090,14 +1087,11 @@ static int handle_signal(unsigned long sig, struct k_sigaction *ka,
||
__put_user
(
sig
,
&
sc
->
signal
))
goto
badframe
;
#ifdef CONFIG_PPC64
if
(
vdso32_sigtramp
&&
current
->
thread
.
vdso_base
)
{
if
(
save_user_regs
(
regs
,
&
frame
->
mctx
,
0
))
goto
badframe
;
regs
->
link
=
current
->
thread
.
vdso_base
+
vdso32_sigtramp
;
}
else
#endif
{
}
else
{
if
(
save_user_regs
(
regs
,
&
frame
->
mctx
,
__NR_sigreturn
))
goto
badframe
;
regs
->
link
=
(
unsigned
long
)
frame
->
mctx
.
tramp
;
...
...
arch/powerpc/kernel/smp.c
View file @
9b80b11c
...
...
@@ -44,7 +44,7 @@
#include <asm/cputable.h>
#include <asm/system.h>
#include <asm/mpic.h>
#include <asm/
systemcfg
.h>
#include <asm/
vdso_datapage
.h>
#ifdef CONFIG_PPC64
#include <asm/paca.h>
#endif
...
...
@@ -371,7 +371,7 @@ int generic_cpu_disable(void)
cpu_clear
(
cpu
,
cpu_online_map
);
#ifdef CONFIG_PPC64
_systemcfg
->
processorCount
--
;
vdso_data
->
processorCount
--
;
fixup_irqs
(
cpu_online_map
);
#endif
return
0
;
...
...
arch/powerpc/kernel/sysfs.c
View file @
9b80b11c
...
...
@@ -16,7 +16,6 @@
#include <asm/firmware.h>
#include <asm/hvcall.h>
#include <asm/prom.h>
#include <asm/systemcfg.h>
#include <asm/paca.h>
#include <asm/lppaca.h>
#include <asm/machdep.h>
...
...
arch/powerpc/kernel/time.c
View file @
9b80b11c
...
...
@@ -62,8 +62,8 @@
#include <asm/irq.h>
#include <asm/div64.h>
#include <asm/smp.h>
#include <asm/vdso_datapage.h>
#ifdef CONFIG_PPC64
#include <asm/systemcfg.h>
#include <asm/firmware.h>
#endif
#ifdef CONFIG_PPC_ISERIES
...
...
@@ -261,7 +261,6 @@ static inline void update_gtod(u64 new_tb_stamp, u64 new_stamp_xsec,
do_gtod
.
varp
=
temp_varp
;
do_gtod
.
var_idx
=
temp_idx
;
#ifdef CONFIG_PPC64
/*
* tb_update_count is used to allow the userspace gettimeofday code
* to assure itself that it sees a consistent view of the tb_to_xs and
...
...
@@ -271,14 +270,15 @@ static inline void update_gtod(u64 new_tb_stamp, u64 new_stamp_xsec,
* tb_to_xs and stamp_xsec values are consistent. If not, then it
* loops back and reads them again until this criteria is met.
*/
++
(
_systemcfg
->
tb_update_count
);
++
(
vdso_data
->
tb_update_count
);
smp_wmb
();
_systemcfg
->
tb_orig_stamp
=
new_tb_stamp
;
_systemcfg
->
stamp_xsec
=
new_stamp_xsec
;
_systemcfg
->
tb_to_xs
=
new_tb_to_xs
;
vdso_data
->
tb_orig_stamp
=
new_tb_stamp
;
vdso_data
->
stamp_xsec
=
new_stamp_xsec
;
vdso_data
->
tb_to_xs
=
new_tb_to_xs
;
vdso_data
->
wtom_clock_sec
=
wall_to_monotonic
.
tv_sec
;
vdso_data
->
wtom_clock_nsec
=
wall_to_monotonic
.
tv_nsec
;
smp_wmb
();
++
(
_systemcfg
->
tb_update_count
);
#endif
++
(
vdso_data
->
tb_update_count
);
}
/*
...
...
@@ -357,9 +357,8 @@ static void iSeries_tb_recal(void)
do_gtod
.
tb_ticks_per_sec
=
tb_ticks_per_sec
;
tb_to_xs
=
divres
.
result_low
;
do_gtod
.
varp
->
tb_to_xs
=
tb_to_xs
;
_systemcfg
->
tb_ticks_per_sec
=
tb_ticks_per_sec
;
_systemcfg
->
tb_to_xs
=
tb_to_xs
;
vdso_data
->
tb_ticks_per_sec
=
tb_ticks_per_sec
;
vdso_data
->
tb_to_xs
=
tb_to_xs
;
}
else
{
printk
(
"Titan recalibrate: FAILED (difference > 4 percent)
\n
"
...
...
@@ -561,10 +560,8 @@ int do_settimeofday(struct timespec *tv)
new_xsec
+=
(
u64
)
new_sec
*
XSEC_PER_SEC
-
tb_delta_xs
;
update_gtod
(
tb_last_jiffy
,
new_xsec
,
do_gtod
.
varp
->
tb_to_xs
);
#ifdef CONFIG_PPC64
_systemcfg
->
tz_minuteswest
=
sys_tz
.
tz_minuteswest
;
_systemcfg
->
tz_dsttime
=
sys_tz
.
tz_dsttime
;
#endif
vdso_data
->
tz_minuteswest
=
sys_tz
.
tz_minuteswest
;
vdso_data
->
tz_dsttime
=
sys_tz
.
tz_dsttime
;
write_sequnlock_irqrestore
(
&
xtime_lock
,
flags
);
clock_was_set
();
...
...
@@ -713,13 +710,12 @@ void __init time_init(void)
do_gtod
.
tb_ticks_per_sec
=
tb_ticks_per_sec
;
do_gtod
.
varp
->
tb_to_xs
=
tb_to_xs
;
do_gtod
.
tb_to_us
=
tb_to_us
;
#ifdef CONFIG_PPC64
_systemcfg
->
tb_orig_stamp
=
tb_last_jiffy
;
_systemcfg
->
tb_update_count
=
0
;
_systemcfg
->
tb_ticks_per_sec
=
tb_ticks_per_sec
;
_systemcfg
->
stamp_xsec
=
xtime
.
tv_sec
*
XSEC_PER_SEC
;
_systemcfg
->
tb_to_xs
=
tb_to_xs
;
#endif
vdso_data
->
tb_orig_stamp
=
tb_last_jiffy
;
vdso_data
->
tb_update_count
=
0
;
vdso_data
->
tb_ticks_per_sec
=
tb_ticks_per_sec
;
vdso_data
->
stamp_xsec
=
xtime
.
tv_sec
*
XSEC_PER_SEC
;
vdso_data
->
tb_to_xs
=
tb_to_xs
;
time_freq
=
0
;
...
...
arch/powerpc/kernel/traps.c
View file @
9b80b11c
...
...
@@ -49,7 +49,6 @@
#ifdef CONFIG_PPC64
#include <asm/firmware.h>
#include <asm/processor.h>
#include <asm/systemcfg.h>
#endif
#ifdef CONFIG_PPC64
/* XXX */
...
...
arch/p
pc64
/kernel/udbg.c
→
arch/p
owerpc
/kernel/udbg.c
View file @
9b80b11c
File moved
arch/p
pc64
/kernel/udbg_16550.c
→
arch/p
owerpc
/kernel/udbg_16550.c
View file @
9b80b11c
File moved
arch/p
pc64
/kernel/udbg_scc.c
→
arch/p
owerpc
/kernel/udbg_scc.c
View file @
9b80b11c
File moved
arch/powerpc/kernel/vdso.c
0 → 100644
View file @
9b80b11c
This diff is collapsed.
Click to expand it.
arch/p
pc64
/kernel/vdso32/Makefile
→
arch/p
owerpc
/kernel/vdso32/Makefile
View file @
9b80b11c
...
...
@@ -5,6 +5,10 @@ obj-vdso32 = sigtramp.o gettimeofday.o datapage.o cacheflush.o note.o
# Build rules
ifeq
($(CONFIG_PPC32),y)
CROSS32CC
:=
$(CC)
endif
targets
:=
$
(
obj-vdso32
)
vdso32.so
obj-vdso32
:=
$(
addprefix
$(obj)
/,
$
(
obj-vdso32
))
...
...
@@ -15,7 +19,7 @@ EXTRA_AFLAGS := -D__VDSO32__ -s
obj-y
+=
vdso32_wrapper.o
extra-y
+=
vdso32.lds
CPPFLAGS_vdso32.lds
+=
-P
-C
-U
$(ARCH)
CPPFLAGS_vdso32.lds
+=
-P
-C
-U
powerpc
# Force dependency (incbin is bad)
$(obj)/vdso32_wrapper.o
:
$(obj)/vdso32.so
...
...
arch/p
pc64
/kernel/vdso32/cacheflush.S
→
arch/p
owerpc
/kernel/vdso32/cacheflush.S
View file @
9b80b11c
File moved
arch/p
pc64
/kernel/vdso32/datapage.S
→
arch/p
owerpc
/kernel/vdso32/datapage.S
View file @
9b80b11c
...
...
@@ -66,3 +66,19 @@ V_FUNCTION_BEGIN(__kernel_get_syscall_map)
blr
.
cfi_endproc
V_FUNCTION_END
(
__kernel_get_syscall_map
)
/*
*
void
unsigned
long
long
__kernel_get_tbfreq
(
void
)
;
*
*
returns
the
timebase
frequency
in
HZ
*/
V_FUNCTION_BEGIN
(
__kernel_get_tbfreq
)
.
cfi_startproc
mflr
r12
.
cfi_register
lr
,
r12
bl
__get_datapage
@
local
lwz
r3
,
CFG_TB_TICKS_PER_SEC
(
r3
)
lwz
r4
,(
CFG_TB_TICKS_PER_SEC
+
4
)(
r3
)
mtlr
r12
.
cfi_endproc
V_FUNCTION_END
(
__kernel_get_tbfreq
)
arch/p
pc64
/kernel/vdso32/gettimeofday.S
→
arch/p
owerpc
/kernel/vdso32/gettimeofday.S
View file @
9b80b11c
...
...
@@ -2,7 +2,8 @@
*
Userland
implementation
of
gettimeofday
()
for
32
bits
processes
in
a
*
ppc64
kernel
for
use
in
the
vDSO
*
*
Copyright
(
C
)
2004
Benjamin
Herrenschmuidt
(
benh
@
kernel
.
crashing
.
org
),
IBM
Corp
.
*
Copyright
(
C
)
2004
Benjamin
Herrenschmuidt
(
benh
@
kernel
.
crashing
.
org
,
*
IBM
Corp
.
*
*
This
program
is
free
software
; you can redistribute it and/or
*
modify
it
under
the
terms
of
the
GNU
General
Public
License
...
...
@@ -61,25 +62,194 @@ V_FUNCTION_BEGIN(__kernel_gettimeofday)
li
r3
,
0
blr
2
:
mr
r3
,
r10
2
:
mtlr
r12
mr
r3
,
r10
mr
r4
,
r11
li
r0
,
__NR_gettimeofday
sc
b
1
b
b
lr
.
cfi_endproc
V_FUNCTION_END
(
__kernel_gettimeofday
)
/*
*
This
is
the
core
of
gettimeofday
(),
it
returns
the
xsec
*
Exact
prototype
of
clock_gettime
()
*
*
int
__kernel_clock_gettime
(
clockid_t
clock_id
,
struct
timespec
*
tp
)
;
*
*/
V_FUNCTION_BEGIN
(
__kernel_clock_gettime
)
.
cfi_startproc
/
*
Check
for
supported
clock
IDs
*/
cmpli
cr0
,
r3
,
CLOCK_REALTIME
cmpli
cr1
,
r3
,
CLOCK_MONOTONIC
cror
cr0
,
cr0
,
cr1
bne
cr0
,
99
f
mflr
r12
/*
r12
saves
lr
*/
.
cfi_register
lr
,
r12
mr
r10
,
r3
/*
r10
saves
id
*/
mr
r11
,
r4
/*
r11
saves
tp
*/
bl
__get_datapage
@
local
/*
get
data
page
*/
mr
r9
,
r3
/*
datapage
ptr
in
r9
*/
beq
cr1
,
50
f
/*
if
monotonic
->
jump
there
*/
/
*
*
CLOCK_REALTIME
*/
bl
__do_get_xsec
@
local
/*
get
xsec
from
tb
&
kernel
*/
bne
-
98
f
/*
out
of
line
->
do
syscall
*/
/
*
seconds
are
xsec
>>
20
*/
rlwinm
r5
,
r4
,
12
,
20
,
31
rlwimi
r5
,
r3
,
12
,
0
,
19
stw
r5
,
TSPC32_TV_SEC
(
r11
)
/
*
get
remaining
xsec
and
convert
to
nsec
.
we
scale
*
up
remaining
xsec
by
12
bits
and
get
the
top
32
bits
*
of
the
multiplication
,
then
we
multiply
by
1000
*/
rlwinm
r5
,
r4
,
12
,
0
,
19
lis
r6
,
1000000
@
h
ori
r6
,
r6
,
1000000
@
l
mulhwu
r5
,
r5
,
r6
mulli
r5
,
r5
,
1000
stw
r5
,
TSPC32_TV_NSEC
(
r11
)
mtlr
r12
li
r3
,
0
blr
/
*
*
CLOCK_MONOTONIC
*/
50
:
bl
__do_get_xsec
@
local
/*
get
xsec
from
tb
&
kernel
*/
bne
-
98
f
/*
out
of
line
->
do
syscall
*/
/
*
seconds
are
xsec
>>
20
*/
rlwinm
r6
,
r4
,
12
,
20
,
31
rlwimi
r6
,
r3
,
12
,
0
,
19
/
*
get
remaining
xsec
and
convert
to
nsec
.
we
scale
*
up
remaining
xsec
by
12
bits
and
get
the
top
32
bits
*
of
the
multiplication
,
then
we
multiply
by
1000
*/
rlwinm
r7
,
r4
,
12
,
0
,
19
lis
r5
,
1000000
@
h
ori
r5
,
r5
,
1000000
@
l
mulhwu
r7
,
r7
,
r5
mulli
r7
,
r7
,
1000
/
*
now
we
must
fixup
using
wall
to
monotonic
.
We
need
to
snapshot
*
that
value
and
do
the
counter
trick
again
.
Fortunately
,
we
still
*
have
the
counter
value
in
r8
that
was
returned
by
__do_get_xsec
.
*
At
this
point
,
r6
,
r7
contain
our
sec
/
nsec
values
,
r3
,
r4
and
r5
*
can
be
used
*/
lwz
r3
,
WTOM_CLOCK_SEC
(
r9
)
lwz
r4
,
WTOM_CLOCK_NSEC
(
r9
)
/
*
We
now
have
our
result
in
r3
,
r4
.
We
create
a
fake
dependency
*
on
that
result
and
re
-
check
the
counter
*/
or
r5
,
r4
,
r3
xor
r0
,
r5
,
r5
add
r9
,
r9
,
r0
#ifdef CONFIG_PPC64
lwz
r0
,(
CFG_TB_UPDATE_COUNT
+
4
)(
r9
)
#else
lwz
r0
,(
CFG_TB_UPDATE_COUNT
)(
r9
)
#endif
cmpl
cr0
,
r8
,
r0
/*
check
if
updated
*/
bne
-
50
b
/
*
Calculate
and
store
result
.
Note
that
this
mimmics
the
C
code
,
*
which
may
cause
funny
results
if
nsec
goes
negative
...
is
that
*
possible
at
all
?
*/
add
r3
,
r3
,
r6
add
r4
,
r4
,
r7
lis
r5
,
NSEC_PER_SEC
@
h
ori
r5
,
r5
,
NSEC_PER_SEC
@
l
cmpli
cr0
,
r4
,
r5
blt
1
f
subf
r4
,
r5
,
r4
addi
r3
,
r3
,
1
1
:
stw
r3
,
TSPC32_TV_SEC
(
r11
)
stw
r4
,
TSPC32_TV_NSEC
(
r11
)
mtlr
r12
li
r3
,
0
blr
/
*
*
syscall
fallback
*/
98
:
mtlr
r12
mr
r3
,
r10
mr
r4
,
r11
99
:
li
r0
,
__NR_clock_gettime
sc
blr
.
cfi_endproc
V_FUNCTION_END
(
__kernel_clock_gettime
)
/*
*
Exact
prototype
of
clock_getres
()
*
*
int
__kernel_clock_getres
(
clockid_t
clock_id
,
struct
timespec
*
res
)
;
*
*/
V_FUNCTION_BEGIN
(
__kernel_clock_getres
)
.
cfi_startproc
/
*
Check
for
supported
clock
IDs
*/
cmpwi
cr0
,
r3
,
CLOCK_REALTIME
cmpwi
cr1
,
r3
,
CLOCK_MONOTONIC
cror
cr0
,
cr0
,
cr1
bne
cr0
,
99
f
li
r3
,
0
cmpli
cr0
,
r4
,
0
beqlr
lis
r5
,
CLOCK_REALTIME_RES
@
h
ori
r5
,
r5
,
CLOCK_REALTIME_RES
@
l
stw
r3
,
TSPC32_TV_SEC
(
r4
)
stw
r5
,
TSPC32_TV_NSEC
(
r4
)
blr
/
*
*
syscall
fallback
*/
99
:
li
r0
,
__NR_clock_getres
sc
blr
.
cfi_endproc
V_FUNCTION_END
(
__kernel_clock_getres
)
/*
*
This
is
the
core
of
gettimeofday
()
&
friends
,
it
returns
the
xsec
*
value
in
r3
&
r4
and
expects
the
datapage
ptr
(
non
clobbered
)
*
in
r9
.
clobbers
r0
,
r4
,
r5
,
r6
,
r7
,
r8
*/
*
in
r9
.
clobbers
r0
,
r4
,
r5
,
r6
,
r7
,
r8
.
*
When
returning
,
r8
contains
the
counter
value
that
can
be
reused
*
by
the
monotonic
clock
implementation
*/
__do_get_xsec
:
.
cfi_startproc
/
*
Check
for
update
count
&
load
values
.
We
use
the
low
*
order
32
bits
of
the
update
count
*/
#ifdef CONFIG_PPC64
1
:
lwz
r8
,(
CFG_TB_UPDATE_COUNT
+
4
)(
r9
)
#else
1
:
lwz
r8
,(
CFG_TB_UPDATE_COUNT
)(
r9
)
#endif
andi
.
r0
,
r8
,
1
/*
pending
update
?
loop
*/
bne
-
1
b
xor
r0
,
r8
,
r8
/*
create
dependency
*/
...
...
@@ -96,9 +266,9 @@ __do_get_xsec:
cmpl
cr0
,
r3
,
r0
bne
-
2
b
/
*
Substract
tb
orig
stamp
.
If
the
high
part
is
non
-
zero
,
we
jump
to
the
*
slow
path
which
call
the
syscall
.
If
it
's ok, then we have our 32 bits
*
tb_ticks
value
in
r7
/
*
Substract
tb
orig
stamp
.
If
the
high
part
is
non
-
zero
,
we
jump
to
*
the
slow
path
which
call
the
syscall
.
*
If
it
's ok, then we have our 32 bits
tb_ticks value in r7
*/
subfc
r7
,
r6
,
r4
subfe
.
r0
,
r5
,
r3
...
...
@@ -123,9 +293,14 @@ __do_get_xsec:
/
*
We
now
have
our
result
in
r3
,
r4
.
We
create
a
fake
dependency
*
on
that
result
and
re
-
check
the
counter
*/
xor
r0
,
r4
,
r4
or
r6
,
r4
,
r3
xor
r0
,
r6
,
r6
add
r9
,
r9
,
r0
#ifdef CONFIG_PPC64
lwz
r0
,(
CFG_TB_UPDATE_COUNT
+
4
)(
r9
)
#else
lwz
r0
,(
CFG_TB_UPDATE_COUNT
)(
r9
)
#endif
cmpl
cr0
,
r8
,
r0
/*
check
if
updated
*/
bne
-
1
b
...
...
arch/p
pc64
/kernel/vdso32/note.S
→
arch/p
owerpc
/kernel/vdso32/note.S
View file @
9b80b11c
File moved
arch/p
pc64
/kernel/vdso32/sigtramp.S
→
arch/p
owerpc
/kernel/vdso32/sigtramp.S
View file @
9b80b11c
File moved
arch/p
pc64
/kernel/vdso32/vdso32.lds.S
→
arch/p
owerpc
/kernel/vdso32/vdso32.lds.S
View file @
9b80b11c
...
...
@@ -102,9 +102,12 @@ VERSION
{
VDSO_VERSION_STRING
{
global
:
__kernel_datapage_offset
; /* Has to be there for the kernel to find
it
*/
__kernel_datapage_offset
; /* Has to be there for the kernel to find */
__kernel_get_syscall_map
;
__kernel_gettimeofday
;
__kernel_clock_gettime
;
__kernel_clock_getres
;
__kernel_get_tbfreq
;
__kernel_sync_dicache
;
__kernel_sync_dicache_p5
;
__kernel_sigtramp32
;
...
...
arch/p
pc64
/kernel/vdso32/vdso32_wrapper.S
→
arch/p
owerpc
/kernel/vdso32/vdso32_wrapper.S
View file @
9b80b11c
...
...
@@ -6,7 +6,7 @@
.
globl
vdso32_start
,
vdso32_end
.
balign
PAGE_SIZE
vdso32_start
:
.
incbin
"arch/p
pc64
/kernel/vdso32/vdso32.so"
.
incbin
"arch/p
owerpc
/kernel/vdso32/vdso32.so"
.
balign
PAGE_SIZE
vdso32_end
:
...
...
arch/p
pc64
/kernel/vdso64/Makefile
→
arch/p
owerpc
/kernel/vdso64/Makefile
View file @
9b80b11c
File moved
arch/p
pc64
/kernel/vdso64/cacheflush.S
→
arch/p
owerpc
/kernel/vdso64/cacheflush.S
View file @
9b80b11c
File moved
arch/p
pc64
/kernel/vdso64/datapage.S
→
arch/p
owerpc
/kernel/vdso64/datapage.S
View file @
9b80b11c
...
...
@@ -66,3 +66,19 @@ V_FUNCTION_BEGIN(__kernel_get_syscall_map)
blr
.
cfi_endproc
V_FUNCTION_END
(
__kernel_get_syscall_map
)
/*
*
void
unsigned
long
__kernel_get_tbfreq
(
void
)
;
*
*
returns
the
timebase
frequency
in
HZ
*/
V_FUNCTION_BEGIN
(
__kernel_get_tbfreq
)
.
cfi_startproc
mflr
r12
.
cfi_register
lr
,
r12
bl
V_LOCAL_FUNC
(
__get_datapage
)
ld
r3
,
CFG_TB_TICKS_PER_SEC
(
r3
)
mtlr
r12
.
cfi_endproc
V_FUNCTION_END
(
__kernel_get_tbfreq
)
arch/p
pc64
/kernel/vdso64/gettimeofday.S
→
arch/p
owerpc
/kernel/vdso64/gettimeofday.S
View file @
9b80b11c
...
...
@@ -15,6 +15,7 @@
#include <asm/ppc_asm.h>
#include <asm/vdso.h>
#include <asm/asm-offsets.h>
#include <asm/unistd.h>
.
text
/*
...
...
@@ -30,15 +31,17 @@ V_FUNCTION_BEGIN(__kernel_gettimeofday)
mr
r11
,
r3
/*
r11
holds
tv
*/
mr
r10
,
r4
/*
r10
holds
tz
*/
bl
V_LOCAL_FUNC
(
__get_datapage
)
/*
get
data
page
*/
bl
V_LOCAL_FUNC
(
__do_get_xsec
)
/*
get
xsec
from
tb
&
kernel
*/
bl
V_LOCAL_FUNC
(
__get_datapage
)
/*
get
data
page
*/
bl
V_LOCAL_FUNC
(
__do_get_xsec
)
/*
get
xsec
from
tb
&
kernel
*/
lis
r7
,
15
/*
r7
=
1000000
=
USEC_PER_SEC
*/
ori
r7
,
r7
,
16960
rldicl
r5
,
r4
,
44
,
20
/*
r5
=
sec
=
xsec
/
XSEC_PER_SEC
*/
rldicr
r6
,
r5
,
20
,
43
/*
r6
=
sec
*
XSEC_PER_SEC
*/
std
r5
,
TVAL64_TV_SEC
(
r11
)
/*
store
sec
in
tv
*/
subf
r0
,
r6
,
r4
/*
r0
=
xsec
=
(
xsec
-
r6
)
*/
mulld
r0
,
r0
,
r7
/*
usec
=
(
xsec
*
USEC_PER_SEC
)
/
XSEC_PER_SEC
*/
mulld
r0
,
r0
,
r7
/*
usec
=
(
xsec
*
USEC_PER_SEC
)
/
*
XSEC_PER_SEC
*/
rldicl
r0
,
r0
,
44
,
20
cmpldi
cr0
,
r10
,
0
/*
check
if
tz
is
NULL
*/
std
r0
,
TVAL64_TV_USEC
(
r11
)
/*
store
usec
in
tv
*/
...
...
@@ -54,37 +57,185 @@ V_FUNCTION_BEGIN(__kernel_gettimeofday)
V_FUNCTION_END
(
__kernel_gettimeofday
)
/*
*
Exact
prototype
of
clock_gettime
()
*
*
int
__kernel_clock_gettime
(
clockid_t
clock_id
,
struct
timespec
*
tp
)
;
*
*/
V_FUNCTION_BEGIN
(
__kernel_clock_gettime
)
.
cfi_startproc
/
*
Check
for
supported
clock
IDs
*/
cmpwi
cr0
,
r3
,
CLOCK_REALTIME
cmpwi
cr1
,
r3
,
CLOCK_MONOTONIC
cror
cr0
,
cr0
,
cr1
bne
cr0
,
99
f
mflr
r12
/*
r12
saves
lr
*/
.
cfi_register
lr
,
r12
mr
r10
,
r3
/*
r10
saves
id
*/
mr
r11
,
r4
/*
r11
saves
tp
*/
bl
V_LOCAL_FUNC
(
__get_datapage
)
/*
get
data
page
*/
beq
cr1
,
50
f
/*
if
monotonic
->
jump
there
*/
/
*
*
CLOCK_REALTIME
*/
bl
V_LOCAL_FUNC
(
__do_get_xsec
)
/*
get
xsec
from
tb
&
kernel
*/
lis
r7
,
0x3b9a
/*
r7
=
1000000000
=
NSEC_PER_SEC
*/
ori
r7
,
r7
,
0xca00
rldicl
r5
,
r4
,
44
,
20
/*
r5
=
sec
=
xsec
/
XSEC_PER_SEC
*/
rldicr
r6
,
r5
,
20
,
43
/*
r6
=
sec
*
XSEC_PER_SEC
*/
std
r5
,
TSPC64_TV_SEC
(
r11
)
/*
store
sec
in
tv
*/
subf
r0
,
r6
,
r4
/*
r0
=
xsec
=
(
xsec
-
r6
)
*/
mulld
r0
,
r0
,
r7
/*
nsec
=
(
xsec
*
NSEC_PER_SEC
)
/
*
XSEC_PER_SEC
*/
rldicl
r0
,
r0
,
44
,
20
std
r0
,
TSPC64_TV_NSEC
(
r11
)
/*
store
nsec
in
tp
*/
mtlr
r12
li
r3
,
0
blr
/
*
*
CLOCK_MONOTONIC
*/
50
:
bl
V_LOCAL_FUNC
(
__do_get_xsec
)
/*
get
xsec
from
tb
&
kernel
*/
lis
r7
,
0x3b9a
/*
r7
=
1000000000
=
NSEC_PER_SEC
*/
ori
r7
,
r7
,
0xca00
rldicl
r5
,
r4
,
44
,
20
/*
r5
=
sec
=
xsec
/
XSEC_PER_SEC
*/
rldicr
r6
,
r5
,
20
,
43
/*
r6
=
sec
*
XSEC_PER_SEC
*/
subf
r0
,
r6
,
r4
/*
r0
=
xsec
=
(
xsec
-
r6
)
*/
mulld
r0
,
r0
,
r7
/*
nsec
=
(
xsec
*
NSEC_PER_SEC
)
/
*
XSEC_PER_SEC
*/
rldicl
r6
,
r0
,
44
,
20
/
*
now
we
must
fixup
using
wall
to
monotonic
.
We
need
to
snapshot
*
that
value
and
do
the
counter
trick
again
.
Fortunately
,
we
still
*
have
the
counter
value
in
r8
that
was
returned
by
__do_get_xsec
.
*
At
this
point
,
r5
,
r6
contain
our
sec
/
nsec
values
.
*
can
be
used
*/
lwz
r4
,
WTOM_CLOCK_SEC
(
r9
)
lwz
r7
,
WTOM_CLOCK_NSEC
(
r9
)
/
*
We
now
have
our
result
in
r4
,
r7
.
We
create
a
fake
dependency
*
on
that
result
and
re
-
check
the
counter
*/
or
r9
,
r4
,
r7
xor
r0
,
r9
,
r9
add
r3
,
r3
,
r0
ld
r0
,
CFG_TB_UPDATE_COUNT
(
r3
)
cmpld
cr0
,
r0
,
r8
/*
check
if
updated
*/
bne
-
50
b
/
*
Calculate
and
store
result
.
Note
that
this
mimmics
the
C
code
,
*
which
may
cause
funny
results
if
nsec
goes
negative
...
is
that
*
possible
at
all
?
*/
add
r4
,
r4
,
r5
add
r7
,
r7
,
r6
lis
r9
,
NSEC_PER_SEC
@
h
ori
r9
,
r9
,
NSEC_PER_SEC
@
l
cmpli
cr0
,
r7
,
r9
blt
1
f
subf
r7
,
r9
,
r7
addi
r4
,
r4
,
1
1
:
std
r4
,
TSPC64_TV_SEC
(
r11
)
std
r7
,
TSPC64_TV_NSEC
(
r11
)
mtlr
r12
li
r3
,
0
blr
/
*
*
syscall
fallback
*/
98
:
mtlr
r12
mr
r3
,
r10
mr
r4
,
r11
99
:
li
r0
,
__NR_clock_gettime
sc
blr
.
cfi_endproc
V_FUNCTION_END
(
__kernel_clock_gettime
)
/*
*
Exact
prototype
of
clock_getres
()
*
*
int
__kernel_clock_getres
(
clockid_t
clock_id
,
struct
timespec
*
res
)
;
*
*/
V_FUNCTION_BEGIN
(
__kernel_clock_getres
)
.
cfi_startproc
/
*
Check
for
supported
clock
IDs
*/
cmpwi
cr0
,
r3
,
CLOCK_REALTIME
cmpwi
cr1
,
r3
,
CLOCK_MONOTONIC
cror
cr0
,
cr0
,
cr1
bne
cr0
,
99
f
li
r3
,
0
cmpli
cr0
,
r4
,
0
beqlr
lis
r5
,
CLOCK_REALTIME_RES
@
h
ori
r5
,
r5
,
CLOCK_REALTIME_RES
@
l
std
r3
,
TSPC64_TV_SEC
(
r4
)
std
r5
,
TSPC64_TV_NSEC
(
r4
)
blr
/
*
*
syscall
fallback
*/
99
:
li
r0
,
__NR_clock_getres
sc
blr
.
cfi_endproc
V_FUNCTION_END
(
__kernel_clock_getres
)
/*
*
This
is
the
core
of
gettimeofday
(),
it
returns
the
xsec
*
value
in
r4
and
expects
the
datapage
ptr
(
non
clobbered
)
*
in
r3
.
clobbers
r0
,
r4
,
r5
,
r6
,
r7
,
r8
*/
*
When
returning
,
r8
contains
the
counter
value
that
can
be
reused
*/
V_FUNCTION_BEGIN
(
__do_get_xsec
)
.
cfi_startproc
/
*
check
for
update
count
&
load
values
*/
1
:
ld
r
7
,
CFG_TB_UPDATE_COUNT
(
r3
)
1
:
ld
r
8
,
CFG_TB_UPDATE_COUNT
(
r3
)
andi
.
r0
,
r4
,
1
/*
pending
update
?
loop
*/
bne
-
1
b
xor
r0
,
r4
,
r4
/*
create
dependency
*/
add
r3
,
r3
,
r0
/
*
Get
TB
&
offset
it
*/
mftb
r
8
mftb
r
7
ld
r9
,
CFG_TB_ORIG_STAMP
(
r3
)
subf
r
8
,
r9
,
r8
subf
r
7
,
r9
,
r7
/
*
Scale
result
*/
ld
r5
,
CFG_TB_TO_XS
(
r3
)
mulhdu
r
8
,
r8
,
r5
mulhdu
r
7
,
r7
,
r5
/
*
Add
stamp
since
epoch
*/
ld
r6
,
CFG_STAMP_XSEC
(
r3
)
add
r4
,
r6
,
r
8
add
r4
,
r6
,
r
7
xor
r0
,
r4
,
r4
add
r3
,
r3
,
r0
ld
r0
,
CFG_TB_UPDATE_COUNT
(
r3
)
cmpld
cr0
,
r0
,
r
7
/*
check
if
updated
*/
cmpld
cr0
,
r0
,
r
8
/*
check
if
updated
*/
bne
-
1
b
blr
.
cfi_endproc
...
...
arch/p
pc64
/kernel/vdso64/note.S
→
arch/p
owerpc
/kernel/vdso64/note.S
View file @
9b80b11c
File moved
arch/p
pc64
/kernel/vdso64/sigtramp.S
→
arch/p
owerpc
/kernel/vdso64/sigtramp.S
View file @
9b80b11c
File moved
arch/p
pc64
/kernel/vdso64/vdso64.lds.S
→
arch/p
owerpc
/kernel/vdso64/vdso64.lds.S
View file @
9b80b11c
...
...
@@ -102,9 +102,12 @@ VERSION
{
VDSO_VERSION_STRING
{
global
:
__kernel_datapage_offset
; /* Has to be there for the kernel to find
it
*/
__kernel_datapage_offset
; /* Has to be there for the kernel to find */
__kernel_get_syscall_map
;
__kernel_gettimeofday
;
__kernel_clock_gettime
;
__kernel_clock_getres
;
__kernel_get_tbfreq
;
__kernel_sync_dicache
;
__kernel_sync_dicache_p5
;
__kernel_sigtramp_rt64
;
...
...
arch/p
pc64
/kernel/vdso64/vdso64_wrapper.S
→
arch/p
owerpc
/kernel/vdso64/vdso64_wrapper.S
View file @
9b80b11c
...
...
@@ -6,7 +6,7 @@
.
globl
vdso64_start
,
vdso64_end
.
balign
PAGE_SIZE
vdso64_start
:
.
incbin
"arch/p
pc64
/kernel/vdso64/vdso64.so"
.
incbin
"arch/p
owerpc
/kernel/vdso64/vdso64.so"
.
balign
PAGE_SIZE
vdso64_end
:
...
...
arch/powerpc/mm/mem.c
View file @
9b80b11c
...
...
@@ -46,9 +46,7 @@
#include <asm/prom.h>
#include <asm/lmb.h>
#include <asm/sections.h>
#ifdef CONFIG_PPC64
#include <asm/vdso.h>
#endif
#include "mmu_decl.h"
...
...
@@ -397,10 +395,8 @@ void __init mem_init(void)
mem_init_done
=
1
;
#ifdef CONFIG_PPC64
/* Initialize the vDSO */
vdso_init
();
#endif
}
/*
...
...
arch/powerpc/mm/numa.c
View file @
9b80b11c
This diff is collapsed.
Click to expand it.
arch/powerpc/oprofile/op_model_power4.c
View file @
9b80b11c
...
...
@@ -14,7 +14,6 @@
#include <asm/system.h>
#include <asm/processor.h>
#include <asm/cputable.h>
#include <asm/systemcfg.h>
#include <asm/rtas.h>
#include <asm/oprofile_impl.h>
#include <asm/reg.h>
...
...
arch/powerpc/platforms/pseries/rtasd.c
View file @
9b80b11c
...
...
@@ -27,7 +27,6 @@
#include <asm/prom.h>
#include <asm/nvram.h>
#include <asm/atomic.h>
#include <asm/systemcfg.h>
#if 0
#define DEBUG(A...) printk(KERN_ERR A)
...
...
arch/powerpc/platforms/pseries/setup.c
View file @
9b80b11c
...
...
@@ -306,9 +306,7 @@ static void __init fw_feature_init(void)
}
of_node_put
(
dn
);
no_rtas:
printk
(
KERN_INFO
"firmware_features = 0x%lx
\n
"
,
ppc64_firmware_features
);
no_rtas:
DBG
(
" <- fw_feature_init()
\n
"
);
}
...
...
arch/powerpc/platforms/pseries/smp.c
View file @
9b80b11c
...
...
@@ -46,7 +46,7 @@
#include <asm/rtas.h>
#include <asm/pSeries_reconfig.h>
#include <asm/mpic.h>
#include <asm/
systemcfg
.h>
#include <asm/
vdso_datapage
.h>
#include "plpar_wrappers.h"
...
...
@@ -97,7 +97,7 @@ int pSeries_cpu_disable(void)
int
cpu
=
smp_processor_id
();
cpu_clear
(
cpu
,
cpu_online_map
);
_systemcfg
->
processorCount
--
;
vdso_data
->
processorCount
--
;
/*fix boot_cpuid here*/
if
(
cpu
==
boot_cpuid
)
...
...
arch/powerpc/xmon/xmon.c
View file @
9b80b11c
...
...
@@ -1467,17 +1467,23 @@ read_spr(int n)
{
unsigned
int
instrs
[
2
];
unsigned
long
(
*
code
)(
void
);
unsigned
long
opd
[
3
];
unsigned
long
ret
=
-
1UL
;
#ifdef CONFIG_PPC64
unsigned
long
opd
[
3
];
instrs
[
0
]
=
0x7c6002a6
+
((
n
&
0x1F
)
<<
16
)
+
((
n
&
0x3e0
)
<<
6
);
instrs
[
1
]
=
0x4e800020
;
opd
[
0
]
=
(
unsigned
long
)
instrs
;
opd
[
1
]
=
0
;
opd
[
2
]
=
0
;
code
=
(
unsigned
long
(
*
)(
void
))
opd
;
#else
code
=
(
unsigned
long
(
*
)(
void
))
instrs
;
#endif
/* mfspr r3,n; blr */
instrs
[
0
]
=
0x7c6002a6
+
((
n
&
0x1F
)
<<
16
)
+
((
n
&
0x3e0
)
<<
6
);
instrs
[
1
]
=
0x4e800020
;
store_inst
(
instrs
);
store_inst
(
instrs
+
1
);
code
=
(
unsigned
long
(
*
)(
void
))
opd
;
if
(
setjmp
(
bus_error_jmp
)
==
0
)
{
catch_memory_errors
=
1
;
...
...
@@ -1499,16 +1505,21 @@ write_spr(int n, unsigned long val)
{
unsigned
int
instrs
[
2
];
unsigned
long
(
*
code
)(
unsigned
long
);
#ifdef CONFIG_PPC64
unsigned
long
opd
[
3
];
instrs
[
0
]
=
0x7c6003a6
+
((
n
&
0x1F
)
<<
16
)
+
((
n
&
0x3e0
)
<<
6
);
instrs
[
1
]
=
0x4e800020
;
opd
[
0
]
=
(
unsigned
long
)
instrs
;
opd
[
1
]
=
0
;
opd
[
2
]
=
0
;
code
=
(
unsigned
long
(
*
)(
unsigned
long
))
opd
;
#else
code
=
(
unsigned
long
(
*
)(
unsigned
long
))
instrs
;
#endif
instrs
[
0
]
=
0x7c6003a6
+
((
n
&
0x1F
)
<<
16
)
+
((
n
&
0x3e0
)
<<
6
);
instrs
[
1
]
=
0x4e800020
;
store_inst
(
instrs
);
store_inst
(
instrs
+
1
);
code
=
(
unsigned
long
(
*
)(
unsigned
long
))
opd
;
if
(
setjmp
(
bus_error_jmp
)
==
0
)
{
catch_memory_errors
=
1
;
...
...
arch/ppc/kernel/asm-offsets.c
View file @
9b80b11c
...
...
@@ -25,6 +25,7 @@
#include <asm/processor.h>
#include <asm/cputable.h>
#include <asm/thread_info.h>
#include <asm/vdso_datapage.h>
#define DEFINE(sym, val) \
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
...
...
@@ -143,5 +144,32 @@ main(void)
DEFINE
(
TASK_SIZE
,
TASK_SIZE
);
DEFINE
(
NUM_USER_SEGMENTS
,
TASK_SIZE
>>
28
);
/* datapage offsets for use by vdso */
DEFINE
(
CFG_TB_ORIG_STAMP
,
offsetof
(
struct
vdso_data
,
tb_orig_stamp
));
DEFINE
(
CFG_TB_TICKS_PER_SEC
,
offsetof
(
struct
vdso_data
,
tb_ticks_per_sec
));
DEFINE
(
CFG_TB_TO_XS
,
offsetof
(
struct
vdso_data
,
tb_to_xs
));
DEFINE
(
CFG_STAMP_XSEC
,
offsetof
(
struct
vdso_data
,
stamp_xsec
));
DEFINE
(
CFG_TB_UPDATE_COUNT
,
offsetof
(
struct
vdso_data
,
tb_update_count
));
DEFINE
(
CFG_TZ_MINUTEWEST
,
offsetof
(
struct
vdso_data
,
tz_minuteswest
));
DEFINE
(
CFG_TZ_DSTTIME
,
offsetof
(
struct
vdso_data
,
tz_dsttime
));
DEFINE
(
CFG_SYSCALL_MAP32
,
offsetof
(
struct
vdso_data
,
syscall_map_32
));
DEFINE
(
WTOM_CLOCK_SEC
,
offsetof
(
struct
vdso_data
,
wtom_clock_sec
));
DEFINE
(
WTOM_CLOCK_NSEC
,
offsetof
(
struct
vdso_data
,
wtom_clock_nsec
));
DEFINE
(
TVAL32_TV_SEC
,
offsetof
(
struct
timeval
,
tv_sec
));
DEFINE
(
TVAL32_TV_USEC
,
offsetof
(
struct
timeval
,
tv_usec
));
DEFINE
(
TSPEC32_TV_SEC
,
offsetof
(
struct
timespec
,
tv_sec
));
DEFINE
(
TSPEC32_TV_NSEC
,
offsetof
(
struct
timespec
,
tv_nsec
));
/* timeval/timezone offsets for use by vdso */
DEFINE
(
TZONE_TZ_MINWEST
,
offsetof
(
struct
timezone
,
tz_minuteswest
));
DEFINE
(
TZONE_TZ_DSTTIME
,
offsetof
(
struct
timezone
,
tz_dsttime
));
/* Other bits used by the vdso */
DEFINE
(
CLOCK_REALTIME
,
CLOCK_REALTIME
);
DEFINE
(
CLOCK_MONOTONIC
,
CLOCK_MONOTONIC
);
DEFINE
(
NSEC_PER_SEC
,
NSEC_PER_SEC
);
DEFINE
(
CLOCK_REALTIME_RES
,
TICK_NSEC
);
return
0
;
}
arch/ppc/syslib/cpm2_pic.c
View file @
9b80b11c
...
...
@@ -37,7 +37,7 @@ static u_char irq_to_siureg[] = {
static
u_char
irq_to_siubit
[]
=
{
0
,
15
,
14
,
13
,
12
,
11
,
10
,
9
,
8
,
7
,
6
,
5
,
4
,
3
,
2
,
1
,
2
,
1
,
15
,
14
,
13
,
12
,
11
,
10
,
2
,
1
,
0
,
14
,
13
,
12
,
11
,
10
,
9
,
8
,
7
,
6
,
5
,
4
,
3
,
0
,
31
,
30
,
29
,
28
,
27
,
26
,
25
,
24
,
23
,
22
,
21
,
20
,
19
,
18
,
17
,
16
,
...
...
arch/ppc64/Kconfig
View file @
9b80b11c
...
...
@@ -279,17 +279,12 @@ config ARCH_FLATMEM_ENABLE
def_bool y
depends on !NUMA
config ARCH_DISCONTIGMEM_ENABLE
def_bool y
depends on SMP && PPC_PSERIES
config ARCH_DISCONTIGMEM_DEFAULT
config ARCH_SPARSEMEM_ENABLE
def_bool y
depends on ARCH_DISCONTIGMEM_ENABLE
config ARCH_SPARSEMEM_
ENABLE
config ARCH_SPARSEMEM_
DEFAULT
def_bool y
depends on
ARCH_DISCONTIGMEM_ENABLE
depends on
NUMA
source "mm/Kconfig"
...
...
arch/ppc64/kernel/Makefile
View file @
9b80b11c
...
...
@@ -13,10 +13,8 @@ endif
obj-y
+=
idle.o dma.o
\
align.o
\
udbg.o
\
rtc.o
\
iommu.o vdso.o
obj-y
+=
vdso32/ vdso64/
iommu.o
pci-obj-$(CONFIG_PPC_MULTIPLATFORM)
+=
pci_dn.o pci_direct_iommu.o
...
...
@@ -27,8 +25,6 @@ ifneq ($(CONFIG_PPC_MERGE),y)
obj-$(CONFIG_PPC_MULTIPLATFORM)
+=
prom_init.o
endif
obj-$(CONFIG_PPC_PSERIES)
+=
udbg_16550.o
obj-$(CONFIG_KEXEC)
+=
machine_kexec.o
obj-$(CONFIG_MODULES)
+=
module.o
ifneq
($(CONFIG_PPC_MERGE),y)
...
...
@@ -40,10 +36,6 @@ obj-$(CONFIG_BOOTX_TEXT) += btext.o
endif
obj-$(CONFIG_HVCS)
+=
hvcserver.o
obj-$(CONFIG_PPC_PMAC)
+=
udbg_scc.o
obj-$(CONFIG_PPC_MAPLE)
+=
udbg_16550.o
obj-$(CONFIG_KPROBES)
+=
kprobes.o
ifneq
($(CONFIG_PPC_MERGE),y)
...
...
arch/ppc64/kernel/misc.S
View file @
9b80b11c
...
...
@@ -186,7 +186,8 @@ _KPROBE(__flush_icache_range)
bdnz
2
b
isync
blr
.
previous
.
text
.
text
/*
*
Like
above
,
but
only
do
the
D
-
cache
.
*
...
...
include/asm-powerpc/auxvec.h
View file @
9b80b11c
...
...
@@ -14,8 +14,6 @@
/* The vDSO location. We have to use the same value as x86 for glibc's
* sake :-)
*/
#ifdef __powerpc64__
#define AT_SYSINFO_EHDR 33
#endif
#endif
include/asm-powerpc/elf.h
View file @
9b80b11c
...
...
@@ -269,14 +269,12 @@ extern int dcache_bsize;
extern
int
icache_bsize
;
extern
int
ucache_bsize
;
#ifdef __powerpc64__
/* vDSO has arch_setup_additional_pages */
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES
struct
linux_binprm
;
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES
/* vDSO has arch_setup_additional_pages */
extern
int
arch_setup_additional_pages
(
struct
linux_binprm
*
bprm
,
int
executable_stack
);
extern
int
arch_setup_additional_pages
(
struct
linux_binprm
*
bprm
,
int
executable_stack
);
#define VDSO_AUX_ENT(a,b) NEW_AUX_ENT(a,b);
#else
#define VDSO_AUX_ENT(a,b)
#endif
/* __powerpc64__ */
/*
* The requirements here are:
...
...
include/asm-powerpc/irq.h
View file @
9b80b11c
...
...
@@ -389,6 +389,7 @@ extern u64 ppc64_interrupt_controller;
#define SIU_INT_TIMER4 ((uint)0x0f + CPM_IRQ_OFFSET)
#define SIU_INT_TMCNT ((uint)0x10 + CPM_IRQ_OFFSET)
#define SIU_INT_PIT ((uint)0x11 + CPM_IRQ_OFFSET)
#define SIU_INT_PCI ((uint)0x12 + CPM_IRQ_OFFSET)
#define SIU_INT_IRQ1 ((uint)0x13 + CPM_IRQ_OFFSET)
#define SIU_INT_IRQ2 ((uint)0x14 + CPM_IRQ_OFFSET)
#define SIU_INT_IRQ3 ((uint)0x15 + CPM_IRQ_OFFSET)
...
...
include/asm-powerpc/processor.h
View file @
9b80b11c
...
...
@@ -177,8 +177,8 @@ struct thread_struct {
#ifdef CONFIG_PPC64
unsigned
long
start_tb
;
/* Start purr when proc switched in */
unsigned
long
accum_tb
;
/* Total accumilated purr for process */
unsigned
long
vdso_base
;
/* base of the vDSO library */
#endif
unsigned
long
vdso_base
;
/* base of the vDSO library */
unsigned
long
dabr
;
/* Data address breakpoint register */
#ifdef CONFIG_ALTIVEC
/* Complete AltiVec register set */
...
...
include/asm-powerpc/sparsemem.h
View file @
9b80b11c
...
...
@@ -8,8 +8,8 @@
* MAX_PHYSMEM_BITS 2^N: how much memory we can have in that space
*/
#define SECTION_SIZE_BITS 24
#define MAX_PHYSADDR_BITS
38
#define MAX_PHYSMEM_BITS
36
#define MAX_PHYSADDR_BITS
44
#define MAX_PHYSMEM_BITS
44
#ifdef CONFIG_MEMORY_HOTPLUG
extern
void
create_section_mapping
(
unsigned
long
start
,
unsigned
long
end
);
...
...
include/asm-powerpc/topology.h
View file @
9b80b11c
...
...
@@ -9,15 +9,7 @@
static
inline
int
cpu_to_node
(
int
cpu
)
{
int
node
;
node
=
numa_cpu_lookup_table
[
cpu
];
#ifdef DEBUG_NUMA
BUG_ON
(
node
==
-
1
);
#endif
return
node
;
return
numa_cpu_lookup_table
[
cpu
];
}
#define parent_node(node) (node)
...
...
@@ -37,8 +29,6 @@ static inline int node_to_first_cpu(int node)
#define pcibus_to_node(node) (-1)
#define pcibus_to_cpumask(bus) (cpu_online_map)
#define nr_cpus_node(node) (nr_cpus_in_node[node])
/* sched_domains SD_NODE_INIT for PPC64 machines */
#define SD_NODE_INIT (struct sched_domain) { \
.span = CPU_MASK_NONE, \
...
...
include/asm-p
pc64
/udbg.h
→
include/asm-p
owerpc
/udbg.h
View file @
9b80b11c
#ifndef __UDBG_HDR
#define __UDBG_HDR
#include <linux/compiler.h>
#include <linux/init.h>
/*
* c 2001 PPC 64 Team, IBM Corp
*
...
...
@@ -13,6 +7,12 @@
* 2 of the License, or (at your option) any later version.
*/
#ifndef _ASM_POWERPC_UDBG_H
#define _ASM_POWERPC_UDBG_H
#include <linux/compiler.h>
#include <linux/init.h>
extern
void
(
*
udbg_putc
)(
unsigned
char
c
);
extern
unsigned
char
(
*
udbg_getc
)(
void
);
extern
int
(
*
udbg_getc_poll
)(
void
);
...
...
@@ -28,4 +28,4 @@ extern void udbg_init_uart(void __iomem *comport, unsigned int speed);
struct
device_node
;
extern
void
udbg_init_scc
(
struct
device_node
*
np
);
#endif
#endif
/* _ASM_POWERPC_UDBG_H */
include/asm-p
pc64
/vdso.h
→
include/asm-p
owerpc
/vdso.h
View file @
9b80b11c
File moved
include/asm-powerpc/
systemcfg
.h
→
include/asm-powerpc/
vdso_datapage
.h
View file @
9b80b11c
#ifndef _
SYSTEMCFG
_H
#define _
SYSTEMCFG
_H
#ifndef _
VDSO_DATAPAGE
_H
#define _
VDSO_DATAPAGE
_H
/*
* Copyright (C) 2002 Peter Bergner <bergner@vnet.ibm.com>, IBM
* Copyright (C) 2005 Benjamin Herrenschmidy <benh@kernel.crashing.org>,
* IBM Corp.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
...
...
@@ -10,9 +12,20 @@
* 2 of the License, or (at your option) any later version.
*/
/* Change Activity:
* 2002/09/30 : bergner : Created
* End Change Activity
/*
* Note about this structure:
*
* This structure was historically called systemcfg and exposed to
* userland via /proc/ppc64/systemcfg. Unfortunately, this became an
* ABI issue as some proprietary software started relying on being able
* to mmap() it, thus we have to keep the base layout at least for a
* few kernel versions.
*
* However, since ppc32 doesn't suffer from this backward handicap,
* a simpler version of the data structure is used there with only the
* fields actually used by the vDSO.
*
*/
/*
...
...
@@ -28,7 +41,13 @@
#define SYSCALL_MAP_SIZE ((__NR_syscalls + 31) / 32)
struct
systemcfg
{
/*
* So here is the ppc64 backward compatible version
*/
#ifdef CONFIG_PPC64
struct
vdso_data
{
__u8
eye_catcher
[
16
];
/* Eyecatcher: SYSTEMCFG:PPC64 0x00 */
struct
{
/* Systemcfg version numbers */
__u32
major
;
/* Major number 0x10 */
...
...
@@ -46,17 +65,42 @@ struct systemcfg {
__u64
tb_update_count
;
/* Timebase atomicity ctr 0x50 */
__u32
tz_minuteswest
;
/* Minutes west of Greenwich 0x58 */
__u32
tz_dsttime
;
/* Type of dst correction 0x5C */
/* next four are no longer used except to be exported to /proc */
__u32
dcache_size
;
/* L1 d-cache size 0x60 */
__u32
dcache_line_size
;
/* L1 d-cache line size 0x64 */
__u32
icache_size
;
/* L1 i-cache size 0x68 */
__u32
icache_line_size
;
/* L1 i-cache line size 0x6C */
__u32
syscall_map_64
[
SYSCALL_MAP_SIZE
];
/* map of available syscalls 0x70 */
__u32
syscall_map_32
[
SYSCALL_MAP_SIZE
];
/* map of available syscalls */
/* those additional ones don't have to be located anywhere
* special as they were not part of the original systemcfg
*/
__s64
wtom_clock_sec
;
/* Wall to monotonic clock */
__s32
wtom_clock_nsec
;
__u32
syscall_map_64
[
SYSCALL_MAP_SIZE
];
/* map of syscalls */
__u32
syscall_map_32
[
SYSCALL_MAP_SIZE
];
/* map of syscalls */
};
#else
/* CONFIG_PPC64 */
/*
* And here is the simpler 32 bits version
*/
struct
vdso_data
{
__u64
tb_orig_stamp
;
/* Timebase at boot 0x30 */
__u64
tb_ticks_per_sec
;
/* Timebase tics / sec 0x38 */
__u64
tb_to_xs
;
/* Inverse of TB to 2^20 0x40 */
__u64
stamp_xsec
;
/* 0x48 */
__u32
tb_update_count
;
/* Timebase atomicity ctr 0x50 */
__u32
tz_minuteswest
;
/* Minutes west of Greenwich 0x58 */
__u32
tz_dsttime
;
/* Type of dst correction 0x5C */
__s32
wtom_clock_sec
;
/* Wall to monotonic clock */
__s32
wtom_clock_nsec
;
__u32
syscall_map_32
[
SYSCALL_MAP_SIZE
];
/* map of syscalls */
};
#endif
/* CONFIG_PPC64 */
#ifdef __KERNEL__
extern
struct
systemcfg
*
_systemcfg
;
/* to be renamed */
extern
struct
vdso_data
*
vdso_data
;
#endif
#endif
/* __ASSEMBLY__ */
...
...
include/asm-ppc/page.h
View file @
9b80b11c
#ifndef _PPC_PAGE_H
#define _PPC_PAGE_H
#include <linux/config.h>
#include <asm/asm-compat.h>
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#define PAGE_SIZE (
1UL
<< PAGE_SHIFT)
#define PAGE_SIZE (
ASM_CONST(1)
<< PAGE_SHIFT)
/*
* Subtle: this is an int (not an unsigned long) and so it
...
...
@@ -169,5 +172,8 @@ extern __inline__ int get_order(unsigned long size)
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
/* We do define AT_SYSINFO_EHDR but don't use the gate mecanism */
#define __HAVE_ARCH_GATE_AREA 1
#endif
/* __KERNEL__ */
#endif
/* _PPC_PAGE_H */
include/asm-ppc64/mmzone.h
View file @
9b80b11c
...
...
@@ -8,15 +8,14 @@
#define _ASM_MMZONE_H_
#include <linux/config.h>
#include <asm/smp.h>
/* generic non-linear memory support:
/*
* generic non-linear memory support:
*
* 1) we will not split memory into more chunks than will fit into the
* flags field of the struct page
*/
#ifdef CONFIG_NEED_MULTIPLE_NODES
extern
struct
pglist_data
*
node_data
[];
...
...
@@ -30,44 +29,11 @@ extern struct pglist_data *node_data[];
*/
extern
int
numa_cpu_lookup_table
[];
extern
char
*
numa_memory_lookup_table
;
extern
cpumask_t
numa_cpumask_lookup_table
[];
extern
int
nr_cpus_in_node
[];
#ifdef CONFIG_MEMORY_HOTPLUG
extern
unsigned
long
max_pfn
;
#endif
/* 16MB regions */
#define MEMORY_INCREMENT_SHIFT 24
#define MEMORY_INCREMENT (1UL << MEMORY_INCREMENT_SHIFT)
/* NUMA debugging, will not work on a DLPAR machine */
#undef DEBUG_NUMA
static
inline
int
pa_to_nid
(
unsigned
long
pa
)
{
int
nid
;
#ifdef CONFIG_MEMORY_HOTPLUG
/* kludge hot added sections default to node 0 */
if
(
pa
>=
(
max_pfn
<<
PAGE_SHIFT
))
return
0
;
#endif
nid
=
numa_memory_lookup_table
[
pa
>>
MEMORY_INCREMENT_SHIFT
];
#ifdef DEBUG_NUMA
/* the physical address passed in is not in the map for the system */
if
(
nid
==
-
1
)
{
printk
(
"bad address: %lx
\n
"
,
pa
);
BUG
();
}
#endif
return
nid
;
}
#define node_localnr(pfn, nid) ((pfn) - NODE_DATA(nid)->node_start_pfn)
/*
* Following are macros that each numa implmentation must define.
*/
...
...
@@ -75,39 +41,10 @@ static inline int pa_to_nid(unsigned long pa)
#define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn)
#define node_end_pfn(nid) (NODE_DATA(nid)->node_end_pfn)
#ifdef CONFIG_DISCONTIGMEM
/*
* Given a kernel address, find the home node of the underlying memory.
*/
#define kvaddr_to_nid(kaddr) pa_to_nid(__pa(kaddr))
#define pfn_to_nid(pfn) pa_to_nid((unsigned long)(pfn) << PAGE_SHIFT)
/* Written this way to avoid evaluating arguments twice */
#define discontigmem_pfn_to_page(pfn) \
({ \
unsigned long __tmp = pfn; \
(NODE_DATA(pfn_to_nid(__tmp))->node_mem_map + \
node_localnr(__tmp, pfn_to_nid(__tmp))); \
})
#define discontigmem_page_to_pfn(p) \
({ \
struct page *__tmp = p; \
(((__tmp) - page_zone(__tmp)->zone_mem_map) + \
page_zone(__tmp)->zone_start_pfn); \
})
/* XXX fix for discontiguous physical memory */
#define discontigmem_pfn_valid(pfn) ((pfn) < num_physpages)
#endif
/* CONFIG_DISCONTIGMEM */
#endif
/* CONFIG_NEED_MULTIPLE_NODES */
#ifdef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID
#define early_pfn_to_nid(pfn) pa_to_nid(((unsigned long)pfn) << PAGE_SHIFT)
extern
int
__init
early_pfn_to_nid
(
unsigned
long
pfn
);
#endif
#endif
/* _ASM_MMZONE_H_ */
include/asm-ppc64/page.h
View file @
9b80b11c
...
...
@@ -279,11 +279,6 @@ extern u64 ppc64_pft_size; /* Log 2 of page table size */
#define __va(x) ((void *)((unsigned long)(x) + KERNELBASE))
#ifdef CONFIG_DISCONTIGMEM
#define page_to_pfn(page) discontigmem_page_to_pfn(page)
#define pfn_to_page(pfn) discontigmem_pfn_to_page(pfn)
#define pfn_valid(pfn) discontigmem_pfn_valid(pfn)
#endif
#ifdef CONFIG_FLATMEM
#define pfn_to_page(pfn) (mem_map + (pfn))
#define page_to_pfn(page) ((unsigned long)((page) - mem_map))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment