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
2549eb55
Commit
2549eb55
authored
Jun 03, 2003
by
Anton Blanchard
Browse files
Options
Browse Files
Download
Plain Diff
Merge samba.org:/scratch/anton/linux-2.5
into samba.org:/scratch/anton/tmp3
parents
8a82602e
637823d2
Changes
23
Show whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
180 additions
and
159 deletions
+180
-159
arch/ppc64/boot/Makefile
arch/ppc64/boot/Makefile
+1
-1
arch/ppc64/kernel/head.S
arch/ppc64/kernel/head.S
+13
-21
arch/ppc64/kernel/iSeries_setup.c
arch/ppc64/kernel/iSeries_setup.c
+1
-1
arch/ppc64/kernel/irq.c
arch/ppc64/kernel/irq.c
+30
-4
arch/ppc64/kernel/misc.S
arch/ppc64/kernel/misc.S
+2
-2
arch/ppc64/kernel/pacaData.c
arch/ppc64/kernel/pacaData.c
+20
-2
arch/ppc64/kernel/pci.c
arch/ppc64/kernel/pci.c
+1
-1
arch/ppc64/kernel/pci_dma.c
arch/ppc64/kernel/pci_dma.c
+1
-6
arch/ppc64/kernel/process.c
arch/ppc64/kernel/process.c
+26
-10
arch/ppc64/kernel/prom.c
arch/ppc64/kernel/prom.c
+1
-1
arch/ppc64/kernel/setup.c
arch/ppc64/kernel/setup.c
+3
-3
arch/ppc64/kernel/signal.c
arch/ppc64/kernel/signal.c
+2
-6
arch/ppc64/kernel/signal32.c
arch/ppc64/kernel/signal32.c
+0
-18
arch/ppc64/kernel/smp.c
arch/ppc64/kernel/smp.c
+4
-4
arch/ppc64/kernel/stab.c
arch/ppc64/kernel/stab.c
+23
-44
arch/ppc64/kernel/syscalls.c
arch/ppc64/kernel/syscalls.c
+0
-5
arch/ppc64/kernel/traps.c
arch/ppc64/kernel/traps.c
+2
-3
include/asm-ppc64/elf.h
include/asm-ppc64/elf.h
+27
-6
include/asm-ppc64/paca.h
include/asm-ppc64/paca.h
+0
-11
include/asm-ppc64/pci-bridge.h
include/asm-ppc64/pci-bridge.h
+1
-1
include/asm-ppc64/signal.h
include/asm-ppc64/signal.h
+20
-9
include/asm-ppc64/system.h
include/asm-ppc64/system.h
+1
-0
include/asm-ppc64/uaccess.h
include/asm-ppc64/uaccess.h
+1
-0
No files found.
arch/ppc64/boot/Makefile
View file @
2549eb55
...
...
@@ -98,7 +98,7 @@ $(call gz-sec, $(required)): $(obj)/kernel-%.gz: % FORCE
$(obj)/kernel-initrd.gz
:
$(obj)/ramdisk.image.gz
cp
-f
$(obj)
/ramdisk.image.gz
$@
$(call src-sec, $(required) $(initrd))
:
$(obj)/kernel-%.c: $(obj)/kernel-%.gz
$(call src-sec, $(required) $(initrd))
:
$(obj)/kernel-%.c: $(obj)/kernel-%.gz
FORCE
touch
$@
$(call obj-sec, $(required) $(initrd))
:
$(obj)/kernel-%.o: $(obj)/kernel-%.c FORCE
...
...
arch/ppc64/kernel/head.S
View file @
2549eb55
...
...
@@ -596,7 +596,7 @@ DataAccess_common:
cmpi
0
,
r22
,
0xc
/
*
Segment
fault
on
a
bolted
segment
.
Go
off
and
map
that
segment
.
*/
beq
.
do_stab_bolted
beq
-
.
do_stab_bolted
stab_bolted_user_return
:
EXCEPTION_PROLOG_COMMON
ld
r3
,
_DSISR
(
r1
)
...
...
@@ -606,7 +606,7 @@ stab_bolted_user_return:
rlwinm
r4
,
r3
,
32
-
23
,
29
,
29
/*
DSISR_STORE
->
_PAGE_RW
*/
ld
r3
,
_DAR
(
r1
)
/*
into
the
hash
table
*/
beq
2
f
/*
If
so
handle
it
*/
beq
+
2
f
/*
If
so
handle
it
*/
li
r4
,
0x300
/*
Trap
number
*/
bl
.
do_stab_SI
b
1
f
...
...
@@ -658,7 +658,7 @@ InstructionAccess_common:
EXCEPTION_PROLOG_COMMON
andis
.
r0
,
r23
,
0x0020
/*
no
ste
found
?
*/
beq
2
f
beq
+
2
f
mr
r3
,
r22
/*
SRR0
at
interrupt
*/
li
r4
,
0x400
/*
Trap
number
*/
bl
.
do_stab_SI
...
...
@@ -688,7 +688,7 @@ InstructionAccessSLB_common:
li
r4
,
0x480
/*
Exception
vector
*/
bl
.
ste_allocate
or
.
r3
,
r3
,
r3
/*
Check
return
code
*/
beq
fast_exception_return
/*
Return
if
we
succeeded
*/
beq
+
fast_exception_return
/*
Return
if
we
succeeded
*/
addi
r3
,
r1
,
STACK_FRAME_OVERHEAD
#ifdef DO_SOFT_DISABLE
...
...
@@ -897,18 +897,8 @@ _GLOBAL(do_stab_bolted)
mfspr
r22
,
DSISR
andis
.
r22
,
r22
,
0x0020
bne
+
2
f
ld
r22
,
8
(
r21
)
/*
get
SRR1
*/
andi
.
r22
,
r22
,
MSR_PR
/*
check
if
from
user
*/
bne
+
stab_bolted_user_return
/*
from
user
,
send
the
error
on
up
*/
#if 0
li
r3
,
0
#ifdef CONFIG_XMON
bl
.
xmon
#endif
1
:
b
1
b
#endif
2
:
beq
-
stab_bolted_user_return
/
*
(((
ea
>>
28
)
&
0x1fff
)
<<
15
)
|
(
ea
>>
60
)
*/
mfspr
r21
,
DAR
rldicl
r20
,
r21
,
36
,
32
/*
Permits
a
full
32
b
of
ESID
*/
...
...
@@ -1106,9 +1096,11 @@ SLB_NUM_ENTRIES = 64
oris
r21
,
r23
,
2048
/*
valid
bit
*/
rldimi
r21
,
r22
,
0
,
52
/*
Insert
entry
*/
isync
/
*
*
No
need
for
an
isync
before
or
after
this
slbmte
.
The
exception
*
we
enter
with
and
the
rfid
we
exit
with
are
context
synchronizing
.
*/
slbmte
r20
,
r21
isync
/
*
All
done
--
return
from
exception
.
*/
mfsprg
r20
,
3
/*
Load
the
PACA
pointer
*/
...
...
@@ -1861,9 +1853,9 @@ _STATIC(start_here_common)
li
r5
,
0
std
r0
,
PACAKSAVE
(
r13
)
/
*
ptr
to
hardware
interrupt
stack
for
processor
0
*/
/
*
ptr
to
hardware
interrupt
stack
for
boot
processor
*/
LOADADDR
(
r3
,
hardware_int_paca0
)
li
r5
,
0x1000
li
r5
,
PAGE_SIZE
sldi
r5
,
r5
,
3
subi
r5
,
r5
,
STACK_FRAME_OVERHEAD
...
...
@@ -1991,7 +1983,7 @@ ioremap_dir:
.
globl
hardware_int_paca0
hardware_int_paca0
:
.
space
8
*
4096
.
space
8
*
PAGE_SIZE
/*
1
page
segment
table
per
cpu
(
max
48
,
cpu0
allocated
at
STAB0_PHYS_ADDR
)
*/
.
globl
stab_array
...
...
arch/ppc64/kernel/iSeries_setup.c
View file @
2549eb55
...
...
@@ -864,7 +864,7 @@ static void iSeries_setup_dprofile(void)
{
if
(
dprof_buffer
)
{
unsigned
i
;
for
(
i
=
0
;
i
<
MAX_PACA
S
;
++
i
)
{
for
(
i
=
0
;
i
<
NR_CPU
S
;
++
i
)
{
paca
[
i
].
prof_shift
=
dprof_shift
;
paca
[
i
].
prof_len
=
dprof_len
-
1
;
paca
[
i
].
prof_buffer
=
dprof_buffer
;
...
...
arch/ppc64/kernel/irq.c
View file @
2549eb55
...
...
@@ -381,22 +381,48 @@ int show_interrupts(struct seq_file *p, void *v)
return
0
;
}
static
inline
void
handle_irq_event
(
int
irq
,
struct
pt_regs
*
regs
,
struct
irqaction
*
action
)
extern
char
*
ppc_find_proc_name
(
unsigned
*
p
,
char
*
buf
,
unsigned
buflen
);
static
inline
void
handle_irq_event
(
int
irq
,
struct
pt_regs
*
regs
,
struct
irqaction
*
action
)
{
int
status
=
0
;
int
retval
=
0
;
struct
irqaction
*
first_action
=
action
;
if
(
!
(
action
->
flags
&
SA_INTERRUPT
))
local_irq_enable
();
do
{
status
|=
action
->
flags
;
action
->
handler
(
irq
,
action
->
dev_id
,
regs
);
retval
|=
action
->
handler
(
irq
,
action
->
dev_id
,
regs
);
action
=
action
->
next
;
}
while
(
action
);
if
(
status
&
SA_SAMPLE_RANDOM
)
add_interrupt_randomness
(
irq
);
local_irq_disable
();
if
(
retval
!=
1
)
{
static
int
count
=
100
;
char
name_buf
[
256
];
if
(
count
)
{
count
--
;
if
(
retval
)
{
printk
(
"irq event %d: bogus retval mask %x
\n
"
,
irq
,
retval
);
}
else
{
printk
(
"irq %d: nobody cared!
\n
"
,
irq
);
}
dump_stack
();
printk
(
"handlers:
\n
"
);
action
=
first_action
;
do
{
printk
(
"[<%p>]"
,
action
->
handler
);
printk
(
" (%s)
\n
"
,
ppc_find_proc_name
((
unsigned
*
)
action
->
handler
,
name_buf
,
256
));
action
=
action
->
next
;
}
while
(
action
);
}
}
}
/*
...
...
@@ -676,7 +702,7 @@ static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
#ifdef CONFIG_PPC_ISERIES
{
unsigned
i
;
for
(
i
=
0
;
i
<
MAX_PACA
S
;
++
i
)
{
for
(
i
=
0
;
i
<
NR_CPU
S
;
++
i
)
{
if
(
paca
[
i
].
prof_buffer
&&
(
new_value
&
1
)
)
paca
[
i
].
prof_enabled
=
1
;
else
...
...
arch/ppc64/kernel/misc.S
View file @
2549eb55
...
...
@@ -609,7 +609,7 @@ _GLOBAL(sys_call_table32)
.
llong
.
sys_ni_syscall
/*
old
profil
syscall
*/
.
llong
.
compat_sys_statfs
.
llong
.
compat_sys_fstatfs
/*
100
*/
.
llong
.
sys_
ioperm
.
llong
.
sys_
ni_syscall
/*
old
ioperm
syscall
*/
.
llong
.
compat_sys_socketcall
.
llong
.
sys32_syslog
.
llong
.
compat_sys_setitimer
...
...
@@ -852,7 +852,7 @@ _GLOBAL(sys_call_table)
.
llong
.
sys_ni_syscall
/*
old
profil
syscall
holder
*/
.
llong
.
sys_statfs
.
llong
.
sys_fstatfs
/*
100
*/
.
llong
.
sys_
ioperm
.
llong
.
sys_
ni_syscall
/*
old
ioperm
syscall
*/
.
llong
.
sys_socketcall
.
llong
.
sys_syslog
.
llong
.
sys_setitimer
...
...
arch/ppc64/kernel/pacaData.c
View file @
2549eb55
...
...
@@ -64,7 +64,7 @@ struct systemcfg *systemcfg;
(&paca[number].exception_stack[0]) - EXC_FRAME_SIZE, \
}
struct
paca_struct
paca
[
MAX_PACA
S
]
__page_aligned
=
{
struct
paca_struct
paca
[
NR_CPU
S
]
__page_aligned
=
{
#ifdef CONFIG_PPC_ISERIES
PACAINITDATA
(
0
,
1
,
&
xItLpQueue
,
0
,
STAB0_VIRT_ADDR
),
#else
...
...
@@ -101,6 +101,7 @@ struct paca_struct paca[MAX_PACAS] __page_aligned = {
PACAINITDATA
(
29
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
30
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
31
,
0
,
0
,
0
,
0
),
#if NR_CPUS > 32
PACAINITDATA
(
32
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
33
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
34
,
0
,
0
,
0
,
0
),
...
...
@@ -116,5 +117,22 @@ struct paca_struct paca[MAX_PACAS] __page_aligned = {
PACAINITDATA
(
44
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
45
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
46
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
47
,
0
,
0
,
0
,
0
)
PACAINITDATA
(
47
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
48
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
49
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
50
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
51
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
52
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
53
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
54
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
55
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
56
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
57
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
58
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
59
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
60
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
61
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
62
,
0
,
0
,
0
,
0
),
PACAINITDATA
(
63
,
0
,
0
,
0
,
0
),
#endif
};
arch/ppc64/kernel/pci.c
View file @
2549eb55
...
...
@@ -124,7 +124,7 @@ struct pci_dev *pci_find_dev_by_addr(unsigned long addr)
ioaddr
=
(
addr
>
isa_io_base
)
?
addr
-
isa_io_base
:
0
;
pci_for_each_dev
(
dev
)
{
if
((
dev
->
class
>>
8
)
==
PCI_BASE_CLASS_BRIDGE
)
if
((
dev
->
class
>>
16
)
==
PCI_BASE_CLASS_BRIDGE
)
continue
;
for
(
i
=
0
;
i
<
DEVICE_COUNT_RESOURCE
;
i
++
)
{
unsigned
long
start
=
pci_resource_start
(
dev
,
i
);
...
...
arch/ppc64/kernel/pci_dma.c
View file @
2549eb55
...
...
@@ -710,12 +710,6 @@ void create_tce_tables_for_busesLP(struct list_head *bus_list)
for
(
ln
=
bus_list
->
next
;
ln
!=
bus_list
;
ln
=
ln
->
next
)
{
bus
=
pci_bus_b
(
ln
);
busdn
=
PCI_GET_DN
(
bus
);
/* NOTE: there should never be a window declared on a bus when
* child devices also have a window. If this should ever be
* architected, we probably want children to have priority.
* In reality, the PHB containing ISA has the property, but otherwise
* it is the pci-bridges that have the property.
*/
dma_window
=
(
u32
*
)
get_property
(
busdn
,
"ibm,dma-window"
,
0
);
if
(
dma_window
)
{
/* Bussubno hasn't been copied yet.
...
...
@@ -724,6 +718,7 @@ void create_tce_tables_for_busesLP(struct list_head *bus_list)
busdn
->
bussubno
=
bus
->
number
;
create_pci_bus_tce_table
((
unsigned
long
)
busdn
);
}
/* look for a window on a bridge even if the PHB had one */
create_tce_tables_for_busesLP
(
&
bus
->
children
);
}
}
...
...
arch/ppc64/kernel/process.c
View file @
2549eb55
...
...
@@ -67,18 +67,34 @@ enable_kernel_fp(void)
#endif
/* CONFIG_SMP */
}
int
dump_fpu
(
struct
pt_regs
*
regs
,
elf_fpregset_t
*
fpregs
)
#ifdef CONFIG_SMP
static
void
smp_unlazy_onefpu
(
void
*
arg
)
{
/*
* XXX temporary workaround until threaded coredumps for ppc64
* are implemented - Anton
*/
struct
pt_regs
*
regs
=
current
->
thread
.
regs
;
if
(
!
regs
)
return
0
;
return
;
if
(
regs
->
msr
&
MSR_FP
)
giveup_fpu
(
current
);
memcpy
(
fpregs
,
&
current
->
thread
.
fpr
[
0
],
sizeof
(
*
fpregs
));
}
void
dump_smp_unlazy_fpu
(
void
)
{
smp_call_function
(
smp_unlazy_onefpu
,
NULL
,
1
,
1
);
}
#endif
int
dump_task_fpu
(
struct
task_struct
*
tsk
,
elf_fpregset_t
*
fpregs
)
{
struct
pt_regs
*
regs
=
tsk
->
thread
.
regs
;
if
(
!
regs
)
return
0
;
if
(
tsk
==
current
&&
(
regs
->
msr
&
MSR_FP
))
giveup_fpu
(
current
);
memcpy
(
fpregs
,
&
tsk
->
thread
.
fpr
[
0
],
sizeof
(
*
fpregs
));
return
1
;
}
...
...
@@ -113,7 +129,7 @@ struct task_struct *__switch_to(struct task_struct *prev,
}
static
void
show_tsk_stack
(
struct
task_struct
*
p
,
unsigned
long
sp
);
static
char
*
ppc_find_proc_name
(
unsigned
*
p
,
char
*
buf
,
unsigned
buflen
);
char
*
ppc_find_proc_name
(
unsigned
*
p
,
char
*
buf
,
unsigned
buflen
);
void
show_regs
(
struct
pt_regs
*
regs
)
{
...
...
@@ -410,7 +426,7 @@ void initialize_paca_hardware_interrupt_stack(void)
extern
char
_stext
[],
_etext
[],
__init_begin
[],
__init_end
[];
static
char
*
ppc_find_proc_name
(
unsigned
*
p
,
char
*
buf
,
unsigned
buflen
)
char
*
ppc_find_proc_name
(
unsigned
*
p
,
char
*
buf
,
unsigned
buflen
)
{
unsigned
long
tb_flags
;
unsigned
short
name_len
;
...
...
arch/ppc64/kernel/prom.c
View file @
2549eb55
...
...
@@ -1134,7 +1134,7 @@ prom_init(unsigned long r3, unsigned long r4, unsigned long pp,
_prom
->
cpu
=
(
int
)(
unsigned
long
)
getprop_rval
;
_xPaca
[
_prom
->
cpu
].
active
=
1
;
#ifdef CONFIG_SMP
RELOC
(
cpu_online_map
)
=
1
<<
_prom
->
cpu
;
RELOC
(
cpu_online_map
)
=
1
UL
<<
_prom
->
cpu
;
#endif
RELOC
(
boot_cpuid
)
=
_prom
->
cpu
;
...
...
arch/ppc64/kernel/setup.c
View file @
2549eb55
...
...
@@ -194,7 +194,7 @@ void setup_system(unsigned long r3, unsigned long r4, unsigned long r5,
printk
(
"naca->pftSize = 0x%lx
\n
"
,
naca
->
pftSize
);
printk
(
"naca->debug_switch = 0x%lx
\n
"
,
naca
->
debug_switch
);
printk
(
"naca->interrupt_controller = 0x%ld
\n
"
,
naca
->
interrupt_controller
);
printk
(
"systemcf = 0x%p
\n
"
,
systemcfg
);
printk
(
"systemcf
g
= 0x%p
\n
"
,
systemcfg
);
printk
(
"systemcfg->processorCount = 0x%lx
\n
"
,
systemcfg
->
processorCount
);
printk
(
"systemcfg->physicalMemorySize = 0x%lx
\n
"
,
systemcfg
->
physicalMemorySize
);
printk
(
"systemcfg->dCacheL1LineSize = 0x%x
\n
"
,
systemcfg
->
dCacheL1LineSize
);
...
...
@@ -256,7 +256,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
return
0
;
}
if
(
!
(
cpu_online_map
&
(
1
<<
cpu_id
)))
if
(
!
(
cpu_online_map
&
(
1
UL
<<
cpu_id
)))
return
0
;
#ifdef CONFIG_SMP
...
...
@@ -584,7 +584,7 @@ int set_spread_lpevents( char * str )
/* The parameter is the number of processors to share in processing lp events */
unsigned
long
i
;
unsigned
long
val
=
simple_strtoul
(
str
,
NULL
,
0
);
if
(
(
val
>
0
)
&&
(
val
<=
MAX_PACA
S
)
)
{
if
(
(
val
>
0
)
&&
(
val
<=
NR_CPU
S
)
)
{
for
(
i
=
1
;
i
<
val
;
++
i
)
paca
[
i
].
lpQueuePtr
=
paca
[
0
].
lpQueuePtr
;
printk
(
"lpevent processing spread over %ld processors
\n
"
,
val
);
...
...
arch/ppc64/kernel/signal.c
View file @
2549eb55
...
...
@@ -69,13 +69,11 @@ struct rt_sigframe {
};
extern
int
do_signal
(
sigset_t
*
oldset
,
struct
pt_regs
*
regs
);
/*
* Atomically swap in the new signal mask, and wait for a signal.
*/
long
sys_rt_sigsuspend
(
sigset_t
*
unewset
,
size_t
sigsetsize
,
int
p3
,
int
p4
,
int
p6
,
int
p7
,
struct
pt_regs
*
regs
)
long
sys_rt_sigsuspend
(
sigset_t
*
unewset
,
size_t
sigsetsize
,
int
p3
,
int
p4
,
int
p6
,
int
p7
,
struct
pt_regs
*
regs
)
{
sigset_t
saveset
,
newset
;
...
...
@@ -390,8 +388,6 @@ syscall_restart(struct pt_regs *regs, struct k_sigaction *ka)
* want to handle. Thus you cannot kill init even with a SIGKILL even by
* mistake.
*/
extern
int
do_signal32
(
sigset_t
*
oldset
,
struct
pt_regs
*
regs
);
int
do_signal
(
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
{
siginfo_t
info
;
...
...
arch/ppc64/kernel/signal32.c
View file @
2549eb55
...
...
@@ -563,10 +563,6 @@ long sys32_rt_sigaction(int sig, const struct sigaction32 *act,
return
ret
;
}
extern
long
sys_rt_sigprocmask
(
int
how
,
sigset_t
*
set
,
sigset_t
*
oset
,
size_t
sigsetsize
);
/*
* Note: it is necessary to treat how as an unsigned int, with the
* corresponding cast to a signed int to insure that the proper
...
...
@@ -613,10 +609,6 @@ long sys32_rt_sigprocmask(u32 how, compat_sigset_t *set,
return
0
;
}
extern
long
sys_rt_sigpending
(
sigset_t
*
set
,
size_t
sigsetsize
);
long
sys32_rt_sigpending
(
compat_sigset_t
*
set
,
compat_size_t
sigsetsize
)
{
sigset_t
s
;
...
...
@@ -683,11 +675,6 @@ static int copy_siginfo_to_user32(siginfo_t32 *d, siginfo_t *s)
return
err
;
}
extern
long
sys_rt_sigtimedwait
(
const
sigset_t
*
uthese
,
siginfo_t
*
uinfo
,
const
struct
timespec
*
uts
,
size_t
sigsetsize
);
long
sys32_rt_sigtimedwait
(
compat_sigset_t
*
uthese
,
siginfo_t32
*
uinfo
,
struct
compat_timespec
*
uts
,
compat_size_t
sigsetsize
)
{
...
...
@@ -758,9 +745,6 @@ static siginfo_t * siginfo32to64(siginfo_t *d, siginfo_t32 *s)
return
d
;
}
extern
long
sys_rt_sigqueueinfo
(
int
pid
,
int
sig
,
siginfo_t
*
uinfo
);
/*
* Note: it is necessary to treat pid and sig as unsigned ints, with the
* corresponding cast to a signed int to insure that the proper conversion
...
...
@@ -786,8 +770,6 @@ long sys32_rt_sigqueueinfo(u32 pid, u32 sig, siginfo_t32 *uinfo)
return
ret
;
}
extern
int
do_signal
(
sigset_t
*
oldset
,
struct
pt_regs
*
regs
);
int
sys32_rt_sigsuspend
(
compat_sigset_t
*
unewset
,
size_t
sigsetsize
,
int
p3
,
int
p4
,
int
p6
,
int
p7
,
struct
pt_regs
*
regs
)
{
...
...
arch/ppc64/kernel/smp.c
View file @
2549eb55
...
...
@@ -113,7 +113,7 @@ static int smp_iSeries_numProcs(void)
struct
ItLpPaca
*
lpPaca
;
np
=
0
;
for
(
i
=
0
;
i
<
MAX_PACA
S
;
++
i
)
{
for
(
i
=
0
;
i
<
NR_CPU
S
;
++
i
)
{
lpPaca
=
paca
[
i
].
xLpPacaPtr
;
if
(
lpPaca
->
xDynProcStatus
<
2
)
{
++
np
;
...
...
@@ -128,7 +128,7 @@ static int smp_iSeries_probe(void)
unsigned
np
=
0
;
struct
ItLpPaca
*
lpPaca
;
for
(
i
=
0
;
i
<
MAX_PACA
S
;
++
i
)
{
for
(
i
=
0
;
i
<
NR_CPU
S
;
++
i
)
{
lpPaca
=
paca
[
i
].
xLpPacaPtr
;
if
(
lpPaca
->
xDynProcStatus
<
2
)
{
paca
[
i
].
active
=
1
;
...
...
@@ -144,7 +144,7 @@ static void smp_iSeries_kick_cpu(int nr)
struct
ItLpPaca
*
lpPaca
;
/* Verify we have a Paca for processor nr */
if
(
(
nr
<=
0
)
||
(
nr
>=
MAX_PACA
S
)
)
(
nr
>=
NR_CPU
S
)
)
return
;
/* Verify that our partition has a processor nr */
lpPaca
=
paca
[
nr
].
xLpPacaPtr
;
...
...
@@ -228,7 +228,7 @@ smp_kick_cpu(int nr)
{
/* Verify we have a Paca for processor nr */
if
(
(
nr
<=
0
)
||
(
nr
>=
MAX_PACA
S
)
)
(
nr
>=
NR_CPU
S
)
)
return
;
/* The information for processor bringup must
...
...
arch/ppc64/kernel/stab.c
View file @
2549eb55
...
...
@@ -23,7 +23,8 @@
#include <asm/pmc.h>
int
make_ste
(
unsigned
long
stab
,
unsigned
long
esid
,
unsigned
long
vsid
);
void
make_slbe
(
unsigned
long
esid
,
unsigned
long
vsid
,
int
large
);
void
make_slbe
(
unsigned
long
esid
,
unsigned
long
vsid
,
int
large
,
int
kernel_segment
);
/*
* Build an entry for the base kernel segment and put it into
...
...
@@ -45,7 +46,8 @@ void stab_initialize(unsigned long stab)
asm
volatile
(
"isync"
:::
"memory"
);
asm
volatile
(
"slbmte %0,%0"
::
"r"
(
0
)
:
"memory"
);
asm
volatile
(
"isync; slbia; isync"
:::
"memory"
);
make_slbe
(
esid
,
vsid
,
0
);
make_slbe
(
esid
,
vsid
,
0
,
1
);
asm
volatile
(
"isync"
:::
"memory"
);
#endif
}
else
{
asm
volatile
(
"isync; slbia; isync"
:::
"memory"
);
...
...
@@ -139,10 +141,13 @@ int make_ste(unsigned long stab, unsigned long esid, unsigned long vsid)
/*
* Create a segment buffer entry for the given esid/vsid pair.
*
* NOTE: A context syncronising instruction is required before and after
* this, in the common case we use exception entry and rfid.
*/
void
make_slbe
(
unsigned
long
esid
,
unsigned
long
vsid
,
int
large
)
void
make_slbe
(
unsigned
long
esid
,
unsigned
long
vsid
,
int
large
,
int
kernel_segment
)
{
int
kernel_segment
=
0
;
unsigned
long
entry
,
castout_entry
;
union
{
unsigned
long
word0
;
...
...
@@ -153,42 +158,15 @@ void make_slbe(unsigned long esid, unsigned long vsid, int large)
slb_dword1
data
;
}
vsid_data
;
if
(
REGION_ID
(
esid
<<
SID_SHIFT
)
>=
KERNEL_REGION_ID
)
kernel_segment
=
1
;
/*
* Find an empty entry, if one exists.
* Find an empty entry, if one exists. Must start at 0 because
* we use this code to load SLB entry 0 at boot.
*/
for
(
entry
=
0
;
entry
<
naca
->
slb_size
;
entry
++
)
{
asm
volatile
(
"slbmfee %0,%1"
:
"=r"
(
esid_data
)
:
"r"
(
entry
));
if
(
!
esid_data
.
data
.
v
)
{
/*
* Write the new SLB entry.
*/
vsid_data
.
word0
=
0
;
vsid_data
.
data
.
vsid
=
vsid
;
vsid_data
.
data
.
kp
=
1
;
if
(
large
)
vsid_data
.
data
.
l
=
1
;
if
(
kernel_segment
)
vsid_data
.
data
.
c
=
1
;
esid_data
.
word0
=
0
;
esid_data
.
data
.
esid
=
esid
;
esid_data
.
data
.
v
=
1
;
esid_data
.
data
.
index
=
entry
;
/* slbie not needed as no previous mapping existed. */
/* Order update */
asm
volatile
(
"isync"
:
:
:
"memory"
);
asm
volatile
(
"slbmte %0,%1"
:
:
"r"
(
vsid_data
),
"r"
(
esid_data
));
/* Order update */
asm
volatile
(
"isync"
:
:
:
"memory"
);
return
;
}
if
(
!
esid_data
.
data
.
v
)
goto
write_entry
;
}
/*
...
...
@@ -211,13 +189,13 @@ void make_slbe(unsigned long esid, unsigned long vsid, int large)
if
(
castout_entry
>=
naca
->
slb_size
)
castout_entry
=
1
;
asm
volatile
(
"slbmfee %0,%1"
:
"=r"
(
esid_data
)
:
"r"
(
entry
));
}
while
(
esid_data
.
data
.
esid
==
GET_ESID
((
unsigned
long
)
_get_SP
())
&&
esid_data
.
data
.
v
);
}
while
(
esid_data
.
data
.
esid
==
GET_ESID
((
unsigned
long
)
_get_SP
()));
get_paca
()
->
xStab_data
.
next_round_robin
=
castout_entry
;
/* slbie not needed as the previous mapping is still valid. */
write_entry:
/*
* Write the new SLB entry.
*/
...
...
@@ -234,10 +212,11 @@ void make_slbe(unsigned long esid, unsigned long vsid, int large)
esid_data
.
data
.
v
=
1
;
esid_data
.
data
.
index
=
entry
;
asm
volatile
(
"isync"
:
:
:
"memory"
);
/* Order update */
asm
volatile
(
"slbmte %0,%1"
:
:
"r"
(
vsid_data
),
"r"
(
esid_data
));
asm
volatile
(
"isync"
:
:
:
"memory"
);
/* Order update */
/*
* No need for an isync before or after this slbmte. The exception
* we enter with and the rfid we exit with are context synchronizing.
*/
asm
volatile
(
"slbmte %0,%1"
:
:
"r"
(
vsid_data
),
"r"
(
esid_data
));
}
static
inline
void
__ste_allocate
(
unsigned
long
esid
,
unsigned
long
vsid
,
...
...
@@ -246,10 +225,10 @@ static inline void __ste_allocate(unsigned long esid, unsigned long vsid,
if
(
cpu_has_slb
())
{
#ifndef CONFIG_PPC_ISERIES
if
(
REGION_ID
(
esid
<<
SID_SHIFT
)
==
KERNEL_REGION_ID
)
make_slbe
(
esid
,
vsid
,
1
);
make_slbe
(
esid
,
vsid
,
1
,
kernel_segment
);
else
#endif
make_slbe
(
esid
,
vsid
,
0
);
make_slbe
(
esid
,
vsid
,
0
,
kernel_segment
);
}
else
{
unsigned
char
top_entry
,
stab_entry
,
*
segments
;
...
...
arch/ppc64/kernel/syscalls.c
View file @
2549eb55
...
...
@@ -50,11 +50,6 @@ check_bugs(void)
{
}
int
sys_ioperm
(
unsigned
long
from
,
unsigned
long
num
,
int
on
)
{
return
-
EIO
;
}
/*
* sys_ipc() is the de-multiplexer for the SysV IPC calls..
*
...
...
arch/ppc64/kernel/traps.c
View file @
2549eb55
...
...
@@ -349,9 +349,8 @@ ProgramCheckException(struct pt_regs *regs)
void
KernelFPUnavailableException
(
struct
pt_regs
*
regs
)
{
printk
(
"Illegal floating point used in kernel "
"(task=0x%p, pc=0x%016lx, trap=0x%08lx)
\n
"
,
current
,
regs
->
nip
,
regs
->
trap
);
printk
(
"Illegal floating point used in kernel (task=0x%p, "
"pc=0x%016lx, trap=0x%lx)
\n
"
,
current
,
regs
->
nip
,
regs
->
trap
);
panic
(
"Unrecoverable FP Unavailable Exception in Kernel"
);
}
...
...
include/asm-ppc64/elf.h
View file @
2549eb55
...
...
@@ -98,17 +98,38 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
#define ELF_ET_DYN_BASE (0x08000000)
/* Common routine for both 32-bit and 64-bit processes */
#define ELF_CORE_COPY_REGS(gregs, regs) ppc64_elf_core_copy_regs(gregs, regs);
static
inline
void
ppc64_elf_core_copy_regs
(
elf_gregset_t
dstRegs
,
struct
pt_regs
*
srcRegs
)
static
inline
void
ppc64_elf_core_copy_regs
(
elf_gregset_t
elf_regs
,
struct
pt_regs
*
regs
)
{
int
i
;
int
gprs
=
sizeof
(
struct
pt_regs
)
/
sizeof
(
elf_greg_t64
);
int
numGPRS
=
((
sizeof
(
struct
pt_regs
)
/
sizeof
(
elf_greg_t64
))
<
ELF_NGREG
)
?
(
sizeof
(
struct
pt_regs
)
/
sizeof
(
elf_greg_t64
))
:
ELF_NGREG
;
if
(
gprs
>
ELF_NGREG
)
gprs
=
ELF_NGREG
;
for
(
i
=
0
;
i
<
numGPRS
;
i
++
)
dstRegs
[
i
]
=
(
elf_greg_t
)((
elf_greg_t64
*
)
srcR
egs
)[
i
];
for
(
i
=
0
;
i
<
gprs
;
i
++
)
elf_regs
[
i
]
=
(
elf_greg_t
)((
elf_greg_t64
*
)
r
egs
)[
i
];
}
#define ELF_CORE_COPY_REGS(gregs, regs) ppc64_elf_core_copy_regs(gregs, regs);
static
inline
int
dump_task_regs
(
struct
task_struct
*
tsk
,
elf_gregset_t
*
elf_regs
)
{
struct
pt_regs
*
regs
=
tsk
->
thread
.
regs
;
if
(
regs
)
ppc64_elf_core_copy_regs
(
*
elf_regs
,
regs
);
return
1
;
}
#define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs)
extern
int
dump_task_fpu
(
struct
task_struct
*
,
elf_fpregset_t
*
);
#define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs)
#ifdef CONFIG_SMP
extern
void
dump_smp_unlazy_fpu
(
void
);
#define ELF_CORE_SYNC dump_smp_unlazy_fpu
#endif
/* This yields a mask that user programs can use to figure out what
instruction set this cpu supports. This could be done in userspace,
...
...
include/asm-ppc64/paca.h
View file @
2549eb55
...
...
@@ -33,17 +33,6 @@
#include <asm/mmu.h>
#include <asm/processor.h>
/* A paca entry is required for each logical processor. On systems
* that support hardware multi-threading, this is equal to twice the
* number of physical processors. On LPAR systems, we are required
* to have space for the maximum number of logical processors we
* could ever possibly have. Currently, we are limited to allocating
* 24 processors to a partition which gives 48 logical processors on
* an HMT box. Therefore, we reserve this many paca entries.
*/
#define MAX_PROCESSORS 24
#define MAX_PACAS MAX_PROCESSORS * 2
extern
struct
paca_struct
paca
[];
register
struct
paca_struct
*
local_paca
asm
(
"r13"
);
#define get_paca() local_paca
...
...
include/asm-ppc64/pci-bridge.h
View file @
2549eb55
...
...
@@ -77,7 +77,7 @@ struct device_node *fetch_dev_dn(struct pci_dev *dev);
static
inline
struct
device_node
*
pci_device_to_OF_node
(
struct
pci_dev
*
dev
)
{
struct
device_node
*
dn
=
(
struct
device_node
*
)(
dev
->
sysdata
);
if
(
dn
->
devfn
==
dev
->
devfn
&&
dn
->
busno
==
dev
->
bus
->
number
)
if
(
dn
->
devfn
==
dev
->
devfn
&&
dn
->
busno
==
(
dev
->
bus
->
number
&
0xff
)
)
return
dn
;
/* fast path. sysdata is good */
else
return
fetch_dev_dn
(
dev
);
...
...
include/asm-ppc64/signal.h
View file @
2549eb55
...
...
@@ -2,6 +2,7 @@
#define _ASMPPC64_SIGNAL_H
#include <linux/types.h>
#include <asm/siginfo.h>
/* Avoid too many header ordering problems. */
struct
siginfo
;
...
...
@@ -72,19 +73,19 @@ typedef struct {
* SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
* Unix names RESETHAND and NODEFER respectively.
*/
#define SA_NOCLDSTOP 0x00000001
#define SA_NOCLDWAIT 0x00000002
#define SA_SIGINFO 0x00000004
#define SA_ONSTACK 0x08000000
#define SA_RESTART 0x10000000
#define SA_NODEFER 0x40000000
#define SA_RESETHAND 0x80000000
#define SA_NOCLDSTOP 0x00000001
u
#define SA_NOCLDWAIT 0x00000002
u
#define SA_SIGINFO 0x00000004
u
#define SA_ONSTACK 0x08000000
u
#define SA_RESTART 0x10000000
u
#define SA_NODEFER 0x40000000
u
#define SA_RESETHAND 0x80000000
u
#define SA_NOMASK SA_NODEFER
#define SA_ONESHOT SA_RESETHAND
#define SA_INTERRUPT 0x20000000
/* dummy -- ignored */
#define SA_INTERRUPT 0x20000000
u
/* dummy -- ignored */
#define SA_RESTORER 0x04000000
#define SA_RESTORER 0x04000000
u
/*
* sigaltstack controls
...
...
@@ -143,6 +144,16 @@ typedef struct sigaltstack {
size_t
ss_size
;
}
stack_t
;
struct
pt_regs
;
struct
timespec
;
extern
int
do_signal
(
sigset_t
*
oldset
,
struct
pt_regs
*
regs
);
extern
int
do_signal32
(
sigset_t
*
oldset
,
struct
pt_regs
*
regs
);
extern
long
sys_rt_sigprocmask
(
int
how
,
sigset_t
*
set
,
sigset_t
*
oset
,
size_t
sigsetsize
);
extern
long
sys_rt_sigpending
(
sigset_t
*
set
,
size_t
sigsetsize
);
extern
long
sys_rt_sigtimedwait
(
const
sigset_t
*
uthese
,
siginfo_t
*
uinfo
,
const
struct
timespec
*
uts
,
size_t
sigsetsize
);
extern
long
sys_rt_sigqueueinfo
(
int
pid
,
int
sig
,
siginfo_t
*
uinfo
);
#define ptrace_signal_deliver(regs, cookie) do { } while (0)
struct
pt_regs
;
...
...
include/asm-ppc64/system.h
View file @
2549eb55
...
...
@@ -83,6 +83,7 @@ extern void show_regs(struct pt_regs * regs);
extern
void
flush_instruction_cache
(
void
);
extern
int
_get_PVR
(
void
);
extern
void
giveup_fpu
(
struct
task_struct
*
);
extern
void
disable_kernel_fp
(
void
);
extern
void
enable_kernel_fp
(
void
);
extern
void
cvt_fd
(
float
*
from
,
double
*
to
,
unsigned
long
*
fpscr
);
extern
void
cvt_df
(
double
*
from
,
float
*
to
,
unsigned
long
*
fpscr
);
...
...
include/asm-ppc64/uaccess.h
View file @
2549eb55
...
...
@@ -206,6 +206,7 @@ copy_from_user(void *to, const void *from, unsigned long n)
return
__copy_tofrom_user
(
to
,
from
,
n
);
if
((
unsigned
long
)
from
<
TASK_SIZE
)
{
over
=
(
unsigned
long
)
from
+
n
-
TASK_SIZE
;
memset
(
to
+
over
,
0
,
over
);
return
__copy_tofrom_user
(
to
,
from
,
n
-
over
)
+
over
;
}
return
n
;
...
...
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