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
18a65429
Commit
18a65429
authored
Jul 16, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://ppc.bkbits.net/for-linus-ppc
into home.osdl.org:/home/torvalds/v2.5/linux
parents
300e6521
7c35666d
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
120 additions
and
178 deletions
+120
-178
arch/ppc/kernel/irq.c
arch/ppc/kernel/irq.c
+1
-2
arch/ppc/kernel/misc.S
arch/ppc/kernel/misc.S
+5
-0
arch/ppc/kernel/syscalls.c
arch/ppc/kernel/syscalls.c
+7
-5
arch/ppc/kernel/time.c
arch/ppc/kernel/time.c
+1
-1
arch/ppc/platforms/pmac_cpufreq.c
arch/ppc/platforms/pmac_cpufreq.c
+1
-1
include/asm-ppc/hardirq.h
include/asm-ppc/hardirq.h
+0
-2
include/asm-ppc/ipc.h
include/asm-ppc/ipc.h
+1
-0
include/asm-ppc/pci.h
include/asm-ppc/pci.h
+23
-26
include/asm-ppc/processor.h
include/asm-ppc/processor.h
+1
-0
include/asm-ppc/uaccess.h
include/asm-ppc/uaccess.h
+12
-8
include/asm-ppc/unistd.h
include/asm-ppc/unistd.h
+68
-133
No files found.
arch/ppc/kernel/irq.c
View file @
18a65429
...
...
@@ -420,10 +420,9 @@ void ppc_irq_dispatch_handler(struct pt_regs *regs, int irq)
{
int
status
;
struct
irqaction
*
action
;
int
cpu
=
smp_processor_id
();
irq_desc_t
*
desc
=
irq_desc
+
irq
;
kstat_
cpu
(
cpu
)
.
irqs
[
irq
]
++
;
kstat_
this_cpu
.
irqs
[
irq
]
++
;
spin_lock
(
&
desc
->
lock
);
ack_irq
(
irq
);
/*
...
...
arch/ppc/kernel/misc.S
View file @
18a65429
...
...
@@ -1375,3 +1375,8 @@ _GLOBAL(sys_call_table)
.
long
sys_clock_gettime
.
long
sys_clock_getres
.
long
sys_clock_nanosleep
.
long
sys_ni_syscall
/*
reserved
for
swapcontext
*/
.
long
sys_tgkill
/*
250
*/
.
long
sys_utimes
.
long
sys_statfs64
.
long
sys_fstatfs64
arch/ppc/kernel/syscalls.c
View file @
18a65429
...
...
@@ -20,7 +20,6 @@
*
*/
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/mm.h>
...
...
@@ -59,10 +58,15 @@ sys_ipc (uint call, int first, int second, int third, void __user *ptr, long fif
version
=
call
>>
16
;
/* hack for backward compatibility */
call
&=
0xffff
;
ret
=
-
E
INVAL
;
ret
=
-
E
NOSYS
;
switch
(
call
)
{
case
SEMOP
:
ret
=
sys_semop
(
first
,
(
struct
sembuf
__user
*
)
ptr
,
second
);
ret
=
sys_semtimedop
(
first
,
(
struct
sembuf
__user
*
)
ptr
,
second
,
NULL
);
break
;
case
SEMTIMEDOP
:
ret
=
sys_semtimedop
(
first
,
(
struct
sembuf
__user
*
)
ptr
,
second
,
(
const
struct
timespec
*
)
fifth
);
break
;
case
SEMGET
:
ret
=
sys_semget
(
first
,
second
,
third
);
...
...
@@ -258,6 +262,4 @@ int sys_olduname(struct oldold_utsname __user * name)
return
error
;
}
cond_syscall
(
sys_pciconfig_read
);
cond_syscall
(
sys_pciconfig_write
);
cond_syscall
(
sys_pciconfig_iobase
);
arch/ppc/kernel/time.c
View file @
18a65429
...
...
@@ -244,7 +244,7 @@ int do_settimeofday(struct timespec *tv)
time_t
wtm_sec
,
new_sec
=
tv
->
tv_sec
;
long
wtm_nsec
,
new_nsec
=
tv
->
tv_nsec
;
unsigned
long
flags
;
int
tb_delta
,
new_nsec
,
new_sec
;
int
tb_delta
;
if
((
unsigned
long
)
tv
->
tv_nsec
>=
NSEC_PER_SEC
)
return
-
EINVAL
;
...
...
arch/ppc/platforms/pmac_cpufreq.c
View file @
18a65429
...
...
@@ -176,7 +176,7 @@ do_set_cpu_speed(int speed_mode)
freqs
.
old
=
cur_freq
;
freqs
.
new
=
(
speed_mode
==
PMAC_CPU_HIGH_SPEED
)
?
hi_freq
:
low_freq
;
freqs
.
cpu
=
CPUFREQ_ALL_CPUS
;
freqs
.
cpu
=
smp_processor_id
()
;
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_PRECHANGE
);
if
(
cpufreq_uses_pmu
)
...
...
include/asm-ppc/hardirq.h
View file @
18a65429
...
...
@@ -14,8 +14,6 @@
*/
typedef
struct
{
unsigned
long
__softirq_pending
;
/* set_bit is used on this */
unsigned
int
__syscall_count
;
struct
task_struct
*
__ksoftirqd_task
;
unsigned
int
__last_jiffy_stamp
;
}
____cacheline_aligned
irq_cpustat_t
;
...
...
include/asm-ppc/ipc.h
View file @
18a65429
...
...
@@ -14,6 +14,7 @@ struct ipc_kludge {
#define SEMOP 1
#define SEMGET 2
#define SEMCTL 3
#define SEMTIMEDOP 4
#define MSGSND 11
#define MSGRCV 12
#define MSGGET 13
...
...
include/asm-ppc/pci.h
View file @
18a65429
...
...
@@ -53,18 +53,12 @@ extern unsigned long phys_to_bus(unsigned long pa);
extern
unsigned
long
pci_phys_to_bus
(
unsigned
long
pa
,
int
busnr
);
extern
unsigned
long
pci_bus_to_phys
(
unsigned
int
ba
,
int
busnr
);
/* Dynamic DMA Mapping stuff, stolen from i386
* ++ajoshi
/*
* Dynamic DMA Mapping stuff
* Originally stolen from i386 by ajoshi and updated by paulus
* Non-consistent cache support by Dan Malek
*/
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <asm/scatterlist.h>
#include <asm/io.h>
struct
pci_dev
;
/* The PCI address space does equal the physical memory
* address space. The networking and block device layers use
* this boolean for bounce buffer decisions.
...
...
@@ -101,8 +95,7 @@ extern void pci_free_consistent(struct pci_dev *hwdev, size_t size,
static
inline
dma_addr_t
pci_map_single
(
struct
pci_dev
*
hwdev
,
void
*
ptr
,
size_t
size
,
int
direction
)
{
if
(
direction
==
PCI_DMA_NONE
)
BUG
();
BUG_ON
(
direction
==
PCI_DMA_NONE
);
consistent_sync
(
ptr
,
size
,
direction
);
...
...
@@ -130,10 +123,11 @@ static inline void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
* to pci_map_single, but takes a struct page instead of a virtual address
*/
static
inline
dma_addr_t
pci_map_page
(
struct
pci_dev
*
hwdev
,
struct
page
*
page
,
unsigned
long
offset
,
size_t
size
,
int
direction
)
unsigned
long
offset
,
size_t
size
,
int
direction
)
{
if
(
direction
==
PCI_DMA_NONE
)
BUG
(
);
BUG_ON
(
direction
==
PCI_DMA_NONE
);
consistent_sync_page
(
page
,
offset
,
size
,
direction
);
return
(
page
-
mem_map
)
*
PAGE_SIZE
+
PCI_DRAM_OFFSET
+
offset
;
}
...
...
@@ -171,10 +165,11 @@ static inline int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
/*
* temporary 2.4 hack
*/
for
(
i
=
0
;
i
<
nents
;
i
++
)
{
if
(
!
sg
[
i
].
page
)
BUG
();
sg
[
i
].
dma_address
=
page_to_bus
(
sg
[
i
].
page
)
+
sg
[
i
].
offset
;
for
(
i
=
0
;
i
<
nents
;
i
++
,
sg
++
)
{
BUG_ON
(
!
sg
->
page
);
consistent_sync_page
(
sg
->
page
,
sg
->
offset
,
sg
->
length
,
direction
);
sg
->
dma_address
=
page_to_bus
(
sg
->
page
)
+
sg
->
offset
;
}
return
nents
;
...
...
@@ -187,8 +182,7 @@ static inline int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
static
inline
void
pci_unmap_sg
(
struct
pci_dev
*
hwdev
,
struct
scatterlist
*
sg
,
int
nents
,
int
direction
)
{
if
(
direction
==
PCI_DMA_NONE
)
BUG
();
BUG_ON
(
direction
==
PCI_DMA_NONE
);
/* nothing to do */
}
...
...
@@ -205,8 +199,7 @@ static inline void pci_dma_sync_single(struct pci_dev *hwdev,
dma_addr_t
dma_handle
,
size_t
size
,
int
direction
)
{
if
(
direction
==
PCI_DMA_NONE
)
BUG
();
BUG_ON
(
direction
==
PCI_DMA_NONE
);
consistent_sync
(
bus_to_virt
(
dma_handle
),
size
,
direction
);
}
...
...
@@ -221,9 +214,13 @@ static inline void pci_dma_sync_sg(struct pci_dev *hwdev,
struct
scatterlist
*
sg
,
int
nelems
,
int
direction
)
{
if
(
direction
==
PCI_DMA_NONE
)
BUG
();
/* nothing to do */
int
i
;
BUG_ON
(
direction
==
PCI_DMA_NONE
);
for
(
i
=
0
;
i
<
nelems
;
i
++
,
sg
++
)
consistent_sync_page
(
sg
->
page
,
sg
->
offset
,
sg
->
length
,
direction
);
}
/* Return whether the given PCI device DMA address mask can
...
...
include/asm-ppc/processor.h
View file @
18a65429
...
...
@@ -705,6 +705,7 @@ struct thread_struct {
.ksp = INIT_SP, \
.fs = KERNEL_DS, \
.pgdir = swapper_pg_dir, \
.fpexc_mode = MSR_FE0 | MSR_FE1, \
}
/*
...
...
include/asm-ppc/uaccess.h
View file @
18a65429
...
...
@@ -16,10 +16,13 @@
* get_fs() == KERNEL_DS, checking is bypassed.
*
* For historical reasons, these macros are grossly misnamed.
*
* The fs/ds values are now the highest legal address in the "segment".
* This simplifies the checking in the routines below.
*/
#define KERNEL_DS ((mm_segment_t) {
0
})
#define USER_DS ((mm_segment_t) { 1 })
#define KERNEL_DS ((mm_segment_t) {
~0UL
})
#define USER_DS ((mm_segment_t) {
TASK_SIZE -
1 })
#define get_ds() (KERNEL_DS)
#define get_fs() (current->thread.fs)
...
...
@@ -27,14 +30,15 @@
#define segment_eq(a,b) ((a).seg == (b).seg)
#define __kernel_ok (segment_eq(get_fs(), KERNEL_DS))
#define __user_ok(addr,size) (((size) <= TASK_SIZE)&&((addr) <= TASK_SIZE-(size)))
#define __access_ok(addr,size) (__kernel_ok || __user_ok((addr),(size)))
#define access_ok(type,addr,size) __access_ok((unsigned long)(addr),(size))
#define __access_ok(addr,size) \
((addr) <= current->thread.fs.seg \
&& ((size) == 0 || (size) - 1 <= current->thread.fs.seg - (addr)))
#define access_ok(type, addr, size) __access_ok((unsigned long)(addr),(size))
extern
inline
int
verify_area
(
int
type
,
const
void
__user
*
addr
,
unsigned
long
size
)
{
return
access_ok
(
type
,
addr
,
size
)
?
0
:
-
EFAULT
;
return
access_ok
(
type
,
addr
,
size
)
?
0
:
-
EFAULT
;
}
...
...
@@ -303,7 +307,7 @@ extern int __strnlen_user(const char __user *str, long len, unsigned long top);
*/
extern
__inline__
int
strnlen_user
(
const
char
__user
*
str
,
long
len
)
{
unsigned
long
top
=
__kernel_ok
?
~
0UL
:
TASK_SIZE
-
1
;
unsigned
long
top
=
current
->
thread
.
fs
.
seg
;
if
((
unsigned
long
)
str
>
top
)
return
0
;
...
...
include/asm-ppc/unistd.h
View file @
18a65429
...
...
@@ -253,177 +253,112 @@
#define __NR_clock_gettime 246
#define __NR_clock_getres 247
#define __NR_clock_nanosleep 248
#define __NR_swapcontext 249
#define __NR_tgkill 250
#define __NR_utimes 251
#define __NR_statfs64 252
#define __NR_fstatfs64 253
#define __NR_syscalls 2
49
#define __NR_syscalls 2
54
#define __NR(n) #n
#define __syscall_return(type) \
return (__sc_err & 0x10000000 ? errno = __sc_ret, __sc_ret = -1 : 0), \
(type) __sc_ret
#define __syscall_clobbers \
"r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
/* On powerpc a system call basically clobbers the same registers like a
* function call, with the exception of LR (which is needed for the
* "sc; bnslr" sequence) and CR (where only CR0.SO is clobbered to signal
* an error return status).
*/
#define _syscall0(type,name) \
type name(void) \
{ \
#define __syscall_nr(nr, type, name, args...) \
unsigned long __sc_ret, __sc_err; \
{ \
register unsigned long __sc_0 __asm__ ("r0"); \
register unsigned long __sc_3 __asm__ ("r3"); \
register unsigned long __sc_0 __asm__ ("r0"); \
register unsigned long __sc_3 __asm__ ("r3"); \
register unsigned long __sc_4 __asm__ ("r4"); \
register unsigned long __sc_5 __asm__ ("r5"); \
register unsigned long __sc_6 __asm__ ("r6"); \
register unsigned long __sc_7 __asm__ ("r7"); \
\
__sc_
0 = __NR_##name;
\
__sc_
loadargs_##nr(name, args);
\
__asm__ __volatile__ \
("sc \n\t" \
"mfcr %1 " \
: "=&r" (__sc_3), "=&r" (__sc_0) \
: "0" (__sc_3), "1" (__sc_0) \
: __syscall_clobbers); \
"mfcr %0 " \
: "=&r" (__sc_0), \
"=&r" (__sc_3), "=&r" (__sc_4), \
"=&r" (__sc_5), "=&r" (__sc_6), \
"=&r" (__sc_7) \
: __sc_asm_input_##nr \
: "cr0", "ctr", "memory", \
"r8", "r9", "r10","r11", "r12"); \
__sc_ret = __sc_3; \
__sc_err = __sc_0; \
} \
__syscall_return (type); \
if (__sc_err & 0x10000000) \
{ \
errno = __sc_ret; \
__sc_ret = -1; \
} \
return (type) __sc_ret
#define __sc_loadargs_0(name, dummy...) \
__sc_0 = __NR_##name
#define __sc_loadargs_1(name, arg1) \
__sc_loadargs_0(name); \
__sc_3 = (unsigned long) (arg1)
#define __sc_loadargs_2(name, arg1, arg2) \
__sc_loadargs_1(name, arg1); \
__sc_4 = (unsigned long) (arg2)
#define __sc_loadargs_3(name, arg1, arg2, arg3) \
__sc_loadargs_2(name, arg1, arg2); \
__sc_5 = (unsigned long) (arg3)
#define __sc_loadargs_4(name, arg1, arg2, arg3, arg4) \
__sc_loadargs_3(name, arg1, arg2, arg3); \
__sc_6 = (unsigned long) (arg4)
#define __sc_loadargs_5(name, arg1, arg2, arg3, arg4, arg5) \
__sc_loadargs_4(name, arg1, arg2, arg3, arg4); \
__sc_7 = (unsigned long) (arg5)
#define __sc_asm_input_0 "0" (__sc_0)
#define __sc_asm_input_1 __sc_asm_input_0, "1" (__sc_3)
#define __sc_asm_input_2 __sc_asm_input_1, "2" (__sc_4)
#define __sc_asm_input_3 __sc_asm_input_2, "3" (__sc_5)
#define __sc_asm_input_4 __sc_asm_input_3, "4" (__sc_6)
#define __sc_asm_input_5 __sc_asm_input_4, "5" (__sc_7)
#define _syscall0(type,name) \
type name(void) \
{ \
__syscall_nr(0, type, name); \
}
#define _syscall1(type,name,type1,arg1) \
type name(type1 arg1) \
{ \
unsigned long __sc_ret, __sc_err; \
{ \
register unsigned long __sc_0 __asm__ ("r0"); \
register unsigned long __sc_3 __asm__ ("r3"); \
\
__sc_3 = (unsigned long) (arg1); \
__sc_0 = __NR_##name; \
__asm__ __volatile__ \
("sc \n\t" \
"mfcr %1 " \
: "=&r" (__sc_3), "=&r" (__sc_0) \
: "0" (__sc_3), "1" (__sc_0) \
: __syscall_clobbers); \
__sc_ret = __sc_3; \
__sc_err = __sc_0; \
} \
__syscall_return (type); \
__syscall_nr(1, type, name, arg1); \
}
#define _syscall2(type,name,type1,arg1,type2,arg2) \
type name(type1 arg1, type2 arg2) \
{ \
unsigned long __sc_ret, __sc_err; \
{ \
register unsigned long __sc_0 __asm__ ("r0"); \
register unsigned long __sc_3 __asm__ ("r3"); \
register unsigned long __sc_4 __asm__ ("r4"); \
\
__sc_3 = (unsigned long) (arg1); \
__sc_4 = (unsigned long) (arg2); \
__sc_0 = __NR_##name; \
__asm__ __volatile__ \
("sc \n\t" \
"mfcr %1 " \
: "=&r" (__sc_3), "=&r" (__sc_0) \
: "0" (__sc_3), "1" (__sc_0), \
"r" (__sc_4) \
: __syscall_clobbers); \
__sc_ret = __sc_3; \
__sc_err = __sc_0; \
} \
__syscall_return (type); \
__syscall_nr(2, type, name, arg1, arg2); \
}
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
type name(type1 arg1, type2 arg2, type3 arg3) \
{ \
unsigned long __sc_ret, __sc_err; \
{ \
register unsigned long __sc_0 __asm__ ("r0"); \
register unsigned long __sc_3 __asm__ ("r3"); \
register unsigned long __sc_4 __asm__ ("r4"); \
register unsigned long __sc_5 __asm__ ("r5"); \
\
__sc_3 = (unsigned long) (arg1); \
__sc_4 = (unsigned long) (arg2); \
__sc_5 = (unsigned long) (arg3); \
__sc_0 = __NR_##name; \
__asm__ __volatile__ \
("sc \n\t" \
"mfcr %1 " \
: "=&r" (__sc_3), "=&r" (__sc_0) \
: "0" (__sc_3), "1" (__sc_0), \
"r" (__sc_4), \
"r" (__sc_5) \
: __syscall_clobbers); \
__sc_ret = __sc_3; \
__sc_err = __sc_0; \
} \
__syscall_return (type); \
__syscall_nr(3, type, name, arg1, arg2, arg3); \
}
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
{ \
unsigned long __sc_ret, __sc_err; \
{ \
register unsigned long __sc_0 __asm__ ("r0"); \
register unsigned long __sc_3 __asm__ ("r3"); \
register unsigned long __sc_4 __asm__ ("r4"); \
register unsigned long __sc_5 __asm__ ("r5"); \
register unsigned long __sc_6 __asm__ ("r6"); \
\
__sc_3 = (unsigned long) (arg1); \
__sc_4 = (unsigned long) (arg2); \
__sc_5 = (unsigned long) (arg3); \
__sc_6 = (unsigned long) (arg4); \
__sc_0 = __NR_##name; \
__asm__ __volatile__ \
("sc \n\t" \
"mfcr %1 " \
: "=&r" (__sc_3), "=&r" (__sc_0) \
: "0" (__sc_3), "1" (__sc_0), \
"r" (__sc_4), \
"r" (__sc_5), \
"r" (__sc_6) \
: __syscall_clobbers); \
__sc_ret = __sc_3; \
__sc_err = __sc_0; \
} \
__syscall_return (type); \
__syscall_nr(4, type, name, arg1, arg2, arg3, arg4); \
}
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
{ \
unsigned long __sc_ret, __sc_err; \
{ \
register unsigned long __sc_0 __asm__ ("r0"); \
register unsigned long __sc_3 __asm__ ("r3"); \
register unsigned long __sc_4 __asm__ ("r4"); \
register unsigned long __sc_5 __asm__ ("r5"); \
register unsigned long __sc_6 __asm__ ("r6"); \
register unsigned long __sc_7 __asm__ ("r7"); \
\
__sc_3 = (unsigned long) (arg1); \
__sc_4 = (unsigned long) (arg2); \
__sc_5 = (unsigned long) (arg3); \
__sc_6 = (unsigned long) (arg4); \
__sc_7 = (unsigned long) (arg5); \
__sc_0 = __NR_##name; \
__asm__ __volatile__ \
("sc \n\t" \
"mfcr %1 " \
: "=&r" (__sc_3), "=&r" (__sc_0) \
: "0" (__sc_3), "1" (__sc_0), \
"r" (__sc_4), \
"r" (__sc_5), \
"r" (__sc_6), \
"r" (__sc_7) \
: __syscall_clobbers); \
__sc_ret = __sc_3; \
__sc_err = __sc_0; \
} \
__syscall_return (type); \
__syscall_nr(5, type, name, arg1, arg2, arg3, arg4, arg5); \
}
#ifdef __KERNEL__
...
...
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