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
Kirill Smelkov
linux
Commits
170f6c8f
Commit
170f6c8f
authored
Dec 26, 2002
by
Jeff Dike
Browse files
Options
Browse Files
Download
Plain Diff
Merge jdike.wstearns.org:/home/jdike/linux/linus-2.5
into jdike.wstearns.org:/home/jdike/linux/updates-2.5
parents
5e32ae7e
72d22f13
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
67 additions
and
46 deletions
+67
-46
arch/um/Kconfig
arch/um/Kconfig
+1
-0
arch/um/drivers/line.c
arch/um/drivers/line.c
+1
-0
arch/um/kernel/process_kern.c
arch/um/kernel/process_kern.c
+1
-1
arch/um/kernel/signal_kern.c
arch/um/kernel/signal_kern.c
+8
-0
arch/um/kernel/sys_call_table.c
arch/um/kernel/sys_call_table.c
+10
-9
arch/um/kernel/syscall_kern.c
arch/um/kernel/syscall_kern.c
+8
-4
arch/um/kernel/sysrq.c
arch/um/kernel/sysrq.c
+4
-4
arch/um/sys-i386/Makefile
arch/um/sys-i386/Makefile
+15
-17
arch/um/uml.lds.S
arch/um/uml.lds.S
+11
-1
include/asm-um/pgtable.h
include/asm-um/pgtable.h
+3
-3
include/asm-um/thread_info.h
include/asm-um/thread_info.h
+4
-6
include/asm-um/uaccess.h
include/asm-um/uaccess.h
+1
-1
No files found.
arch/um/Kconfig
View file @
170f6c8f
...
...
@@ -128,6 +128,7 @@ source "net/Kconfig"
source "fs/Kconfig"
source "lib/Kconfig"
menu "SCSI support"
...
...
arch/um/drivers/line.c
View file @
170f6c8f
...
...
@@ -13,6 +13,7 @@
#include "line.h"
#include "kern.h"
#include "user_util.h"
#include "kern_util.h"
#include "os.h"
#define LINE_BUFSIZE 4096
...
...
arch/um/kernel/process_kern.c
View file @
170f6c8f
...
...
@@ -190,7 +190,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
current
->
thread
.
request
.
u
.
thread
.
proc
=
fn
;
current
->
thread
.
request
.
u
.
thread
.
arg
=
arg
;
p
=
do_fork
(
CLONE_VM
|
flags
,
0
,
NULL
,
0
,
NULL
);
p
=
do_fork
(
CLONE_VM
|
flags
,
0
,
NULL
,
0
,
NULL
,
NULL
);
if
(
IS_ERR
(
p
))
panic
(
"do_fork failed in kernel_thread"
);
return
(
p
->
pid
);
}
...
...
arch/um/kernel/signal_kern.c
View file @
170f6c8f
...
...
@@ -16,6 +16,7 @@
#include "linux/binfmts.h"
#include "asm/signal.h"
#include "asm/uaccess.h"
#include "asm/unistd.h"
#include "user_util.h"
#include "kern_util.h"
#include "signal_kern.h"
...
...
@@ -69,6 +70,9 @@ static int handle_signal(struct pt_regs *regs, unsigned long signr,
ret
=
0
;
switch
(
error
){
case
-
ERESTART_RESTARTBLOCK
:
current_thread_info
()
->
restart_block
.
fn
=
do_no_restart_syscall
;
case
-
ERESTARTNOHAND
:
ret
=
-
EINTR
;
break
;
...
...
@@ -160,6 +164,10 @@ static int kern_do_signal(struct pt_regs *regs, sigset_t *oldset, int error)
PT_REGS_ORIG_SYSCALL
(
regs
)
=
PT_REGS_SYSCALL_NR
(
regs
);
PT_REGS_RESTART_SYSCALL
(
regs
);
}
else
if
(
PT_REGS_SYSCALL_RET
(
regs
)
==
-
ERESTART_RESTARTBLOCK
){
PT_REGS_SYSCALL_RET
(
regs
)
=
__NR_restart_syscall
;
PT_REGS_RESTART_SYSCALL
(
regs
);
}
}
/* This closes a way to execute a system call on the host. If
...
...
arch/um/kernel/sys_call_table.c
View file @
170f6c8f
...
...
@@ -8,10 +8,12 @@
#include "linux/version.h"
#include "linux/sys.h"
#include "linux/swap.h"
#include "linux/sysctl.h"
#include "asm/signal.h"
#include "sysdep/syscalls.h"
#include "kern_util.h"
extern
syscall_handler_t
sys_restart_syscall
;
extern
syscall_handler_t
sys_ni_syscall
;
extern
syscall_handler_t
sys_exit
;
extern
syscall_handler_t
sys_fork
;
...
...
@@ -125,10 +127,8 @@ extern syscall_handler_t sys_ni_syscall;
extern
syscall_handler_t
sys_adjtimex
;
extern
syscall_handler_t
sys_mprotect
;
extern
syscall_handler_t
sys_sigprocmask
;
extern
syscall_handler_t
sys_create_module
;
extern
syscall_handler_t
sys_init_module
;
extern
syscall_handler_t
sys_delete_module
;
extern
syscall_handler_t
sys_get_kernel_syms
;
extern
syscall_handler_t
sys_quotactl
;
extern
syscall_handler_t
sys_getpgid
;
extern
syscall_handler_t
sys_fchdir
;
...
...
@@ -162,7 +162,6 @@ extern syscall_handler_t sys_mremap;
extern
syscall_handler_t
sys_setresuid16
;
extern
syscall_handler_t
sys_getresuid16
;
extern
syscall_handler_t
sys_ni_syscall
;
extern
syscall_handler_t
sys_query_module
;
extern
syscall_handler_t
sys_poll
;
extern
syscall_handler_t
sys_nfsservctl
;
extern
syscall_handler_t
sys_setresgid16
;
...
...
@@ -235,9 +234,10 @@ extern syscall_handler_t sys_epoll_create;
extern
syscall_handler_t
sys_epoll_ctl
;
extern
syscall_handler_t
sys_epoll_wait
;
extern
syscall_handler_t
sys_remap_file_pages
;
extern
syscall_handler_t
sys_set_tid_address
;
#if CONFIG_NFSD
#define NFSSERVCTL sys_nfsserctl
#define NFSSERVCTL sys_nfsser
v
ctl
#else
#define NFSSERVCTL sys_ni_syscall
#endif
...
...
@@ -246,7 +246,7 @@ extern syscall_handler_t um_mount;
extern
syscall_handler_t
um_time
;
extern
syscall_handler_t
um_stime
;
#define LAST_GENERIC_SYSCALL __NR_
remap_file_page
s
#define LAST_GENERIC_SYSCALL __NR_
set_tid_addres
s
#if LAST_GENERIC_SYSCALL > LAST_ARCH_SYSCALL
#define LAST_SYSCALL LAST_GENERIC_SYSCALL
...
...
@@ -255,7 +255,7 @@ extern syscall_handler_t um_stime;
#endif
syscall_handler_t
*
sys_call_table
[]
=
{
[
0
]
=
sys_ni
_syscall
,
[
__NR_restart_syscall
]
=
sys_restart
_syscall
,
[
__NR_exit
]
=
sys_exit
,
[
__NR_fork
]
=
sys_fork
,
[
__NR_read
]
=
(
syscall_handler_t
*
)
sys_read
,
...
...
@@ -384,10 +384,10 @@ syscall_handler_t *sys_call_table[] = {
[
__NR_adjtimex
]
=
sys_adjtimex
,
[
__NR_mprotect
]
=
sys_mprotect
,
[
__NR_sigprocmask
]
=
sys_sigprocmask
,
[
__NR_create_module
]
=
sys_
create_module
,
[
__NR_create_module
]
=
sys_
ni_syscall
,
[
__NR_init_module
]
=
sys_init_module
,
[
__NR_delete_module
]
=
sys_delete_module
,
[
__NR_get_kernel_syms
]
=
sys_
get_kernel_syms
,
[
__NR_get_kernel_syms
]
=
sys_
ni_syscall
,
[
__NR_quotactl
]
=
sys_quotactl
,
[
__NR_getpgid
]
=
sys_getpgid
,
[
__NR_fchdir
]
=
sys_fchdir
,
...
...
@@ -424,7 +424,7 @@ syscall_handler_t *sys_call_table[] = {
[
__NR_setresuid
]
=
sys_setresuid16
,
[
__NR_getresuid
]
=
sys_getresuid16
,
[
__NR_vm86
]
=
sys_ni_syscall
,
[
__NR_query_module
]
=
sys_
query_module
,
[
__NR_query_module
]
=
sys_
ni_syscall
,
[
__NR_poll
]
=
sys_poll
,
[
__NR_nfsservctl
]
=
NFSSERVCTL
,
[
__NR_setresgid
]
=
sys_setresgid16
,
...
...
@@ -489,6 +489,7 @@ syscall_handler_t *sys_call_table[] = {
[
__NR_epoll_ctl
]
=
sys_epoll_ctl
,
[
__NR_epoll_wait
]
=
sys_epoll_wait
,
[
__NR_remap_file_pages
]
=
sys_remap_file_pages
,
[
__NR_set_tid_address
]
=
sys_set_tid_address
,
ARCH_SYSCALLS
[
LAST_SYSCALL
+
1
...
NR_syscalls
]
=
...
...
arch/um/kernel/syscall_kern.c
View file @
170f6c8f
...
...
@@ -33,7 +33,7 @@ long sys_fork(void)
struct
task_struct
*
p
;
current
->
thread
.
forking
=
1
;
p
=
do_fork
(
SIGCHLD
,
0
,
NULL
,
0
,
NULL
);
p
=
do_fork
(
SIGCHLD
,
0
,
NULL
,
0
,
NULL
,
NULL
);
current
->
thread
.
forking
=
0
;
return
(
IS_ERR
(
p
)
?
PTR_ERR
(
p
)
:
p
->
pid
);
}
...
...
@@ -43,7 +43,7 @@ long sys_clone(unsigned long clone_flags, unsigned long newsp)
struct
task_struct
*
p
;
current
->
thread
.
forking
=
1
;
p
=
do_fork
(
clone_flags
,
newsp
,
NULL
,
0
,
NULL
);
p
=
do_fork
(
clone_flags
,
newsp
,
NULL
,
0
,
NULL
,
NULL
);
current
->
thread
.
forking
=
0
;
return
(
IS_ERR
(
p
)
?
PTR_ERR
(
p
)
:
p
->
pid
);
}
...
...
@@ -53,7 +53,7 @@ long sys_vfork(void)
struct
task_struct
*
p
;
current
->
thread
.
forking
=
1
;
p
=
do_fork
(
CLONE_VFORK
|
CLONE_VM
|
SIGCHLD
,
0
,
NULL
,
0
,
NULL
);
p
=
do_fork
(
CLONE_VFORK
|
CLONE_VM
|
SIGCHLD
,
0
,
NULL
,
0
,
NULL
,
NULL
);
current
->
thread
.
forking
=
0
;
return
(
IS_ERR
(
p
)
?
PTR_ERR
(
p
)
:
p
->
pid
);
}
...
...
@@ -182,7 +182,11 @@ int sys_ipc (uint call, int first, int second,
switch
(
call
)
{
case
SEMOP
:
return
sys_semop
(
first
,
(
struct
sembuf
*
)
ptr
,
second
);
return
sys_semtimedop
(
first
,
(
struct
sembuf
*
)
ptr
,
second
,
NULL
);
case
SEMTIMEDOP
:
return
sys_semtimedop
(
first
,
(
struct
sembuf
*
)
ptr
,
second
,
(
const
struct
timespec
*
)
fifth
);
case
SEMGET
:
return
sys_semget
(
first
,
second
,
third
);
case
SEMCTL
:
{
...
...
arch/um/kernel/sysrq.c
View file @
170f6c8f
...
...
@@ -19,8 +19,8 @@
#ifdef CONFIG_MODULES
extern
struct
module
*
module_list
;
extern
struct
module
kernel_module
;
/* FIXME: Accessed without a lock --RR */
extern
struct
list_head
modules
;
static
inline
int
kernel_text_address
(
unsigned
long
addr
)
{
...
...
@@ -31,11 +31,11 @@ static inline int kernel_text_address(unsigned long addr)
addr
<=
(
unsigned
long
)
&
_etext
)
return
1
;
for
(
mod
=
module_list
;
mod
!=
&
kernel_module
;
mod
=
mod
->
nex
t
)
{
list_for_each_entry
(
mod
,
&
modules
,
lis
t
)
{
/* mod_bound tests for addr being inside the vmalloc'ed
* module area. Of course it'd be better to test only
* for the .text subset... */
if
(
mod_bound
(
addr
,
0
,
mod
))
{
if
(
mod_bound
(
(
void
*
)
addr
,
0
,
mod
))
{
retval
=
1
;
break
;
}
...
...
arch/um/sys-i386/Makefile
View file @
170f6c8f
obj-y
=
bugs.o checksum.o extable.o fault.o ksyms.o ldt.o
\
obj-y
=
bugs.o checksum.o extable.o fault.o ksyms.o ldt.o
module.o
\
ptrace.o ptrace_user.o semaphore.o sigcontext.o syscalls.o sysrq.o
obj-$(CONFIG_HIGHMEM)
+=
highmem.o
...
...
@@ -6,28 +6,26 @@ obj-$(CONFIG_HIGHMEM) += highmem.o
export-objs
=
ksyms.o
USER_OBJS
:=
bugs.o ptrace_user.o sigcontext.o fault.o
USER_OBJS
:=
$(
foreach
file,
$(USER_OBJS)
,
arch/um/sys-i386
/
$(file)
)
USER_OBJS
:=
$(
foreach
file,
$(USER_OBJS)
,
$(obj)
/
$(file)
)
SYMLINKS
=
semaphore.c
checksum.S extable.c highmem
.c
SYMLINKS
=
semaphore.c
extable.c highmem.c module
.c
$(USER_OBJS)
:
%.o: %.c
$(CC)
$
(
CFLAGS_
$@
)
$(USER_CFLAGS)
-c
-o
$@
$<
semaphore.c-dir
=
kernel
extable.c-dir
=
mm
highmem.c-dir
=
mm
module.c-dir
=
kernel
arch/um/sys-i386/checksum.S
:
-
rm
-f
$@
-
ln
-s
$(TOPDIR)
/arch/i386/lib/
$(
notdir
$@
)
$@
define
make_link
-rm
-f
$1
ln
-sf
$(TOPDIR)/arch/i386/$($(notdir
$1)-dir)/$(notdir
$1)
$1
endef
arch/um/sys-i386/semaphore.c
:
-
rm
-f
$@
-
ln
-s
$(TOPDIR)
/arch/i386/kernel/
$(
notdir
$@
)
$@
$(USER_OBJS)
:
%.o: %.c
$(CC)
$
(
CFLAGS_
$(
notdir
$@
)
)
$(USER_CFLAGS)
-c
-o
$@
$<
arch/um/sys-i386/extable.c
:
-
rm
-f
$@
-
ln
-s
$(TOPDIR)
/arch/i386/mm/
$(
notdir
$@
)
$@
$(foreach f,$(SYMLINKS),$(src)/$f)
:
$(
call
make_link,
$@
)
arch/um/sys-i386/highmem.c
:
-
rm
-f
$@
-
ln
-s
$(TOPDIR)
/arch/i386/mm/
$(
notdir
$@
)
$@
clean
:
$(MAKE)
-C
util clean
...
...
arch/um/uml.lds.S
View file @
170f6c8f
...
...
@@ -38,6 +38,7 @@ SECTIONS
__ex_table
:
{
*(
__ex_table
)
}
__stop___ex_table
=
.
;
.
=
ALIGN
(
64
)
;
__start___ksymtab
=
.
; /* Kernel symbol table */
__ksymtab
:
{
*(
__ksymtab
)
}
__stop___ksymtab
=
.
;
...
...
@@ -58,18 +59,27 @@ SECTIONS
__uml_setup_start
=
.
;
.
uml.setup.init
:
{
*(
.
uml
.
setup
.
init
)
}
__uml_setup_end
=
.
;
__uml_help_start
=
.
;
.
uml.help.init
:
{
*(
.
uml
.
help
.
init
)
}
__uml_help_end
=
.
;
__uml_postsetup_start
=
.
;
.
uml.postsetup.init
:
{
*(
.
uml
.
postsetup
.
init
)
}
__uml_postsetup_end
=
.
;
__setup_start
=
.
;
.
init.setup
:
{
*(
.
init
.
setup
)
}
__setup_end
=
.
;
__start___param
=
.
;
__param
:
{
*(
__param
)
}
__stop___param
=
.
;
__per_cpu_start
=
.
;
.
data.percpu
:
{
*(
.
data
.
percpu
)
}
__per_cpu_end
=
.
;
__per_cpu_end
=
.
;
__initcall_start
=
.
;
.
initcall.init
:
{
*(.
initcall1.init
)
...
...
include/asm-um/pgtable.h
View file @
170f6c8f
...
...
@@ -373,15 +373,15 @@ static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
}
/* Find an entry in the third-level page table.. */
#define __pte_offset(address) ((
address
>> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
#define __pte_offset(address) ((
(address)
>> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
#define pte_offset_kernel(dir, address) \
((pte_t *) pmd_page_kernel(*(dir)) + __pte_offset(address))
#define pte_offset_map(dir, address) \
((pte_t *)kmap_atomic(pmd_page(*(dir)),KM_PTE0) + __pte_offset(address))
#define pte_offset_map_nested(dir, address) \
((pte_t *)kmap_atomic(pmd_page(*(dir)),KM_PTE1) + __pte_offset(address))
#define pte_unmap(pte) kunmap_atomic(
pte
, KM_PTE0)
#define pte_unmap_nested(pte) kunmap_atomic(
pte
, KM_PTE1)
#define pte_unmap(pte) kunmap_atomic(
(pte)
, KM_PTE0)
#define pte_unmap_nested(pte) kunmap_atomic(
(pte)
, KM_PTE1)
#if defined(CONFIG_HIGHPTE) && defined(CONFIG_HIGHMEM4G)
typedef
u32
pte_addr_t
;
...
...
include/asm-um/thread_info.h
View file @
170f6c8f
...
...
@@ -20,14 +20,9 @@ struct thread_info {
mm_segment_t
addr_limit
;
/* thread address space:
0-0xBFFFFFFF for user
0-0xFFFFFFFF for kernel */
struct
restart_block
restart_block
;
};
/*
* macros/functions for gaining access to the thread information structure
*
* preempt_count needs to be 1 initially, until the scheduler is functional.
*/
#define INIT_THREAD_INFO(tsk) \
{ \
task: &tsk, \
...
...
@@ -36,6 +31,9 @@ struct thread_info {
cpu: 0, \
preempt_count: 1, \
addr_limit: KERNEL_DS, \
restart_block: { \
fn: do_no_restart_syscall, \
}, \
}
#define init_thread_info (init_thread_union.thread_info)
...
...
include/asm-um/uaccess.h
View file @
170f6c8f
...
...
@@ -164,7 +164,7 @@ static inline int clear_user(void *mem, int len)
extern
int
__do_strnlen_user
(
const
char
*
str
,
unsigned
long
n
,
void
**
fault_addr
,
void
**
fault_catcher
);
static
inline
int
strnlen_user
(
void
*
str
,
int
len
)
static
inline
int
strnlen_user
(
const
void
*
str
,
int
len
)
{
return
(
__do_strnlen_user
(
str
,
len
,
&
current
->
thread
.
fault_addr
,
...
...
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