Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Linux-御风守护者
linux
提交
13e65280
L
linux
项目概览
Linux-御风守护者
/
linux
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
13e65280
编写于
5月 08, 2005
作者:
D
David Woodhouse
浏览文件
操作
浏览文件
下载
差异文件
Merge with master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
上级
4332bdd3
88d7bd8c
88d7bd8c
变更
48
隐藏空白更改
内联
并排
Showing
48 changed file
with
301 addition
and
375 deletion
+301
-375
Makefile
Makefile
+1
-1
arch/i386/kernel/acpi/boot.c
arch/i386/kernel/acpi/boot.c
+1
-1
arch/ppc/Kconfig
arch/ppc/Kconfig
+2
-0
arch/ppc64/Kconfig
arch/ppc64/Kconfig
+1
-0
arch/ppc64/kernel/pSeries_smp.c
arch/ppc64/kernel/pSeries_smp.c
+0
-7
arch/ppc64/kernel/xics.c
arch/ppc64/kernel/xics.c
+12
-4
arch/um/include/user_util.h
arch/um/include/user_util.h
+0
-1
arch/um/kernel/Makefile
arch/um/kernel/Makefile
+1
-5
arch/um/kernel/process_kern.c
arch/um/kernel/process_kern.c
+9
-11
arch/um/kernel/ptrace.c
arch/um/kernel/ptrace.c
+29
-50
arch/um/kernel/skas/include/mode_kern-skas.h
arch/um/kernel/skas/include/mode_kern-skas.h
+0
-1
arch/um/kernel/skas/include/uaccess-skas.h
arch/um/kernel/skas/include/uaccess-skas.h
+2
-2
arch/um/kernel/skas/process.c
arch/um/kernel/skas/process.c
+22
-13
arch/um/kernel/skas/process_kern.c
arch/um/kernel/skas/process_kern.c
+0
-4
arch/um/kernel/skas/uaccess.c
arch/um/kernel/skas/uaccess.c
+5
-2
arch/um/kernel/syscall_kern.c
arch/um/kernel/syscall_kern.c
+0
-1
arch/um/kernel/trap_kern.c
arch/um/kernel/trap_kern.c
+1
-1
arch/um/kernel/tt/include/mode_kern-tt.h
arch/um/kernel/tt/include/mode_kern-tt.h
+0
-1
arch/um/kernel/tt/include/uaccess-tt.h
arch/um/kernel/tt/include/uaccess-tt.h
+2
-2
arch/um/kernel/tt/mem.c
arch/um/kernel/tt/mem.c
+1
-7
arch/um/kernel/tt/process_kern.c
arch/um/kernel/tt/process_kern.c
+11
-9
arch/um/kernel/tt/syscall_user.c
arch/um/kernel/tt/syscall_user.c
+4
-0
arch/um/kernel/um_arch.c
arch/um/kernel/um_arch.c
+4
-3
arch/um/sys-i386/ptrace.c
arch/um/sys-i386/ptrace.c
+40
-0
arch/um/sys-ppc/ptrace.c
arch/um/sys-ppc/ptrace.c
+40
-0
arch/um/sys-x86_64/ptrace.c
arch/um/sys-x86_64/ptrace.c
+44
-0
arch/um/sys-x86_64/signal.c
arch/um/sys-x86_64/signal.c
+1
-1
arch/um/sys-x86_64/syscalls.c
arch/um/sys-x86_64/syscalls.c
+2
-0
drivers/block/rd.c
drivers/block/rd.c
+1
-1
drivers/media/video/tuner-core.c
drivers/media/video/tuner-core.c
+12
-2
drivers/s390/scsi/zfcp_aux.c
drivers/s390/scsi/zfcp_aux.c
+1
-1
drivers/s390/scsi/zfcp_def.h
drivers/s390/scsi/zfcp_def.h
+0
-1
drivers/scsi/aacraid/linit.c
drivers/scsi/aacraid/linit.c
+1
-1
drivers/scsi/aic7xxx/aic7xxx_osm.c
drivers/scsi/aic7xxx/aic7xxx_osm.c
+0
-2
drivers/scsi/aic7xxx/aic7xxx_osm.h
drivers/scsi/aic7xxx/aic7xxx_osm.h
+0
-6
drivers/scsi/qla2xxx/qla_attr.c
drivers/scsi/qla2xxx/qla_attr.c
+1
-7
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_gbl.h
+2
-2
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/qla2xxx/qla_os.c
+2
-1
drivers/scsi/scsi.c
drivers/scsi/scsi.c
+1
-1
drivers/scsi/scsi_transport_spi.c
drivers/scsi/scsi_transport_spi.c
+34
-15
drivers/scsi/sr_ioctl.c
drivers/scsi/sr_ioctl.c
+3
-0
drivers/scsi/sym53c8xx_2/sym_glue.c
drivers/scsi/sym53c8xx_2/sym_glue.c
+3
-2
drivers/serial/8250_pci.c
drivers/serial/8250_pci.c
+2
-0
fs/partitions/msdos.c
fs/partitions/msdos.c
+0
-5
include/asm-ppc64/xics.h
include/asm-ppc64/xics.h
+0
-3
include/asm-um/elf.h
include/asm-um/elf.h
+0
-196
include/asm-um/setup.h
include/asm-um/setup.h
+2
-1
sound/pci/via82xx.c
sound/pci/via82xx.c
+1
-1
未找到文件。
Makefile
浏览文件 @
13e65280
VERSION
=
2
PATCHLEVEL
=
6
SUBLEVEL
=
12
EXTRAVERSION
=
-rc
3
EXTRAVERSION
=
-rc
4
NAME
=
Woozy Numbat
# *DOCUMENTATION*
...
...
arch/i386/kernel/acpi/boot.c
浏览文件 @
13e65280
...
...
@@ -650,7 +650,7 @@ acpi_find_rsdp (void)
*/
rsdp_phys
=
acpi_scan_rsdp
(
0
,
0x400
);
if
(
!
rsdp_phys
)
rsdp_phys
=
acpi_scan_rsdp
(
0xE0000
,
0x
FFFFF
);
rsdp_phys
=
acpi_scan_rsdp
(
0xE0000
,
0x
20000
);
return
rsdp_phys
;
}
...
...
arch/ppc/Kconfig
浏览文件 @
13e65280
...
...
@@ -77,9 +77,11 @@ config 44x
bool "44x"
config POWER3
select PPC_FPU
bool "POWER3"
config POWER4
select PPC_FPU
bool "POWER4 and 970 (G5)"
config 8xx
...
...
arch/ppc64/Kconfig
浏览文件 @
13e65280
...
...
@@ -262,6 +262,7 @@ config PPC_RTAS
config RTAS_PROC
bool "Proc interface to RTAS"
depends on PPC_RTAS
default y
config RTAS_FLASH
tristate "Firmware flash interface"
...
...
arch/ppc64/kernel/pSeries_smp.c
浏览文件 @
13e65280
...
...
@@ -326,13 +326,6 @@ static void __devinit smp_xics_setup_cpu(int cpu)
cpu_clear
(
cpu
,
of_spin_map
);
/*
* Put the calling processor into the GIQ. This is really only
* necessary from a secondary thread as the OF start-cpu interface
* performs this function for us on primary threads.
*/
rtas_set_indicator
(
GLOBAL_INTERRUPT_QUEUE
,
(
1UL
<<
interrupt_server_size
)
-
1
-
default_distrib_server
,
1
);
}
static
DEFINE_SPINLOCK
(
timebase_lock
);
...
...
arch/ppc64/kernel/xics.c
浏览文件 @
13e65280
...
...
@@ -432,6 +432,7 @@ void xics_cause_IPI(int cpu)
{
ops
->
qirr_info
(
cpu
,
IPI_PRIORITY
);
}
#endif
/* CONFIG_SMP */
void
xics_setup_cpu
(
void
)
{
...
...
@@ -439,9 +440,17 @@ void xics_setup_cpu(void)
ops
->
cppr_info
(
cpu
,
0xff
);
iosync
();
}
#endif
/* CONFIG_SMP */
/*
* Put the calling processor into the GIQ. This is really only
* necessary from a secondary thread as the OF start-cpu interface
* performs this function for us on primary threads.
*
* XXX: undo of teardown on kexec needs this too, as may hotplug
*/
rtas_set_indicator
(
GLOBAL_INTERRUPT_QUEUE
,
(
1UL
<<
interrupt_server_size
)
-
1
-
default_distrib_server
,
1
);
}
void
xics_init_IRQ
(
void
)
{
...
...
@@ -563,8 +572,7 @@ void xics_init_IRQ(void)
for
(;
i
<
NR_IRQS
;
++
i
)
get_irq_desc
(
i
)
->
handler
=
&
xics_pic
;
ops
->
cppr_info
(
boot_cpuid
,
0xff
);
iosync
();
xics_setup_cpu
();
ppc64_boot_msg
(
0x21
,
"XICS Done"
);
}
...
...
arch/um/include/user_util.h
浏览文件 @
13e65280
...
...
@@ -67,7 +67,6 @@ extern void *um_kmalloc(int size);
extern
int
switcheroo
(
int
fd
,
int
prot
,
void
*
from
,
void
*
to
,
int
size
);
extern
void
setup_machinename
(
char
*
machine_out
);
extern
void
setup_hostinfo
(
void
);
extern
void
add_arg
(
char
*
arg
);
extern
void
init_new_thread_stack
(
void
*
sig_stack
,
void
(
*
usr1_handler
)(
int
));
extern
void
init_new_thread_signals
(
int
altstack
);
extern
void
do_exec
(
int
old_pid
,
int
new_pid
);
...
...
arch/um/kernel/Makefile
浏览文件 @
13e65280
...
...
@@ -23,14 +23,10 @@ obj-$(CONFIG_SYSCALL_DEBUG) += syscall_user.o
obj-$(CONFIG_MODE_TT)
+=
tt/
obj-$(CONFIG_MODE_SKAS)
+=
skas/
# This needs be compiled with frame pointers regardless of how the rest of the
# kernel is built.
CFLAGS_frame.o
:=
-fno-omit-frame-pointer
user-objs-$(CONFIG_TTY_LOG)
+=
tty_log.o
USER_OBJS
:=
$
(
user-objs-y
)
config.o helper.o main.o process.o tempfile.o
\
time.o tty_log.o umid.o user_util.o
frame.o
time.o tty_log.o umid.o user_util.o
include
arch/um/scripts/Makefile.rules
...
...
arch/um/kernel/process_kern.c
浏览文件 @
13e65280
...
...
@@ -115,16 +115,6 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
return
(
pid
);
}
void
switch_mm
(
struct
mm_struct
*
prev
,
struct
mm_struct
*
next
,
struct
task_struct
*
tsk
)
{
int
cpu
=
smp_processor_id
();
if
(
prev
!=
next
)
cpu_clear
(
cpu
,
prev
->
cpu_vm_mask
);
cpu_set
(
cpu
,
next
->
cpu_vm_mask
);
}
void
set_current
(
void
*
t
)
{
struct
task_struct
*
task
=
t
;
...
...
@@ -152,7 +142,6 @@ void release_thread(struct task_struct *task)
void
exit_thread
(
void
)
{
CHOOSE_MODE
(
exit_thread_tt
(),
exit_thread_skas
());
unprotect_stack
((
unsigned
long
)
current_thread
);
}
...
...
@@ -476,12 +465,21 @@ int singlestepping(void * t)
return
2
;
}
/*
* Only x86 and x86_64 have an arch_align_stack().
* All other arches have "#define arch_align_stack(x) (x)"
* in their asm/system.h
* As this is included in UML from asm-um/system-generic.h,
* we can use it to behave as the subarch does.
*/
#ifndef arch_align_stack
unsigned
long
arch_align_stack
(
unsigned
long
sp
)
{
if
(
randomize_va_space
)
sp
-=
get_random_int
()
%
8192
;
return
sp
&
~
0xf
;
}
#endif
/*
...
...
arch/um/kernel/ptrace.c
浏览文件 @
13e65280
...
...
@@ -19,15 +19,30 @@
#include "skas_ptrace.h"
#include "sysdep/ptrace.h"
static
inline
void
set_singlestepping
(
struct
task_struct
*
child
,
int
on
)
{
if
(
on
)
child
->
ptrace
|=
PT_DTRACE
;
else
child
->
ptrace
&=
~
PT_DTRACE
;
child
->
thread
.
singlestep_syscall
=
0
;
#ifdef SUBARCH_SET_SINGLESTEPPING
SUBARCH_SET_SINGLESTEPPING
(
child
,
on
)
#endif
}
/*
* Called by kernel/ptrace.c when detaching..
*/
void
ptrace_disable
(
struct
task_struct
*
child
)
{
child
->
ptrace
&=
~
PT_DTRACE
;
child
->
thread
.
singlestep_syscall
=
0
;
set_singlestepping
(
child
,
0
);
}
extern
int
peek_user
(
struct
task_struct
*
child
,
long
addr
,
long
data
);
extern
int
poke_user
(
struct
task_struct
*
child
,
long
addr
,
long
data
);
long
sys_ptrace
(
long
request
,
long
pid
,
long
addr
,
long
data
)
{
struct
task_struct
*
child
;
...
...
@@ -67,6 +82,10 @@ long sys_ptrace(long request, long pid, long addr, long data)
goto
out_tsk
;
}
#ifdef SUBACH_PTRACE_SPECIAL
SUBARCH_PTRACE_SPECIAL
(
child
,
request
,
addr
,
data
)
#endif
ret
=
ptrace_check_attach
(
child
,
request
==
PTRACE_KILL
);
if
(
ret
<
0
)
goto
out_tsk
;
...
...
@@ -87,28 +106,9 @@ long sys_ptrace(long request, long pid, long addr, long data)
}
/* read the word at location addr in the USER area. */
case
PTRACE_PEEKUSR
:
{
unsigned
long
tmp
;
ret
=
-
EIO
;
if
((
addr
&
3
)
||
addr
<
0
)
break
;
tmp
=
0
;
/* Default return condition */
if
(
addr
<
MAX_REG_OFFSET
){
tmp
=
getreg
(
child
,
addr
);
}
#if defined(CONFIG_UML_X86) && !defined(CONFIG_64BIT)
else
if
((
addr
>=
offsetof
(
struct
user
,
u_debugreg
[
0
]))
&&
(
addr
<=
offsetof
(
struct
user
,
u_debugreg
[
7
]))){
addr
-=
offsetof
(
struct
user
,
u_debugreg
[
0
]);
addr
=
addr
>>
2
;
tmp
=
child
->
thread
.
arch
.
debugregs
[
addr
];
}
#endif
ret
=
put_user
(
tmp
,
(
unsigned
long
__user
*
)
data
);
break
;
}
case
PTRACE_PEEKUSR
:
ret
=
peek_user
(
child
,
addr
,
data
);
break
;
/* when I and D space are separate, this will have to be fixed. */
case
PTRACE_POKETEXT
:
/* write the word at location addr. */
...
...
@@ -121,26 +121,8 @@ long sys_ptrace(long request, long pid, long addr, long data)
break
;
case
PTRACE_POKEUSR
:
/* write the word at location addr in the USER area */
ret
=
-
EIO
;
if
((
addr
&
3
)
||
addr
<
0
)
break
;
if
(
addr
<
MAX_REG_OFFSET
)
{
ret
=
putreg
(
child
,
addr
,
data
);
break
;
}
#if defined(CONFIG_UML_X86) && !defined(CONFIG_64BIT)
else
if
((
addr
>=
offsetof
(
struct
user
,
u_debugreg
[
0
]))
&&
(
addr
<=
offsetof
(
struct
user
,
u_debugreg
[
7
]))){
addr
-=
offsetof
(
struct
user
,
u_debugreg
[
0
]);
addr
=
addr
>>
2
;
if
((
addr
==
4
)
||
(
addr
==
5
))
break
;
child
->
thread
.
arch
.
debugregs
[
addr
]
=
data
;
ret
=
0
;
}
#endif
break
;
ret
=
poke_user
(
child
,
addr
,
data
);
break
;
case
PTRACE_SYSCALL
:
/* continue and stop at next (return from) syscall */
case
PTRACE_CONT
:
{
/* restart after signal. */
...
...
@@ -148,8 +130,7 @@ long sys_ptrace(long request, long pid, long addr, long data)
if
(
!
valid_signal
(
data
))
break
;
child
->
ptrace
&=
~
PT_DTRACE
;
child
->
thread
.
singlestep_syscall
=
0
;
set_singlestepping
(
child
,
0
);
if
(
request
==
PTRACE_SYSCALL
)
{
set_tsk_thread_flag
(
child
,
TIF_SYSCALL_TRACE
);
}
...
...
@@ -172,8 +153,7 @@ long sys_ptrace(long request, long pid, long addr, long data)
if
(
child
->
exit_state
==
EXIT_ZOMBIE
)
/* already dead */
break
;
child
->
ptrace
&=
~
PT_DTRACE
;
child
->
thread
.
singlestep_syscall
=
0
;
set_singlestepping
(
child
,
0
);
child
->
exit_code
=
SIGKILL
;
wake_up_process
(
child
);
break
;
...
...
@@ -184,8 +164,7 @@ long sys_ptrace(long request, long pid, long addr, long data)
if
(
!
valid_signal
(
data
))
break
;
clear_tsk_thread_flag
(
child
,
TIF_SYSCALL_TRACE
);
child
->
ptrace
|=
PT_DTRACE
;
child
->
thread
.
singlestep_syscall
=
0
;
set_singlestepping
(
child
,
1
);
child
->
exit_code
=
data
;
/* give it a chance to run. */
wake_up_process
(
child
);
...
...
arch/um/kernel/skas/include/mode_kern-skas.h
浏览文件 @
13e65280
...
...
@@ -18,7 +18,6 @@ extern int copy_thread_skas(int nr, unsigned long clone_flags,
unsigned
long
sp
,
unsigned
long
stack_top
,
struct
task_struct
*
p
,
struct
pt_regs
*
regs
);
extern
void
release_thread_skas
(
struct
task_struct
*
task
);
extern
void
exit_thread_skas
(
void
);
extern
void
initial_thread_cb_skas
(
void
(
*
proc
)(
void
*
),
void
*
arg
);
extern
void
init_idle_skas
(
void
);
extern
void
flush_tlb_kernel_range_skas
(
unsigned
long
start
,
...
...
arch/um/kernel/skas/include/uaccess-skas.h
浏览文件 @
13e65280
...
...
@@ -18,8 +18,8 @@
((unsigned long) (addr) + (size) <= FIXADDR_USER_END) && \
((unsigned long) (addr) + (size) >= (unsigned long)(addr))))
static
inline
int
__deprecated
verify_area_skas
(
int
type
,
const
void
*
addr
,
unsigned
long
size
)
static
inline
int
verify_area_skas
(
int
type
,
const
void
*
addr
,
unsigned
long
size
)
{
return
(
access_ok_skas
(
type
,
addr
,
size
)
?
0
:
-
EFAULT
);
}
...
...
arch/um/kernel/skas/process.c
浏览文件 @
13e65280
...
...
@@ -201,6 +201,11 @@ void userspace(union uml_pt_regs *regs)
}
}
}
#define INIT_JMP_NEW_THREAD 0
#define INIT_JMP_REMOVE_SIGSTACK 1
#define INIT_JMP_CALLBACK 2
#define INIT_JMP_HALT 3
#define INIT_JMP_REBOOT 4
void
new_thread
(
void
*
stack
,
void
**
switch_buf_ptr
,
void
**
fork_buf_ptr
,
void
(
*
handler
)(
int
))
...
...
@@ -236,7 +241,7 @@ void thread_wait(void *sw, void *fb)
*
switch_buf
=
&
buf
;
fork_buf
=
fb
;
if
(
sigsetjmp
(
buf
,
1
)
==
0
)
siglongjmp
(
*
fork_buf
,
1
);
siglongjmp
(
*
fork_buf
,
INIT_JMP_REMOVE_SIGSTACK
);
}
void
switch_threads
(
void
*
me
,
void
*
next
)
...
...
@@ -266,21 +271,25 @@ int start_idle_thread(void *stack, void *switch_buf_ptr, void **fork_buf_ptr)
*
fork_buf_ptr
=
&
initial_jmpbuf
;
n
=
sigsetjmp
(
initial_jmpbuf
,
1
);
if
(
n
==
0
)
new_thread_proc
((
void
*
)
stack
,
new_thread_handler
);
else
if
(
n
==
1
)
remove_sigstack
();
else
if
(
n
==
2
){
switch
(
n
){
case
INIT_JMP_NEW_THREAD
:
new_thread_proc
((
void
*
)
stack
,
new_thread_handler
);
break
;
case
INIT_JMP_REMOVE_SIGSTACK
:
remove_sigstack
();
break
;
case
INIT_JMP_CALLBACK
:
(
*
cb_proc
)(
cb_arg
);
siglongjmp
(
*
cb_back
,
1
);
}
else
if
(
n
==
3
){
break
;
case
INIT_JMP_HALT
:
kmalloc_ok
=
0
;
return
(
0
);
}
else
if
(
n
==
4
){
case
INIT_JMP_REBOOT
:
kmalloc_ok
=
0
;
return
(
1
);
default:
panic
(
"Bad sigsetjmp return in start_idle_thread - %d
\n
"
,
n
);
}
siglongjmp
(
**
switch_buf
,
1
);
}
...
...
@@ -305,7 +314,7 @@ void initial_thread_cb_skas(void (*proc)(void *), void *arg)
block_signals
();
if
(
sigsetjmp
(
here
,
1
)
==
0
)
siglongjmp
(
initial_jmpbuf
,
2
);
siglongjmp
(
initial_jmpbuf
,
INIT_JMP_CALLBACK
);
unblock_signals
();
cb_proc
=
NULL
;
...
...
@@ -316,13 +325,13 @@ void initial_thread_cb_skas(void (*proc)(void *), void *arg)
void
halt_skas
(
void
)
{
block_signals
();
siglongjmp
(
initial_jmpbuf
,
3
);
siglongjmp
(
initial_jmpbuf
,
INIT_JMP_HALT
);
}
void
reboot_skas
(
void
)
{
block_signals
();
siglongjmp
(
initial_jmpbuf
,
4
);
siglongjmp
(
initial_jmpbuf
,
INIT_JMP_REBOOT
);
}
void
switch_mm_skas
(
int
mm_fd
)
...
...
arch/um/kernel/skas/process_kern.c
浏览文件 @
13e65280
...
...
@@ -83,10 +83,6 @@ void release_thread_skas(struct task_struct *task)
{
}
void
exit_thread_skas
(
void
)
{
}
void
fork_handler
(
int
sig
)
{
change_sig
(
SIGUSR1
,
1
);
...
...
arch/um/kernel/skas/uaccess.c
浏览文件 @
13e65280
...
...
@@ -29,9 +29,12 @@ static unsigned long maybe_map(unsigned long virt, int is_write)
if
(
IS_ERR
(
phys
)
||
(
is_write
&&
!
pte_write
(
pte
))){
err
=
handle_page_fault
(
virt
,
0
,
is_write
,
1
,
&
dummy_code
);
if
(
err
)
return
(
0
);
return
(
-
1UL
);
phys
=
um_virt_to_phys
(
current
,
virt
,
NULL
);
}
if
(
IS_ERR
(
phys
))
phys
=
(
void
*
)
-
1
;
return
((
unsigned
long
)
phys
);
}
...
...
@@ -42,7 +45,7 @@ static int do_op(unsigned long addr, int len, int is_write,
int
n
;
addr
=
maybe_map
(
addr
,
is_write
);
if
(
addr
==
-
1
)
if
(
addr
==
-
1
UL
)
return
(
-
1
);
page
=
phys_to_page
(
addr
);
...
...
arch/um/kernel/syscall_kern.c
浏览文件 @
13e65280
...
...
@@ -17,7 +17,6 @@
#include "linux/utime.h"
#include "asm/mman.h"
#include "asm/uaccess.h"
#include "asm/ipc.h"
#include "kern_util.h"
#include "user_util.h"
#include "sysdep/syscalls.h"
...
...
arch/um/kernel/trap_kern.c
浏览文件 @
13e65280
...
...
@@ -48,7 +48,7 @@ int handle_page_fault(unsigned long address, unsigned long ip,
goto
good_area
;
else
if
(
!
(
vma
->
vm_flags
&
VM_GROWSDOWN
))
goto
out
;
else
if
(
!
ARCH_IS_STACKGROW
(
address
))
else
if
(
is_user
&&
!
ARCH_IS_STACKGROW
(
address
))
goto
out
;
else
if
(
expand_stack
(
vma
,
address
))
goto
out
;
...
...
arch/um/kernel/tt/include/mode_kern-tt.h
浏览文件 @
13e65280
...
...
@@ -19,7 +19,6 @@ extern int copy_thread_tt(int nr, unsigned long clone_flags, unsigned long sp,
unsigned
long
stack_top
,
struct
task_struct
*
p
,
struct
pt_regs
*
regs
);
extern
void
release_thread_tt
(
struct
task_struct
*
task
);
extern
void
exit_thread_tt
(
void
);
extern
void
initial_thread_cb_tt
(
void
(
*
proc
)(
void
*
),
void
*
arg
);
extern
void
init_idle_tt
(
void
);
extern
void
flush_tlb_kernel_range_tt
(
unsigned
long
start
,
unsigned
long
end
);
...
...
arch/um/kernel/tt/include/uaccess-tt.h
浏览文件 @
13e65280
...
...
@@ -33,8 +33,8 @@ extern unsigned long uml_physmem;
(((unsigned long) (addr) <= ((unsigned long) (addr) + (size))) && \
(under_task_size(addr, size) || is_stack(addr, size))))
static
inline
int
__deprecated
verify_area_tt
(
int
type
,
const
void
*
addr
,
unsigned
long
size
)
static
inline
int
verify_area_tt
(
int
type
,
const
void
*
addr
,
unsigned
long
size
)
{
return
(
access_ok_tt
(
type
,
addr
,
size
)
?
0
:
-
EFAULT
);
}
...
...
arch/um/kernel/tt/mem.c
浏览文件 @
13e65280
...
...
@@ -21,14 +21,8 @@ void before_mem_tt(unsigned long brk_start)
remap_data
(
UML_ROUND_DOWN
(
&
__bss_start
),
UML_ROUND_UP
(
&
_end
),
1
);
}
#ifdef CONFIG_HOST_2G_2G
#define TOP 0x80000000
#else
#define TOP 0xc0000000
#endif
#define SIZE ((CONFIG_NEST_LEVEL + CONFIG_KERNEL_HALF_GIGS) * 0x20000000)
#define START (
TOP
- SIZE)
#define START (
CONFIG_TOP_ADDR
- SIZE)
unsigned
long
set_task_sizes_tt
(
int
arg
,
unsigned
long
*
host_size_out
,
unsigned
long
*
task_size_out
)
...
...
arch/um/kernel/tt/process_kern.c
浏览文件 @
13e65280
...
...
@@ -65,8 +65,7 @@ void *switch_to_tt(void *prev, void *next, void *last)
panic
(
"write of switch_pipe failed, err = %d"
,
-
err
);
reading
=
1
;
if
((
from
->
exit_state
==
EXIT_ZOMBIE
)
||
(
from
->
exit_state
==
EXIT_DEAD
))
if
(
from
->
thread
.
mode
.
tt
.
switch_pipe
[
0
]
==
-
1
)
os_kill_process
(
os_getpid
(),
0
);
err
=
os_read_file
(
from
->
thread
.
mode
.
tt
.
switch_pipe
[
0
],
&
c
,
sizeof
(
c
));
...
...
@@ -81,8 +80,7 @@ void *switch_to_tt(void *prev, void *next, void *last)
* in case it has not already killed itself.
*/
prev_sched
=
current
->
thread
.
prev_sched
;
if
((
prev_sched
->
exit_state
==
EXIT_ZOMBIE
)
||
(
prev_sched
->
exit_state
==
EXIT_DEAD
))
if
(
prev_sched
->
thread
.
mode
.
tt
.
switch_pipe
[
0
]
==
-
1
)
os_kill_process
(
prev_sched
->
thread
.
mode
.
tt
.
extern_pid
,
1
);
change_sig
(
SIGVTALRM
,
vtalrm
);
...
...
@@ -101,14 +99,18 @@ void release_thread_tt(struct task_struct *task)
{
int
pid
=
task
->
thread
.
mode
.
tt
.
extern_pid
;
/*
* We first have to kill the other process, before
* closing its switch_pipe. Else it might wake up
* and receive "EOF" before we could kill it.
*/
if
(
os_getpid
()
!=
pid
)
os_kill_process
(
pid
,
0
);
}
void
exit_thread_tt
(
void
)
{
os_close_file
(
current
->
thread
.
mode
.
tt
.
switch_pipe
[
0
]);
os_close_file
(
current
->
thread
.
mode
.
tt
.
switch_pipe
[
1
])
;
os_close_file
(
task
->
thread
.
mode
.
tt
.
switch_pipe
[
0
]);
os_close_file
(
task
->
thread
.
mode
.
tt
.
switch_pipe
[
1
]);
/* use switch_pipe as flag: thread is released */
task
->
thread
.
mode
.
tt
.
switch_pipe
[
0
]
=
-
1
;
}
void
suspend_new_thread
(
int
fd
)
...
...
arch/um/kernel/tt/syscall_user.c
浏览文件 @
13e65280
...
...
@@ -63,6 +63,10 @@ void do_syscall(void *task, int pid, int local_using_sysemu)
UPT_SYSCALL_NR
(
TASK_REGS
(
task
))
=
PT_SYSCALL_NR
(
proc_regs
);
#ifdef UPT_ORIGGPR2
UPT_ORIGGPR2
(
TASK_REGS
(
task
))
=
REGS_ORIGGPR2
(
proc_regs
);
#endif
if
(((
unsigned
long
*
)
PT_IP
(
proc_regs
)
>=
&
_stext
)
&&
((
unsigned
long
*
)
PT_IP
(
proc_regs
)
<=
&
_etext
))
tracer_panic
(
"I'm tracing myself and I can't get out"
);
...
...
arch/um/kernel/um_arch.c
浏览文件 @
13e65280
...
...
@@ -23,6 +23,7 @@
#include "asm/ptrace.h"
#include "asm/elf.h"
#include "asm/user.h"
#include "asm/setup.h"
#include "ubd_user.h"
#include "asm/current.h"
#include "asm/setup.h"
...
...
@@ -42,9 +43,9 @@
#define DEFAULT_COMMAND_LINE "root=98:0"
/* Changed in linux_main and setup_arch, which run before SMP is started */
char
command_line
[
COMMAND_LINE_SIZE
]
=
{
0
};
static
char
command_line
[
COMMAND_LINE_SIZE
]
=
{
0
};
void
add_arg
(
char
*
arg
)
static
void
add_arg
(
char
*
arg
)
{
if
(
strlen
(
command_line
)
+
strlen
(
arg
)
+
1
>
COMMAND_LINE_SIZE
)
{
printf
(
"add_arg: Too many command line arguments!
\n
"
);
...
...
@@ -449,7 +450,7 @@ void __init setup_arch(char **cmdline_p)
{
notifier_chain_register
(
&
panic_notifier_list
,
&
panic_exit_notifier
);
paging_init
();
strlcpy
(
saved_command_line
,
command_line
,
COMMAND_LINE_SIZE
);
strlcpy
(
saved_command_line
,
command_line
,
COMMAND_LINE_SIZE
);
*
cmdline_p
=
command_line
;
setup_hostinfo
();
}
...
...
arch/um/sys-i386/ptrace.c
浏览文件 @
13e65280
...
...
@@ -73,6 +73,25 @@ int putreg(struct task_struct *child, int regno, unsigned long value)
return
0
;
}
int
poke_user
(
struct
task_struct
*
child
,
long
addr
,
long
data
)
{
if
((
addr
&
3
)
||
addr
<
0
)
return
-
EIO
;
if
(
addr
<
MAX_REG_OFFSET
)
return
putreg
(
child
,
addr
,
data
);
else
if
((
addr
>=
offsetof
(
struct
user
,
u_debugreg
[
0
]))
&&
(
addr
<=
offsetof
(
struct
user
,
u_debugreg
[
7
]))){
addr
-=
offsetof
(
struct
user
,
u_debugreg
[
0
]);
addr
=
addr
>>
2
;
if
((
addr
==
4
)
||
(
addr
==
5
))
return
-
EIO
;
child
->
thread
.
arch
.
debugregs
[
addr
]
=
data
;
return
0
;
}
return
-
EIO
;
}
unsigned
long
getreg
(
struct
task_struct
*
child
,
int
regno
)
{
unsigned
long
retval
=
~
0UL
;
...
...
@@ -93,6 +112,27 @@ unsigned long getreg(struct task_struct *child, int regno)
return
retval
;
}
int
peek_user
(
struct
task_struct
*
child
,
long
addr
,
long
data
)
{
/* read the word at location addr in the USER area. */
unsigned
long
tmp
;
if
((
addr
&
3
)
||
addr
<
0
)
return
-
EIO
;
tmp
=
0
;
/* Default return condition */
if
(
addr
<
MAX_REG_OFFSET
){
tmp
=
getreg
(
child
,
addr
);
}
else
if
((
addr
>=
offsetof
(
struct
user
,
u_debugreg
[
0
]))
&&
(
addr
<=
offsetof
(
struct
user
,
u_debugreg
[
7
]))){
addr
-=
offsetof
(
struct
user
,
u_debugreg
[
0
]);
addr
=
addr
>>
2
;
tmp
=
child
->
thread
.
arch
.
debugregs
[
addr
];
}
return
put_user
(
tmp
,
(
unsigned
long
*
)
data
);
}
struct
i387_fxsave_struct
{
unsigned
short
cwd
;
unsigned
short
swd
;
...
...
arch/um/sys-ppc/ptrace.c
浏览文件 @
13e65280
...
...
@@ -8,6 +8,25 @@ int putreg(struct task_struct *child, unsigned long regno,
return
0
;
}
int
poke_user
(
struct
task_struct
*
child
,
long
addr
,
long
data
)
{
if
((
addr
&
3
)
||
addr
<
0
)
return
-
EIO
;
if
(
addr
<
MAX_REG_OFFSET
)
return
putreg
(
child
,
addr
,
data
);
else
if
((
addr
>=
offsetof
(
struct
user
,
u_debugreg
[
0
]))
&&
(
addr
<=
offsetof
(
struct
user
,
u_debugreg
[
7
]))){
addr
-=
offsetof
(
struct
user
,
u_debugreg
[
0
]);
addr
=
addr
>>
2
;
if
((
addr
==
4
)
||
(
addr
==
5
))
return
-
EIO
;
child
->
thread
.
arch
.
debugregs
[
addr
]
=
data
;
return
0
;
}
return
-
EIO
;
}
unsigned
long
getreg
(
struct
task_struct
*
child
,
unsigned
long
regno
)
{
unsigned
long
retval
=
~
0UL
;
...
...
@@ -16,6 +35,27 @@ unsigned long getreg(struct task_struct *child, unsigned long regno)
return
retval
;
}
int
peek_user
(
struct
task_struct
*
child
,
long
addr
,
long
data
)
{
/* read the word at location addr in the USER area. */
unsigned
long
tmp
;
if
((
addr
&
3
)
||
addr
<
0
)
return
-
EIO
;
tmp
=
0
;
/* Default return condition */
if
(
addr
<
MAX_REG_OFFSET
){
tmp
=
getreg
(
child
,
addr
);
}
else
if
((
addr
>=
offsetof
(
struct
user
,
u_debugreg
[
0
]))
&&
(
addr
<=
offsetof
(
struct
user
,
u_debugreg
[
7
]))){
addr
-=
offsetof
(
struct
user
,
u_debugreg
[
0
]);
addr
=
addr
>>
2
;
tmp
=
child
->
thread
.
arch
.
debugregs
[
addr
];
}
return
put_user
(
tmp
,
(
unsigned
long
*
)
data
);
}
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically
...
...
arch/um/sys-x86_64/ptrace.c
浏览文件 @
13e65280
...
...
@@ -62,6 +62,27 @@ int putreg(struct task_struct *child, int regno, unsigned long value)
return
0
;
}
int
poke_user
(
struct
task_struct
*
child
,
long
addr
,
long
data
)
{
if
((
addr
&
3
)
||
addr
<
0
)
return
-
EIO
;
if
(
addr
<
MAX_REG_OFFSET
)
return
putreg
(
child
,
addr
,
data
);
#if 0 /* Need x86_64 debugregs handling */
else if((addr >= offsetof(struct user, u_debugreg[0])) &&
(addr <= offsetof(struct user, u_debugreg[7]))){
addr -= offsetof(struct user, u_debugreg[0]);
addr = addr >> 2;
if((addr == 4) || (addr == 5)) return -EIO;
child->thread.arch.debugregs[addr] = data;
return 0;
}
#endif
return
-
EIO
;
}
unsigned
long
getreg
(
struct
task_struct
*
child
,
int
regno
)
{
unsigned
long
retval
=
~
0UL
;
...
...
@@ -84,6 +105,29 @@ unsigned long getreg(struct task_struct *child, int regno)
return
retval
;
}
int
peek_user
(
struct
task_struct
*
child
,
long
addr
,
long
data
)
{
/* read the word at location addr in the USER area. */
unsigned
long
tmp
;
if
((
addr
&
3
)
||
addr
<
0
)
return
-
EIO
;
tmp
=
0
;
/* Default return condition */
if
(
addr
<
MAX_REG_OFFSET
){
tmp
=
getreg
(
child
,
addr
);
}
#if 0 /* Need x86_64 debugregs handling */
else if((addr >= offsetof(struct user, u_debugreg[0])) &&
(addr <= offsetof(struct user, u_debugreg[7]))){
addr -= offsetof(struct user, u_debugreg[0]);
addr = addr >> 2;
tmp = child->thread.arch.debugregs[addr];
}
#endif
return
put_user
(
tmp
,
(
unsigned
long
*
)
data
);
}
void
arch_switch
(
void
)
{
/* XXX
...
...
arch/um/sys-x86_64/signal.c
浏览文件 @
13e65280
...
...
@@ -168,7 +168,7 @@ int setup_signal_stack_si(unsigned long stack_top, int sig,
frame
=
(
struct
rt_sigframe
__user
*
)
round_down
(
stack_top
-
sizeof
(
struct
rt_sigframe
),
16
)
-
8
;
frame
-=
128
;
((
unsigned
char
*
)
frame
)
-=
128
;
if
(
!
access_ok
(
VERIFY_WRITE
,
fp
,
sizeof
(
struct
_fpstate
)))
goto
out
;
...
...
arch/um/sys-x86_64/syscalls.c
浏览文件 @
13e65280
...
...
@@ -44,6 +44,8 @@ long sys_modify_ldt_tt(int func, void *ptr, unsigned long bytecount)
#ifdef CONFIG_MODE_SKAS
extern
int
userspace_pid
[];
#include "skas_ptrace.h"
long
sys_modify_ldt_skas
(
int
func
,
void
*
ptr
,
unsigned
long
bytecount
)
{
struct
ptrace_ldt
ldt
;
...
...
drivers/block/rd.c
浏览文件 @
13e65280
...
...
@@ -74,7 +74,7 @@ static struct request_queue *rd_queue[CONFIG_BLK_DEV_RAM_COUNT];
* architecture-specific setup routine (from the stored boot sector
* information).
*/
static
int
rd_size
=
CONFIG_BLK_DEV_RAM_SIZE
;
/* Size of the RAM disks */
int
rd_size
=
CONFIG_BLK_DEV_RAM_SIZE
;
/* Size of the RAM disks */
/*
* It would be very desirable to have a soft-blocksize (that in the case
* of the ramdisk driver is also the hardblocksize ;) of PAGE_SIZE because
...
...
drivers/media/video/tuner-core.c
浏览文件 @
13e65280
...
...
@@ -357,8 +357,16 @@ tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
V4L2_TUNER_RADIO
!=
t
->
mode
)
set_tv_freq
(
client
,
400
*
16
);
t
->
mode
=
f
->
type
;
t
->
freq
=
f
->
frequency
;
set_freq
(
client
,
t
->
freq
);
set_freq
(
client
,
f
->
frequency
);
break
;
}
case
VIDIOC_G_FREQUENCY
:
{
struct
v4l2_frequency
*
f
=
arg
;
SWITCH_V4L2
;
f
->
type
=
t
->
mode
;
f
->
frequency
=
t
->
freq
;
break
;
}
case
VIDIOC_G_TUNER
:
...
...
@@ -368,6 +376,8 @@ tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
SWITCH_V4L2
;
if
(
V4L2_TUNER_RADIO
==
t
->
mode
&&
t
->
has_signal
)
tuner
->
signal
=
t
->
has_signal
(
client
);
tuner
->
rangelow
=
tv_range
[
0
]
*
16
;
tuner
->
rangehigh
=
tv_range
[
1
]
*
16
;
break
;
}
default:
...
...
drivers/s390/scsi/zfcp_aux.c
浏览文件 @
13e65280
...
...
@@ -52,7 +52,7 @@ static inline int zfcp_sg_list_copy_from_user(struct zfcp_sg_list *,
static
inline
int
zfcp_sg_list_copy_to_user
(
void
__user
*
,
struct
zfcp_sg_list
*
,
size_t
);
static
int
zfcp_cfdc_dev_ioctl
(
struct
file
*
,
unsigned
int
,
unsigned
long
);
static
long
zfcp_cfdc_dev_ioctl
(
struct
file
*
,
unsigned
int
,
unsigned
long
);
#define ZFCP_CFDC_IOC_MAGIC 0xDD
#define ZFCP_CFDC_IOC \
...
...
drivers/s390/scsi/zfcp_def.h
浏览文件 @
13e65280
...
...
@@ -61,7 +61,6 @@
#include <linux/mempool.h>
#include <linux/syscalls.h>
#include <linux/ioctl.h>
#include <linux/ioctl32.h>
/************************ DEBUG FLAGS *****************************************/
...
...
drivers/scsi/aacraid/linit.c
浏览文件 @
13e65280
...
...
@@ -450,7 +450,7 @@ static int aac_cfg_open(struct inode *inode, struct file *file)
}
}
return
0
;
return
err
;
}
/**
...
...
drivers/scsi/aic7xxx/aic7xxx_osm.c
浏览文件 @
13e65280
...
...
@@ -2335,8 +2335,6 @@ ahc_linux_free_target(struct ahc_softc *ahc, struct ahc_linux_target *targ)
AHC_TRANS_GOAL
,
/*paused*/
FALSE
);
ahc_update_neg_request
(
ahc
,
&
devinfo
,
tstate
,
tinfo
,
AHC_NEG_ALWAYS
);
ahc
->
platform_data
->
targets
[
target_offset
]
=
NULL
;
if
(
targ
->
inq_data
!=
NULL
)
free
(
targ
->
inq_data
,
M_DEVBUF
);
free
(
targ
,
M_DEVBUF
);
}
...
...
drivers/scsi/aic7xxx/aic7xxx_osm.h
浏览文件 @
13e65280
...
...
@@ -423,10 +423,6 @@ struct ahc_linux_device {
struct
ahc_linux_target
*
target
;
};
typedef
enum
{
AHC_INQ_VALID
=
0x02
,
}
ahc_linux_targ_flags
;
struct
ahc_linux_target
{
struct
ahc_linux_device
*
devices
[
AHC_NUM_LUNS
];
int
channel
;
...
...
@@ -434,8 +430,6 @@ struct ahc_linux_target {
int
refcount
;
struct
ahc_transinfo
last_tinfo
;
struct
ahc_softc
*
ahc
;
ahc_linux_targ_flags
flags
;
struct
scsi_inquiry_data
*
inq_data
;
};
/********************* Definitions Required by the Core ***********************/
...
...
drivers/scsi/qla2xxx/qla_attr.c
浏览文件 @
13e65280
...
...
@@ -300,7 +300,7 @@ qla2x00_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout)
rport
->
dev_loss_tmo
=
ha
->
port_down_retry_count
+
5
;
}
st
atic
st
ruct
fc_function_template
qla2xxx_transport_functions
=
{
struct
fc_function_template
qla2xxx_transport_functions
=
{
.
show_host_node_name
=
1
,
.
show_host_port_name
=
1
,
...
...
@@ -322,12 +322,6 @@ static struct fc_function_template qla2xxx_transport_functions = {
};
struct
scsi_transport_template
*
qla2x00_alloc_transport_tmpl
(
void
)
{
return
(
fc_attach_transport
(
&
qla2xxx_transport_functions
));
}
void
qla2x00_init_host_attr
(
scsi_qla_host_t
*
ha
)
{
...
...
drivers/scsi/qla2xxx/qla_gbl.h
浏览文件 @
13e65280
...
...
@@ -24,7 +24,6 @@
#define __QLA_GBL_H
#include <linux/interrupt.h>
#include <scsi/scsi_transport.h>
extern
void
qla2x00_remove_one
(
struct
pci_dev
*
);
extern
int
qla2x00_probe_one
(
struct
pci_dev
*
,
struct
qla_board_info
*
);
...
...
@@ -248,9 +247,10 @@ extern void qla2x00_cancel_io_descriptors(scsi_qla_host_t *);
/*
* Global Function Prototypes in qla_attr.c source file.
*/
struct
fc_function_template
;
extern
struct
fc_function_template
qla2xxx_transport_functions
;
extern
void
qla2x00_alloc_sysfs_attr
(
scsi_qla_host_t
*
);
extern
void
qla2x00_free_sysfs_attr
(
scsi_qla_host_t
*
);
extern
struct
scsi_transport_template
*
qla2x00_alloc_transport_tmpl
(
void
);
extern
void
qla2x00_init_host_attr
(
scsi_qla_host_t
*
);
extern
void
qla2x00_alloc_sysfs_attr
(
scsi_qla_host_t
*
);
extern
void
qla2x00_free_sysfs_attr
(
scsi_qla_host_t
*
);
...
...
drivers/scsi/qla2xxx/qla_os.c
浏览文件 @
13e65280
...
...
@@ -2350,7 +2350,8 @@ qla2x00_module_init(void)
#if DEBUG_QLA2100
strcat
(
qla2x00_version_str
,
"-debug"
);
#endif
qla2xxx_transport_template
=
qla2x00_alloc_transport_tmpl
();
qla2xxx_transport_template
=
fc_attach_transport
(
&
qla2xxx_transport_functions
);
if
(
!
qla2xxx_transport_template
)
return
-
ENODEV
;
...
...
drivers/scsi/scsi.c
浏览文件 @
13e65280
...
...
@@ -542,7 +542,7 @@ int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
* that the device is no longer present */
cmd
->
result
=
DID_NO_CONNECT
<<
16
;
atomic_inc
(
&
cmd
->
device
->
iorequest_cnt
);
scsi_done
(
cmd
);
__
scsi_done
(
cmd
);
/* return 0 (because the command has been processed) */
goto
out
;
}
...
...
drivers/scsi/scsi_transport_spi.c
浏览文件 @
13e65280
...
...
@@ -22,6 +22,7 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/workqueue.h>
#include <linux/blkdev.h>
#include <asm/semaphore.h>
#include <scsi/scsi.h>
#include "scsi_priv.h"
...
...
@@ -41,6 +42,11 @@
#define SPI_MAX_ECHO_BUFFER_SIZE 4096
#define DV_LOOPS 3
#define DV_TIMEOUT (10*HZ)
#define DV_RETRIES 3
/* should only need at most
* two cc/ua clears */
/* Private data accessors (keep these out of the header file) */
#define spi_dv_pending(x) (((struct spi_transport_attrs *)&(x)->starget_data)->dv_pending)
#define spi_dv_sem(x) (((struct spi_transport_attrs *)&(x)->starget_data)->dv_sem)
...
...
@@ -100,6 +106,29 @@ static int sprint_frac(char *dest, int value, int denom)
return
result
;
}
/* Modification of scsi_wait_req that will clear UNIT ATTENTION conditions
* resulting from (likely) bus and device resets */
static
void
spi_wait_req
(
struct
scsi_request
*
sreq
,
const
void
*
cmd
,
void
*
buffer
,
unsigned
bufflen
)
{
int
i
;
for
(
i
=
0
;
i
<
DV_RETRIES
;
i
++
)
{
sreq
->
sr_request
->
flags
|=
REQ_FAILFAST
;
scsi_wait_req
(
sreq
,
cmd
,
buffer
,
bufflen
,
DV_TIMEOUT
,
/* retries */
1
);
if
(
sreq
->
sr_result
&
DRIVER_SENSE
)
{
struct
scsi_sense_hdr
sshdr
;
if
(
scsi_request_normalize_sense
(
sreq
,
&
sshdr
)
&&
sshdr
.
sense_key
==
UNIT_ATTENTION
)
continue
;
}
break
;
}
}
static
struct
{
enum
spi_signal_type
value
;
char
*
name
;
...
...
@@ -378,11 +407,6 @@ static CLASS_DEVICE_ATTR(signalling, S_IRUGO | S_IWUSR,
if(i->f->set_##x) \
i->f->set_##x(sdev->sdev_target, y)
#define DV_LOOPS 3
#define DV_TIMEOUT (10*HZ)
#define DV_RETRIES 3
/* should only need at most
* two cc/ua clears */
enum
spi_compare_returns
{
SPI_COMPARE_SUCCESS
,
SPI_COMPARE_FAILURE
,
...
...
@@ -446,8 +470,7 @@ spi_dv_device_echo_buffer(struct scsi_request *sreq, u8 *buffer,
for
(
r
=
0
;
r
<
retries
;
r
++
)
{
sreq
->
sr_cmd_len
=
0
;
/* wait_req to fill in */
sreq
->
sr_data_direction
=
DMA_TO_DEVICE
;
scsi_wait_req
(
sreq
,
spi_write_buffer
,
buffer
,
len
,
DV_TIMEOUT
,
DV_RETRIES
);
spi_wait_req
(
sreq
,
spi_write_buffer
,
buffer
,
len
);
if
(
sreq
->
sr_result
||
!
scsi_device_online
(
sdev
))
{
struct
scsi_sense_hdr
sshdr
;
...
...
@@ -471,8 +494,7 @@ spi_dv_device_echo_buffer(struct scsi_request *sreq, u8 *buffer,
memset
(
ptr
,
0
,
len
);
sreq
->
sr_cmd_len
=
0
;
/* wait_req to fill in */
sreq
->
sr_data_direction
=
DMA_FROM_DEVICE
;
scsi_wait_req
(
sreq
,
spi_read_buffer
,
ptr
,
len
,
DV_TIMEOUT
,
DV_RETRIES
);
spi_wait_req
(
sreq
,
spi_read_buffer
,
ptr
,
len
);
scsi_device_set_state
(
sdev
,
SDEV_QUIESCE
);
if
(
memcmp
(
buffer
,
ptr
,
len
)
!=
0
)
...
...
@@ -500,8 +522,7 @@ spi_dv_device_compare_inquiry(struct scsi_request *sreq, u8 *buffer,
memset
(
ptr
,
0
,
len
);
scsi_wait_req
(
sreq
,
spi_inquiry
,
ptr
,
len
,
DV_TIMEOUT
,
DV_RETRIES
);
spi_wait_req
(
sreq
,
spi_inquiry
,
ptr
,
len
);
if
(
sreq
->
sr_result
||
!
scsi_device_online
(
sdev
))
{
scsi_device_set_state
(
sdev
,
SDEV_QUIESCE
);
...
...
@@ -593,8 +614,7 @@ spi_dv_device_get_echo_buffer(struct scsi_request *sreq, u8 *buffer)
* (reservation conflict, device not ready, etc) just
* skip the write tests */
for
(
l
=
0
;
;
l
++
)
{
scsi_wait_req
(
sreq
,
spi_test_unit_ready
,
NULL
,
0
,
DV_TIMEOUT
,
DV_RETRIES
);
spi_wait_req
(
sreq
,
spi_test_unit_ready
,
NULL
,
0
);
if
(
sreq
->
sr_result
)
{
if
(
l
>=
3
)
...
...
@@ -608,8 +628,7 @@ spi_dv_device_get_echo_buffer(struct scsi_request *sreq, u8 *buffer)
sreq
->
sr_cmd_len
=
0
;
sreq
->
sr_data_direction
=
DMA_FROM_DEVICE
;
scsi_wait_req
(
sreq
,
spi_read_buffer_descriptor
,
buffer
,
4
,
DV_TIMEOUT
,
DV_RETRIES
);
spi_wait_req
(
sreq
,
spi_read_buffer_descriptor
,
buffer
,
4
);
if
(
sreq
->
sr_result
)
/* Device has no echo buffer */
...
...
drivers/scsi/sr_ioctl.c
浏览文件 @
13e65280
...
...
@@ -281,6 +281,9 @@ int sr_get_mcn(struct cdrom_device_info *cdi, struct cdrom_mcn *mcn)
char
*
buffer
=
kmalloc
(
32
,
GFP_KERNEL
|
SR_GFP_DMA
(
cd
));
int
result
;
if
(
!
buffer
)
return
-
ENOMEM
;
memset
(
&
cgc
,
0
,
sizeof
(
struct
packet_command
));
cgc
.
cmd
[
0
]
=
GPCMD_READ_SUBCHANNEL
;
cgc
.
cmd
[
2
]
=
0x40
;
/* I do want the subchannel info */
...
...
drivers/scsi/sym53c8xx_2/sym_glue.c
浏览文件 @
13e65280
...
...
@@ -2038,8 +2038,9 @@ static void sym2_set_period(struct scsi_target *starget, int period)
struct
sym_hcb
*
np
=
sym_get_hcb
(
shost
);
struct
sym_tcb
*
tp
=
&
np
->
target
[
starget
->
id
];
/* have to have DT for these transfers */
if
(
period
<=
np
->
minsync
)
/* have to have DT for these transfers, but DT will also
* set width, so check that this is allowed */
if
(
period
<=
np
->
minsync
&&
spi_width
(
starget
))
tp
->
tgoal
.
dt
=
1
;
tp
->
tgoal
.
period
=
period
;
...
...
drivers/serial/8250_pci.c
浏览文件 @
13e65280
...
...
@@ -1009,6 +1009,8 @@ get_pci_irq(struct pci_dev *dev, struct pci_board *board, int idx)
* n = number of serial ports
* baud = baud rate
*
* This table is sorted by (in order): baud, bt, bn, n.
*
* Please note: in theory if n = 1, _bt infix should make no difference.
* ie, pbn_b0_1_115200 is the same as pbn_b0_bt_1_115200
*/
...
...
fs/partitions/msdos.c
浏览文件 @
13e65280
...
...
@@ -114,9 +114,6 @@ parse_extended(struct parsed_partitions *state, struct block_device *bdev,
*/
for
(
i
=
0
;
i
<
4
;
i
++
,
p
++
)
{
u32
offs
,
size
,
next
;
if
(
SYS_IND
(
p
)
==
0
)
continue
;
if
(
!
NR_SECTS
(
p
)
||
is_extended_partition
(
p
))
continue
;
...
...
@@ -433,8 +430,6 @@ int msdos_partition(struct parsed_partitions *state, struct block_device *bdev)
for
(
slot
=
1
;
slot
<=
4
;
slot
++
,
p
++
)
{
u32
start
=
START_SECT
(
p
)
*
sector_size
;
u32
size
=
NR_SECTS
(
p
)
*
sector_size
;
if
(
SYS_IND
(
p
)
==
0
)
continue
;
if
(
!
size
)
continue
;
if
(
is_extended_partition
(
p
))
{
...
...
include/asm-ppc64/xics.h
浏览文件 @
13e65280
...
...
@@ -30,7 +30,4 @@ struct xics_ipi_struct {
extern
struct
xics_ipi_struct
xics_ipi_message
[
NR_CPUS
]
__cacheline_aligned
;
extern
unsigned
int
default_distrib_server
;
extern
unsigned
int
interrupt_server_size
;
#endif
/* _PPC64_KERNEL_XICS_H */
include/asm-um/elf.h
浏览文件 @
13e65280
/*
* Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com)
* Licensed under the GPL
*/
#ifndef __UM_ELF_I386_H
#define __UM_ELF_I386_H
#include "user.h"
#if defined(CONFIG_UML_X86) && !defined(CONFIG_64BIT)
#define R_386_NONE 0
#define R_386_32 1
#define R_386_PC32 2
#define R_386_GOT32 3
#define R_386_PLT32 4
#define R_386_COPY 5
#define R_386_GLOB_DAT 6
#define R_386_JMP_SLOT 7
#define R_386_RELATIVE 8
#define R_386_GOTOFF 9
#define R_386_GOTPC 10
#define R_386_NUM 11
#elif defined(CONFIG_UML_X86) && defined(CONFIG_64BIT)
/* x86-64 relocation types */
#define R_X86_64_NONE 0
/* No reloc */
#define R_X86_64_64 1
/* Direct 64 bit */
#define R_X86_64_PC32 2
/* PC relative 32 bit signed */
#define R_X86_64_GOT32 3
/* 32 bit GOT entry */
#define R_X86_64_PLT32 4
/* 32 bit PLT address */
#define R_X86_64_COPY 5
/* Copy symbol at runtime */
#define R_X86_64_GLOB_DAT 6
/* Create GOT entry */
#define R_X86_64_JUMP_SLOT 7
/* Create PLT entry */
#define R_X86_64_RELATIVE 8
/* Adjust by program base */
#define R_X86_64_GOTPCREL 9
/* 32 bit signed pc relative
offset to GOT */
#define R_X86_64_32 10
/* Direct 32 bit zero extended */
#define R_X86_64_32S 11
/* Direct 32 bit sign extended */
#define R_X86_64_16 12
/* Direct 16 bit zero extended */
#define R_X86_64_PC16 13
/* 16 bit sign extended pc relative */
#define R_X86_64_8 14
/* Direct 8 bit sign extended */
#define R_X86_64_PC8 15
/* 8 bit sign extended pc relative */
#define R_X86_64_NUM 16
#endif
typedef
unsigned
long
elf_greg_t
;
#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
typedef
elf_greg_t
elf_gregset_t
[
ELF_NGREG
];
typedef
struct
user_i387_struct
elf_fpregset_t
;
/*
* This is used to ensure we don't load something for the wrong architecture.
*/
#define elf_check_arch(x) \
(((x)->e_machine == EM_386) || ((x)->e_machine == EM_486))
#define ELF_CLASS ELFCLASS32
#define ELF_DATA ELFDATA2LSB
#define ELF_ARCH EM_386
#define ELF_PLAT_INIT(regs, load_addr) do { \
PT_REGS_EBX(regs) = 0; \
PT_REGS_ECX(regs) = 0; \
PT_REGS_EDX(regs) = 0; \
PT_REGS_ESI(regs) = 0; \
PT_REGS_EDI(regs) = 0; \
PT_REGS_EBP(regs) = 0; \
PT_REGS_EAX(regs) = 0; \
} while(0)
#define USE_ELF_CORE_DUMP
#define ELF_EXEC_PAGESIZE 4096
#define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3)
/* Shamelessly stolen from include/asm-i386/elf.h */
#define ELF_CORE_COPY_REGS(pr_reg, regs) do { \
pr_reg[0] = PT_REGS_EBX(regs); \
pr_reg[1] = PT_REGS_ECX(regs); \
pr_reg[2] = PT_REGS_EDX(regs); \
pr_reg[3] = PT_REGS_ESI(regs); \
pr_reg[4] = PT_REGS_EDI(regs); \
pr_reg[5] = PT_REGS_EBP(regs); \
pr_reg[6] = PT_REGS_EAX(regs); \
pr_reg[7] = PT_REGS_DS(regs); \
pr_reg[8] = PT_REGS_ES(regs); \
/* fake once used fs and gs selectors? */
\
pr_reg[9] = PT_REGS_DS(regs); \
pr_reg[10] = PT_REGS_DS(regs); \
pr_reg[11] = PT_REGS_SYSCALL_NR(regs); \
pr_reg[12] = PT_REGS_IP(regs); \
pr_reg[13] = PT_REGS_CS(regs); \
pr_reg[14] = PT_REGS_EFLAGS(regs); \
pr_reg[15] = PT_REGS_SP(regs); \
pr_reg[16] = PT_REGS_SS(regs); \
} while(0);
extern
long
elf_aux_hwcap
;
#define ELF_HWCAP (elf_aux_hwcap)
extern
char
*
elf_aux_platform
;
#define ELF_PLATFORM (elf_aux_platform)
#define SET_PERSONALITY(ex, ibcs2) do ; while(0)
extern
unsigned
long
vsyscall_ehdr
;
extern
unsigned
long
vsyscall_end
;
extern
unsigned
long
__kernel_vsyscall
;
#define VSYSCALL_BASE vsyscall_ehdr
#define VSYSCALL_END vsyscall_end
/*
* This is the range that is readable by user mode, and things
* acting like user mode such as get_user_pages.
*/
#define FIXADDR_USER_START VSYSCALL_BASE
#define FIXADDR_USER_END VSYSCALL_END
/*
* Architecture-neutral AT_ values in 0-17, leave some room
* for more of them, start the x86-specific ones at 32.
*/
#define AT_SYSINFO 32
#define AT_SYSINFO_EHDR 33
#define ARCH_DLINFO \
do { \
if ( vsyscall_ehdr ) { \
NEW_AUX_ENT(AT_SYSINFO, __kernel_vsyscall); \
NEW_AUX_ENT(AT_SYSINFO_EHDR, vsyscall_ehdr); \
} \
} while (0)
/*
* These macros parameterize elf_core_dump in fs/binfmt_elf.c to write out
* extra segments containing the vsyscall DSO contents. Dumping its
* contents makes post-mortem fully interpretable later without matching up
* the same kernel and hardware config to see what PC values meant.
* Dumping its extra ELF program headers includes all the other information
* a debugger needs to easily find how the vsyscall DSO was being used.
*/
#define ELF_CORE_EXTRA_PHDRS \
(vsyscall_ehdr ? (((struct elfhdr *)vsyscall_ehdr)->e_phnum) : 0 )
#define ELF_CORE_WRITE_EXTRA_PHDRS \
if ( vsyscall_ehdr ) { \
const struct elfhdr *const ehdrp = (struct elfhdr *)vsyscall_ehdr; \
const struct elf_phdr *const phdrp = \
(const struct elf_phdr *) (vsyscall_ehdr + ehdrp->e_phoff); \
int i; \
Elf32_Off ofs = 0; \
for (i = 0; i < ehdrp->e_phnum; ++i) { \
struct elf_phdr phdr = phdrp[i]; \
if (phdr.p_type == PT_LOAD) { \
ofs = phdr.p_offset = offset; \
offset += phdr.p_filesz; \
} \
else \
phdr.p_offset += ofs; \
phdr.p_paddr = 0;
/* match other core phdrs */
\
DUMP_WRITE(&phdr, sizeof(phdr)); \
} \
}
#define ELF_CORE_WRITE_EXTRA_DATA \
if ( vsyscall_ehdr ) { \
const struct elfhdr *const ehdrp = (struct elfhdr *)vsyscall_ehdr; \
const struct elf_phdr *const phdrp = \
(const struct elf_phdr *) (vsyscall_ehdr + ehdrp->e_phoff); \
int i; \
for (i = 0; i < ehdrp->e_phnum; ++i) { \
if (phdrp[i].p_type == PT_LOAD) \
DUMP_WRITE((void *) phdrp[i].p_vaddr, \
phdrp[i].p_filesz); \
} \
}
#endif
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically
* adjust the settings for this buffer only. This must remain at the end
* of the file.
* ---------------------------------------------------------------------------
* Local variables:
* c-file-style: "linux"
* End:
*/
include/asm-um/setup.h
浏览文件 @
13e65280
...
...
@@ -2,7 +2,8 @@
#define SETUP_H_INCLUDED
/* POSIX mandated with _POSIX_ARG_MAX that we can rely on 4096 chars in the
* command line, so this choice is ok.*/
* command line, so this choice is ok.
*/
#define COMMAND_LINE_SIZE 4096
...
...
sound/pci/via82xx.c
浏览文件 @
13e65280
...
...
@@ -1836,7 +1836,7 @@ static void __devinit snd_via82xx_proc_init(via82xx_t *chip)
*
*/
static
int
__devinit
snd_via82xx_chip_init
(
via82xx_t
*
chip
)
static
int
snd_via82xx_chip_init
(
via82xx_t
*
chip
)
{
unsigned
int
val
;
int
max_count
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录