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
c90176df
Commit
c90176df
authored
Feb 16, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Manual merge
parents
a6f5ccdf
6a8061e8
Changes
37
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
641 additions
and
746 deletions
+641
-746
arch/arm/common/sa1111-pcibuf.c
arch/arm/common/sa1111-pcibuf.c
+1
-1
arch/arm/common/sa1111.c
arch/arm/common/sa1111.c
+6
-4
arch/arm/def-configs/epxa10db
arch/arm/def-configs/epxa10db
+180
-313
arch/arm/kernel/init_task.c
arch/arm/kernel/init_task.c
+1
-0
arch/arm/kernel/irq.c
arch/arm/kernel/irq.c
+55
-6
arch/arm/kernel/ptrace.c
arch/arm/kernel/ptrace.c
+9
-6
arch/arm/kernel/ptrace.h
arch/arm/kernel/ptrace.h
+2
-16
arch/arm/kernel/signal.c
arch/arm/kernel/signal.c
+47
-131
arch/arm/kernel/traps.c
arch/arm/kernel/traps.c
+9
-4
arch/arm/lib/backtrace.S
arch/arm/lib/backtrace.S
+14
-5
arch/arm/mach-epxa10db/irq.c
arch/arm/mach-epxa10db/irq.c
+3
-0
arch/arm/mach-footbridge/irq.c
arch/arm/mach-footbridge/irq.c
+1
-0
arch/arm/mach-footbridge/isa-irq.c
arch/arm/mach-footbridge/isa-irq.c
+1
-0
arch/arm/mach-iop310/iop310-irq.c
arch/arm/mach-iop310/iop310-irq.c
+1
-0
arch/arm/mach-iop310/iop310-pci.c
arch/arm/mach-iop310/iop310-pci.c
+2
-0
arch/arm/mach-iop310/iq80310-irq.c
arch/arm/mach-iop310/iq80310-irq.c
+1
-0
arch/arm/mach-iop310/xs80200-irq.c
arch/arm/mach-iop310/xs80200-irq.c
+1
-0
arch/arm/mach-pxa/irq.c
arch/arm/mach-pxa/irq.c
+0
-14
arch/arm/mach-rpc/irq.c
arch/arm/mach-rpc/irq.c
+1
-0
arch/arm/mach-sa1100/irq.c
arch/arm/mach-sa1100/irq.c
+1
-17
arch/arm/mach-sa1100/xp860.c
arch/arm/mach-sa1100/xp860.c
+1
-1
arch/arm/mm/consistent.c
arch/arm/mm/consistent.c
+1
-1
arch/arm/mm/proc-xscale.S
arch/arm/mm/proc-xscale.S
+1
-1
arch/arm/vmlinux-armv.lds.in
arch/arm/vmlinux-armv.lds.in
+4
-0
drivers/acorn/scsi/acornscsi.c
drivers/acorn/scsi/acornscsi.c
+54
-54
drivers/acorn/scsi/fas216.c
drivers/acorn/scsi/fas216.c
+100
-59
drivers/acorn/scsi/queue.c
drivers/acorn/scsi/queue.c
+4
-4
drivers/acorn/scsi/scsi.h
drivers/acorn/scsi/scsi.h
+2
-2
drivers/char/watchdog/wdt285.c
drivers/char/watchdog/wdt285.c
+96
-75
drivers/char/watchdog/wdt977.c
drivers/char/watchdog/wdt977.c
+16
-16
drivers/input/serio/sa1111ps2.c
drivers/input/serio/sa1111ps2.c
+2
-0
drivers/mtd/maps/sa1100-flash.c
drivers/mtd/maps/sa1100-flash.c
+6
-5
include/asm-arm/arch-iop310/serial.h
include/asm-arm/arch-iop310/serial.h
+2
-2
include/asm-arm/mach/irq.h
include/asm-arm/mach/irq.h
+6
-2
include/asm-arm/proc-armv/processor.h
include/asm-arm/proc-armv/processor.h
+1
-1
include/asm-arm/proc-armv/system.h
include/asm-arm/proc-armv/system.h
+8
-3
include/asm-arm/signal.h
include/asm-arm/signal.h
+1
-3
No files found.
arch/arm/common/sa1111-pcibuf.c
View file @
c90176df
...
...
@@ -54,7 +54,7 @@ struct safe_buffer {
dma_addr_t
safe_dma_addr
;
};
LIST_HEAD
(
safe_buffers
);
static
LIST_HEAD
(
safe_buffers
);
#define SIZE_SMALL 1024
...
...
arch/arm/common/sa1111.c
View file @
c90176df
...
...
@@ -218,7 +218,7 @@ static void sa1111_unmask_lowirq(unsigned int irq)
* be triggered. In fact, its very difficult, if not impossible to get
* INTSET to re-trigger the interrupt.
*/
static
void
sa1111_rerun
_lowirq
(
unsigned
int
irq
)
static
int
sa1111_retrigger
_lowirq
(
unsigned
int
irq
)
{
unsigned
int
mask
=
SA1111_IRQMASK_LO
(
irq
);
int
i
;
...
...
@@ -233,6 +233,7 @@ static void sa1111_rerun_lowirq(unsigned int irq)
if
(
i
==
8
)
printk
(
KERN_ERR
"Danger Will Robinson: failed to "
"re-trigger IRQ%d
\n
"
,
irq
);
return
i
==
8
?
-
1
:
0
;
}
static
int
sa1111_type_lowirq
(
unsigned
int
irq
,
unsigned
int
flags
)
...
...
@@ -270,7 +271,7 @@ static struct irqchip sa1111_low_chip = {
.
ack
=
sa1111_ack_irq
,
.
mask
=
sa1111_mask_lowirq
,
.
unmask
=
sa1111_unmask_lowirq
,
.
re
run
=
sa1111_rerun
_lowirq
,
.
re
trigger
=
sa1111_retrigger
_lowirq
,
.
type
=
sa1111_type_lowirq
,
.
wake
=
sa1111_wake_lowirq
,
};
...
...
@@ -292,7 +293,7 @@ static void sa1111_unmask_highirq(unsigned int irq)
* be triggered. In fact, its very difficult, if not impossible to get
* INTSET to re-trigger the interrupt.
*/
static
void
sa1111_rerun
_highirq
(
unsigned
int
irq
)
static
int
sa1111_retrigger
_highirq
(
unsigned
int
irq
)
{
unsigned
int
mask
=
SA1111_IRQMASK_HI
(
irq
);
int
i
;
...
...
@@ -307,6 +308,7 @@ static void sa1111_rerun_highirq(unsigned int irq)
if
(
i
==
8
)
printk
(
KERN_ERR
"Danger Will Robinson: failed to "
"re-trigger IRQ%d
\n
"
,
irq
);
return
i
==
8
?
-
1
:
0
;
}
static
int
sa1111_type_highirq
(
unsigned
int
irq
,
unsigned
int
flags
)
...
...
@@ -344,7 +346,7 @@ static struct irqchip sa1111_high_chip = {
.
ack
=
sa1111_ack_irq
,
.
mask
=
sa1111_mask_highirq
,
.
unmask
=
sa1111_unmask_highirq
,
.
re
run
=
sa1111_rerun
_highirq
,
.
re
trigger
=
sa1111_retrigger
_highirq
,
.
type
=
sa1111_type_highirq
,
.
wake
=
sa1111_wake_highirq
,
};
...
...
arch/arm/def-configs/epxa10db
View file @
c90176df
This diff is collapsed.
Click to expand it.
arch/arm/kernel/init_task.c
View file @
c90176df
...
...
@@ -13,6 +13,7 @@
static
struct
fs_struct
init_fs
=
INIT_FS
;
static
struct
files_struct
init_files
=
INIT_FILES
;
static
struct
signal_struct
init_signals
=
INIT_SIGNALS
(
init_signals
);
static
struct
sighand_struct
init_sighand
=
INIT_SIGHAND
(
init_sighand
);
struct
mm_struct
init_mm
=
INIT_MM
(
init_mm
);
/*
...
...
arch/arm/kernel/irq.c
View file @
c90176df
...
...
@@ -29,6 +29,7 @@
#include <linux/init.h>
#include <linux/seq_file.h>
#include <linux/errno.h>
#include <linux/list.h>
#include <asm/irq.h>
#include <asm/system.h>
...
...
@@ -45,6 +46,7 @@
static
volatile
unsigned
long
irq_err_count
;
static
spinlock_t
irq_controller_lock
;
static
LIST_HEAD
(
irq_pending
);
struct
irqdesc
irq_desc
[
NR_IRQS
];
void
(
*
init_arch_irq
)(
void
)
__initdata
=
NULL
;
...
...
@@ -69,9 +71,10 @@ static struct irqchip bad_chip = {
};
static
struct
irqdesc
bad_irq_desc
=
{
.
chip
=
&
bad_chip
,
.
handle
=
do_bad_IRQ
,
.
depth
=
1
,
.
chip
=
&
bad_chip
,
.
handle
=
do_bad_IRQ
,
.
pend
=
LIST_HEAD_INIT
(
bad_irq_desc
.
pend
),
.
disable_depth
=
1
,
};
/**
...
...
@@ -90,6 +93,7 @@ void disable_irq(unsigned int irq)
spin_lock_irqsave
(
&
irq_controller_lock
,
flags
);
desc
->
disable_depth
++
;
list_del_init
(
&
desc
->
pend
);
spin_unlock_irqrestore
(
&
irq_controller_lock
,
flags
);
}
...
...
@@ -122,9 +126,11 @@ void enable_irq(unsigned int irq)
* from here since the caller might be in an
* interrupt-protected region.
*/
if
(
desc
->
pending
)
{
if
(
desc
->
pending
&&
list_empty
(
&
desc
->
pend
)
)
{
desc
->
pending
=
0
;
desc
->
chip
->
rerun
(
irq
);
if
(
!
desc
->
chip
->
retrigger
||
desc
->
chip
->
retrigger
(
irq
))
list_add
(
&
desc
->
pend
,
&
irq_pending
);
}
}
spin_unlock_irqrestore
(
&
irq_controller_lock
,
flags
);
...
...
@@ -346,6 +352,40 @@ do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
}
}
static
void
do_pending_irqs
(
struct
pt_regs
*
regs
)
{
struct
list_head
head
,
*
l
,
*
n
;
do
{
struct
irqdesc
*
desc
;
/*
* First, take the pending interrupts off the list.
* The act of calling the handlers may add some IRQs
* back onto the list.
*/
head
=
irq_pending
;
INIT_LIST_HEAD
(
&
irq_pending
);
head
.
next
->
prev
=
&
head
;
head
.
prev
->
next
=
&
head
;
/*
* Now run each entry. We must delete it from our
* list before calling the handler.
*/
list_for_each_safe
(
l
,
n
,
&
head
)
{
desc
=
list_entry
(
l
,
struct
irqdesc
,
pend
);
list_del_init
(
&
desc
->
pend
);
desc
->
handle
(
desc
-
irq_desc
,
desc
,
regs
);
}
/*
* The list must be empty.
*/
BUG_ON
(
!
list_empty
(
&
head
));
}
while
(
!
list_empty
(
&
irq_pending
));
}
/*
* do_IRQ handles all hardware IRQ's. Decoded IRQs should not
* come via this function. Instead, they should provide their
...
...
@@ -365,6 +405,13 @@ asmlinkage void asm_do_IRQ(int irq, struct pt_regs *regs)
irq_enter
();
spin_lock
(
&
irq_controller_lock
);
desc
->
handle
(
irq
,
desc
,
regs
);
/*
* Now re-run any pending interrupts.
*/
if
(
!
list_empty
(
&
irq_pending
))
do_pending_irqs
(
regs
);
spin_unlock
(
&
irq_controller_lock
);
irq_exit
();
}
...
...
@@ -740,8 +787,10 @@ void __init init_IRQ(void)
extern
void
init_dma
(
void
);
int
irq
;
for
(
irq
=
0
,
desc
=
irq_desc
;
irq
<
NR_IRQS
;
irq
++
,
desc
++
)
for
(
irq
=
0
,
desc
=
irq_desc
;
irq
<
NR_IRQS
;
irq
++
,
desc
++
)
{
*
desc
=
bad_irq_desc
;
INIT_LIST_HEAD
(
&
desc
->
pend
);
}
init_arch_irq
();
init_dma
();
...
...
arch/arm/kernel/ptrace.c
View file @
c90176df
...
...
@@ -446,7 +446,7 @@ void ptrace_set_bpt(struct task_struct *child)
* Ensure no single-step breakpoint is pending. Returns non-zero
* value if child was being single-stepped.
*/
void
__
ptrace_cancel_bpt
(
struct
task_struct
*
child
)
void
ptrace_cancel_bpt
(
struct
task_struct
*
child
)
{
int
i
,
nsaved
=
child
->
thread
.
debug
.
nsaved
;
...
...
@@ -468,7 +468,8 @@ void __ptrace_cancel_bpt(struct task_struct *child)
*/
void
ptrace_disable
(
struct
task_struct
*
child
)
{
__ptrace_cancel_bpt
(
child
);
child
->
ptrace
&=
~
PT_SINGLESTEP
;
ptrace_cancel_bpt
(
child
);
}
/*
...
...
@@ -486,7 +487,7 @@ void ptrace_break(struct task_struct *tsk, struct pt_regs *regs)
if
(
tsk
->
thread
.
debug
.
nsaved
==
0
)
printk
(
KERN_ERR
"ptrace: bogus breakpoint trap
\n
"
);
__
ptrace_cancel_bpt
(
tsk
);
ptrace_cancel_bpt
(
tsk
);
info
.
si_signo
=
SIGTRAP
;
info
.
si_errno
=
0
;
...
...
@@ -637,7 +638,8 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
clear_tsk_thread_flag
(
child
,
TIF_SYSCALL_TRACE
);
child
->
exit_code
=
data
;
/* make sure single-step breakpoint is gone. */
__ptrace_cancel_bpt
(
child
);
child
->
ptrace
&=
~
PT_SINGLESTEP
;
ptrace_cancel_bpt
(
child
);
wake_up_process
(
child
);
ret
=
0
;
break
;
...
...
@@ -649,7 +651,8 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
*/
case
PTRACE_KILL
:
/* make sure single-step breakpoint is gone. */
__ptrace_cancel_bpt
(
child
);
child
->
ptrace
&=
~
PT_SINGLESTEP
;
ptrace_cancel_bpt
(
child
);
if
(
child
->
state
!=
TASK_ZOMBIE
)
{
child
->
exit_code
=
SIGKILL
;
wake_up_process
(
child
);
...
...
@@ -664,7 +667,7 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
ret
=
-
EIO
;
if
((
unsigned
long
)
data
>
_NSIG
)
break
;
child
->
thread
.
debug
.
nsaved
=
-
1
;
child
->
ptrace
|=
PT_SINGLESTEP
;
clear_tsk_thread_flag
(
child
,
TIF_SYSCALL_TRACE
);
child
->
exit_code
=
data
;
/* give it a chance to run. */
...
...
arch/arm/kernel/ptrace.h
View file @
c90176df
/*
* linux/arch/arm/kernel/ptrace.h
*
* Copyright (C) 2000-200
2
Russell King
* Copyright (C) 2000-200
3
Russell King
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
extern
void
__
ptrace_cancel_bpt
(
struct
task_struct
*
);
extern
void
ptrace_cancel_bpt
(
struct
task_struct
*
);
extern
void
ptrace_set_bpt
(
struct
task_struct
*
);
extern
void
ptrace_break
(
struct
task_struct
*
,
struct
pt_regs
*
);
/*
* Clear a breakpoint, if one exists.
*/
static
inline
int
ptrace_cancel_bpt
(
struct
task_struct
*
tsk
)
{
int
nsaved
=
tsk
->
thread
.
debug
.
nsaved
;
if
(
nsaved
)
__ptrace_cancel_bpt
(
tsk
);
return
nsaved
;
}
arch/arm/kernel/signal.c
View file @
c90176df
...
...
@@ -216,8 +216,10 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs)
goto
badframe
;
/* Send SIGTRAP if we're single-stepping */
if
(
ptrace_cancel_bpt
(
current
))
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
{
ptrace_cancel_bpt
(
current
);
send_sig
(
SIGTRAP
,
current
,
1
);
}
return
regs
->
ARM_r0
;
...
...
@@ -256,8 +258,10 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
goto
badframe
;
/* Send SIGTRAP if we're single-stepping */
if
(
ptrace_cancel_bpt
(
current
))
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
{
ptrace_cancel_bpt
(
current
);
send_sig
(
SIGTRAP
,
current
,
1
);
}
return
regs
->
ARM_r0
;
...
...
@@ -441,18 +445,47 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,
return
err
;
}
static
inline
void
restart_syscall
(
struct
pt_regs
*
regs
)
{
regs
->
ARM_r0
=
regs
->
ARM_ORIG_r0
;
regs
->
ARM_pc
-=
thumb_mode
(
regs
)
?
2
:
4
;
}
/*
* OK, we're invoking a handler
*/
static
void
handle_signal
(
unsigned
long
sig
,
s
truct
k_sigaction
*
ka
,
s
iginfo_t
*
info
,
sigset_t
*
oldset
,
struct
pt_regs
*
regs
)
handle_signal
(
unsigned
long
sig
,
s
iginfo_t
*
info
,
sigset_t
*
oldset
,
s
truct
pt_regs
*
regs
,
int
syscall
)
{
struct
thread_info
*
thread
=
current_thread_info
();
struct
task_struct
*
tsk
=
current
;
struct
k_sigaction
*
ka
=
&
tsk
->
sighand
->
action
[
sig
-
1
];
int
usig
=
sig
;
int
ret
;
/*
* If we were from a system call, check for system call restarting...
*/
if
(
syscall
)
{
switch
(
regs
->
ARM_r0
)
{
case
-
ERESTART_RESTARTBLOCK
:
current_thread_info
()
->
restart_block
.
fn
=
do_no_restart_syscall
;
case
-
ERESTARTNOHAND
:
regs
->
ARM_r0
=
-
EINTR
;
break
;
case
-
ERESTARTSYS
:
if
(
!
(
ka
->
sa
.
sa_flags
&
SA_RESTART
))
{
regs
->
ARM_r0
=
-
EINTR
;
break
;
}
/* fallthrough */
case
-
ERESTARTNOINTR
:
restart_syscall
(
regs
);
}
}
/*
* translate the signal
*/
...
...
@@ -504,7 +537,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
static
int
do_signal
(
sigset_t
*
oldset
,
struct
pt_regs
*
regs
,
int
syscall
)
{
siginfo_t
info
;
int
si
ngle_stepping
;
int
si
gnr
;
/*
* We want the common case to go fast, which
...
...
@@ -515,130 +548,14 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
if
(
!
user_mode
(
regs
))
return
0
;
single_stepping
=
ptrace_cancel_bpt
(
current
);
for
(;;)
{
unsigned
long
signr
=
0
;
struct
k_sigaction
*
ka
;
spin_lock_irq
(
&
current
->
sighand
->
siglock
);
signr
=
dequeue_signal
(
current
,
&
current
->
blocked
,
&
info
);
spin_unlock_irq
(
&
current
->
sighand
->
siglock
);
if
(
!
signr
)
break
;
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
ptrace_cancel_bpt
(
current
);
if
((
current
->
ptrace
&
PT_PTRACED
)
&&
signr
!=
SIGKILL
)
{
/* Let the debugger run. */
current
->
exit_code
=
signr
;
set_current_state
(
TASK_STOPPED
);
notify_parent
(
current
,
SIGCHLD
);
schedule
();
single_stepping
|=
ptrace_cancel_bpt
(
current
);
/* We're back. Did the debugger cancel the sig? */
signr
=
current
->
exit_code
;
if
(
signr
==
0
)
continue
;
current
->
exit_code
=
0
;
/* The debugger continued. Ignore SIGSTOP. */
if
(
signr
==
SIGSTOP
)
continue
;
/* Update the siginfo structure. Is this good? */
if
(
signr
!=
info
.
si_signo
)
{
info
.
si_signo
=
signr
;
info
.
si_errno
=
0
;
info
.
si_code
=
SI_USER
;
info
.
si_pid
=
current
->
parent
->
pid
;
info
.
si_uid
=
current
->
parent
->
uid
;
}
/* If the (new) signal is now blocked, requeue it. */
if
(
sigismember
(
&
current
->
blocked
,
signr
))
{
send_sig_info
(
signr
,
&
info
,
current
);
continue
;
}
}
ka
=
&
current
->
sig
->
action
[
signr
-
1
];
if
(
ka
->
sa
.
sa_handler
==
SIG_IGN
)
{
if
(
signr
!=
SIGCHLD
)
continue
;
/* Check for SIGCHLD: it's special. */
while
(
sys_wait4
(
-
1
,
NULL
,
WNOHANG
,
NULL
)
>
0
)
/* nothing */
;
continue
;
}
if
(
ka
->
sa
.
sa_handler
==
SIG_DFL
)
{
int
exit_code
=
signr
;
/* Init gets no signals it doesn't want. */
if
(
current
->
pid
==
1
)
continue
;
switch
(
signr
)
{
case
SIGCONT
:
case
SIGCHLD
:
case
SIGWINCH
:
case
SIGURG
:
continue
;
case
SIGTSTP
:
case
SIGTTIN
:
case
SIGTTOU
:
if
(
is_orphaned_pgrp
(
current
->
pgrp
))
continue
;
/* FALLTHRU */
case
SIGSTOP
:
{
struct
signal_struct
*
sig
;
set_current_state
(
TASK_STOPPED
);
current
->
exit_code
=
signr
;
sig
=
current
->
parent
->
sig
;
if
(
sig
&&
!
(
sig
->
action
[
SIGCHLD
-
1
].
sa
.
sa_flags
&
SA_NOCLDSTOP
))
notify_parent
(
current
,
SIGCHLD
);
schedule
();
single_stepping
|=
ptrace_cancel_bpt
(
current
);
continue
;
}
case
SIGQUIT
:
case
SIGILL
:
case
SIGTRAP
:
case
SIGABRT
:
case
SIGFPE
:
case
SIGSEGV
:
case
SIGBUS
:
case
SIGSYS
:
case
SIGXCPU
:
case
SIGXFSZ
:
if
(
do_coredump
(
signr
,
exit_code
,
regs
))
exit_code
|=
0x80
;
/* FALLTHRU */
default:
sig_exit
(
signr
,
exit_code
,
&
info
);
/* NOTREACHED */
}
}
/* Are we from a system call? */
if
(
syscall
)
{
/* If so, check system call restarting.. */
switch
(
regs
->
ARM_r0
)
{
case
-
ERESTART_RESTARTBLOCK
:
current_thread_info
()
->
restart_block
.
fn
=
do_no_restart_syscall
;
case
-
ERESTARTNOHAND
:
regs
->
ARM_r0
=
-
EINTR
;
break
;
case
-
ERESTARTSYS
:
if
(
!
(
ka
->
sa
.
sa_flags
&
SA_RESTART
))
{
regs
->
ARM_r0
=
-
EINTR
;
break
;
}
/* fallthrough */
case
-
ERESTARTNOINTR
:
regs
->
ARM_r0
=
regs
->
ARM_ORIG_r0
;
regs
->
ARM_pc
-=
4
;
}
}
/* Whee! Actually deliver the signal. */
handle_signal
(
signr
,
ka
,
&
info
,
oldset
,
regs
);
if
(
single_stepping
)
ptrace_set_bpt
(
current
);
signr
=
get_signal_to_deliver
(
&
info
,
regs
,
NULL
);
if
(
signr
>
0
)
{
handle_signal
(
signr
,
&
info
,
oldset
,
regs
,
syscall
);
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
ptrace_set_bpt
(
current
);
return
1
;
}
...
...
@@ -668,11 +585,10 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
if
(
regs
->
ARM_r0
==
-
ERESTARTNOHAND
||
regs
->
ARM_r0
==
-
ERESTARTSYS
||
regs
->
ARM_r0
==
-
ERESTARTNOINTR
)
{
regs
->
ARM_r0
=
regs
->
ARM_ORIG_r0
;
regs
->
ARM_pc
-=
4
;
restart_syscall
(
regs
);
}
}
if
(
single_stepping
)
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
ptrace_set_bpt
(
current
);
return
0
;
}
...
...
arch/arm/kernel/traps.c
View file @
c90176df
...
...
@@ -52,9 +52,14 @@ static const char *handler[]= { "prefetch abort", "data abort", "address excepti
void
dump_backtrace_entry
(
unsigned
long
where
,
unsigned
long
from
)
{
#ifdef CONFIG_KALLSYMS
printk
(
"[<%08lx>] "
,
where
);
print_symbol
(
"(%s) "
,
where
);
printk
(
"from [<%08lx>] "
,
from
);
print_symbol
(
"(%s)
\n
"
,
from
);
#else
printk
(
"Function entered at [<%08lx>] from [<%08lx>]
\n
"
,
where
,
from
);
print_symbol
(
" %s"
,
where
);
printk
(
"
\n
"
);
#endif
}
/*
...
...
@@ -503,11 +508,11 @@ baddataabort(int code, unsigned long instr, struct pt_regs *regs)
die_if_kernel
(
"unknown data abort code"
,
regs
,
instr
);
}
void
__bug
(
const
char
*
file
,
int
line
,
void
*
data
)
vo
latile
vo
id
__bug
(
const
char
*
file
,
int
line
,
void
*
data
)
{
printk
(
KERN_CRIT
"kernel BUG at %s:%d!"
,
file
,
line
);
if
(
data
)
printk
(
KERN_CRIT
" - extra data = %p"
,
data
);
printk
(
" - extra data = %p"
,
data
);
printk
(
"
\n
"
);
*
(
int
*
)
0
=
0
;
}
...
...
arch/arm/lib/backtrace.S
View file @
c90176df
...
...
@@ -82,11 +82,20 @@ ENTRY(c_backtrace)
teq
r3
,
r2
bleq
.
Ldumpstm
teq
frame
,
next
movne
frame
,
next
teqne
frame
,
#
0
bne
3
b
LOADREGS
(
fd
,
sp
!,
{
r4
-
r8
,
pc
})
/
*
*
A
zero
next
framepointer
means
we
're done.
*/
teq
next
,
#
0
LOADREGS
(
eqfd
,
sp
!,
{
r4
-
r8
,
pc
})
/
*
*
The
next
framepointer
must
be
above
the
*
current
framepointer
.
*/
cmp
next
,
frame
mov
frame
,
next
bhi
3
b
b
1007
f
/*
*
Fixup
for
LDMDB
...
...
arch/arm/mach-epxa10db/irq.c
View file @
c90176df
...
...
@@ -19,6 +19,9 @@
*/
#include <linux/init.h>
#include <linux/ioport.h>
#include <linux/stddef.h>
#include <linux/timer.h>
#include <linux/list.h>
#include <asm/io.h>
#include <asm/hardware.h>
#include <asm/irq.h>
...
...
arch/arm/mach-footbridge/irq.c
View file @
c90176df
...
...
@@ -15,6 +15,7 @@
* 16-Mar-1999 RMK Added autodetect of ISA PICs
*/
#include <linux/ioport.h>
#include <linux/list.h>
#include <linux/init.h>
#include <asm/mach/irq.h>
...
...
arch/arm/mach-footbridge/isa-irq.c
View file @
c90176df
...
...
@@ -16,6 +16,7 @@
*/
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/list.h>
#include <linux/init.h>
#include <asm/mach/irq.h>
...
...
arch/arm/mach-iop310/iop310-irq.c
View file @
c90176df
...
...
@@ -15,6 +15,7 @@
*/
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/list.h>
#include <asm/mach/irq.h>
#include <asm/irq.h>
...
...
arch/arm/mach-iop310/iop310-pci.c
View file @
c90176df
...
...
@@ -360,6 +360,8 @@ int iop310_setup(int nr, struct pci_sys_data *sys)
if
(
!
res
)
panic
(
"PCI: unable to alloc resources"
);
memset
(
res
,
0
,
sizeof
(
struct
resource
)
*
2
);
switch
(
nr
)
{
case
0
:
res
[
0
].
start
=
IOP310_PCIPRI_LOWER_IO
+
0x6e000000
;
...
...
arch/arm/mach-iop310/iq80310-irq.c
View file @
c90176df
...
...
@@ -15,6 +15,7 @@
* Fixes for various revision boards - DS
*/
#include <linux/init.h>
#include <linux/list.h>
#include <asm/irq.h>
#include <asm/mach/irq.h>
...
...
arch/arm/mach-iop310/xs80200-irq.c
View file @
c90176df
...
...
@@ -11,6 +11,7 @@
* published by the Free Software Foundation.
*/
#include <linux/init.h>
#include <linux/list.h>
#include <asm/mach/irq.h>
#include <asm/irq.h>
...
...
arch/arm/mach-pxa/irq.c
View file @
c90176df
...
...
@@ -85,19 +85,6 @@ static int pxa_gpio_irq_type(unsigned int irq, unsigned int type)
return
0
;
}
/*
* Since we can't actually physically mask edge triggered interrupts
* without the risk of missing transitions, we therefore logically mask
* them and defer their processing through tis function.
*/
static
void
pxa_manual_rerun
(
unsigned
int
irq
)
{
struct
pt_regs
regs
;
memset
(
&
regs
,
0
,
sizeof
(
regs
));
irq_desc
[
irq
].
handle
(
irq
,
&
irq_desc
[
irq
],
&
regs
);
}
/*
* GPIO IRQs must be acknoledged. This is for GPIO 0 and 1.
*/
...
...
@@ -111,7 +98,6 @@ static struct irqchip pxa_low_gpio_chip = {
.
ack
=
pxa_ack_low_gpio
,
.
mask
=
pxa_mask_irq
,
.
unmask
=
pxa_unmask_irq
,
.
rerun
=
pxa_manual_rerun
,
.
type
=
pxa_gpio_irq_type
,
};
...
...
arch/arm/mach-rpc/irq.c
View file @
c90176df
#include <linux/init.h>
#include <linux/list.h>
#include <asm/mach/irq.h>
#include <asm/hardware/iomd.h>
...
...
arch/arm/mach-sa1100/irq.c
View file @
c90176df
...
...
@@ -13,6 +13,7 @@
#include <linux/module.h>
#include <linux/ioport.h>
#include <linux/ptrace.h>
#include <linux/device.h>
#include <asm/hardware.h>
#include <asm/irq.h>
...
...
@@ -24,20 +25,12 @@
/*
* SA1100 GPIO edge detection for IRQs:
* IRQs are generated on Falling-Edge, Rising-Edge, or both.
* This must be called *before* the appropriate IRQ is registered.
* Use this instead of directly setting GRER/GFER.
*/
static
int
GPIO_IRQ_rising_edge
;
static
int
GPIO_IRQ_falling_edge
;
static
int
GPIO_IRQ_mask
=
(
1
<<
11
)
-
1
;
static
void
sa1100_manual_rerun
(
unsigned
int
irq
)
{
struct
pt_regs
regs
;
memset
(
&
regs
,
0
,
sizeof
(
regs
));
irq_desc
[
irq
].
handle
(
irq
,
&
irq_desc
[
irq
],
&
regs
);
}
/*
* To get the GPIO number from an IRQ number
*/
...
...
@@ -105,7 +98,6 @@ static struct irqchip sa1100_low_gpio_chip = {
.
ack
=
sa1100_low_gpio_ack
,
.
mask
=
sa1100_low_gpio_mask
,
.
unmask
=
sa1100_low_gpio_unmask
,
.
rerun
=
sa1100_manual_rerun
,
.
type
=
sa1100_gpio_type
,
.
wake
=
sa1100_low_gpio_wake
,
};
...
...
@@ -189,7 +181,6 @@ static struct irqchip sa1100_high_gpio_chip = {
.
ack
=
sa1100_high_gpio_ack
,
.
mask
=
sa1100_high_gpio_mask
,
.
unmask
=
sa1100_high_gpio_unmask
,
.
rerun
=
sa1100_manual_rerun
,
.
type
=
sa1100_gpio_type
,
.
wake
=
sa1100_high_gpio_wake
,
};
...
...
@@ -212,7 +203,6 @@ static struct irqchip sa1100_normal_chip = {
.
ack
=
sa1100_mask_irq
,
.
mask
=
sa1100_mask_irq
,
.
unmask
=
sa1100_unmask_irq
,
/* rerun should never be called */
};
static
struct
resource
irq_resource
=
{
...
...
@@ -267,10 +257,4 @@ void __init sa1100_init_irq(void)
*/
set_irq_chip
(
IRQ_GPIO11_27
,
&
sa1100_normal_chip
);
set_irq_chained_handler
(
IRQ_GPIO11_27
,
sa1100_high_gpio_handler
);
/*
* We generally don't want the LCD IRQ being
* enabled as soon as we request it.
*/
set_irq_flags
(
IRQ_LCD
,
IRQF_VALID
/* | IRQF_NOAUTOEN*/
);
}
arch/arm/mach-sa1100/xp860.c
View file @
c90176df
...
...
@@ -15,9 +15,9 @@
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/serial_sa1100.h>
#include <asm/hardware/sa1111.h>
#include "generic.h"
#include "sa1111.h"
static
void
xp860_power_off
(
void
)
...
...
arch/arm/mm/consistent.c
View file @
c90176df
...
...
@@ -83,7 +83,7 @@ static void vm_region_dump(struct vm_region *head, char *fn)
struct vm_region *c;
printk("Consistent Allocation Map (%s):\n", fn);
list_for_each_entry(c, &head->list, vm_list) {
list_for_each_entry(c, &head->
vm_
list, vm_list) {
printk(" %p: %08lx - %08lx (0x%08x)\n", c,
c->vm_start, c->vm_end, c->vm_end - c->vm_start);
}
...
...
arch/arm/mm/proc-xscale.S
View file @
c90176df
...
...
@@ -678,7 +678,7 @@ __xscale_setup:
mcr
p15
,
0
,
r0
,
c15
,
c1
,
0
@
affects
USR
or
SVC
modes
mrc
p15
,
0
,
r0
,
c1
,
c0
,
0
@
get
control
register
bic
r0
,
r0
,
#
0x0200
@
....
..
R
.
....
....
bic
r0
,
r0
,
#
0x00
82
@
....
....
B
...
..
A
.
bic
r0
,
r0
,
#
0x00
02
@
....
....
.
...
..
A
.
orr
r0
,
r0
,
#
0x0005
@
....
....
....
.
C
.
M
orr
r0
,
r0
,
#
0x3900
@
..
VI
Z
..
S
....
....
mov
pc
,
lr
...
...
arch/arm/vmlinux-armv.lds.in
View file @
c90176df
...
...
@@ -7,7 +7,11 @@
OUTPUT_ARCH(arm)
ENTRY(stext)
#ifndef __ARMEB__
jiffies = jiffies_64;
#else
jiffies = jiffies_64 + 4;
#endif
SECTIONS
{
. = TEXTADDR;
...
...
drivers/acorn/scsi/acornscsi.c
View file @
c90176df
This diff is collapsed.
Click to expand it.
drivers/acorn/scsi/fas216.c
View file @
c90176df
This diff is collapsed.
Click to expand it.
drivers/acorn/scsi/queue.c
View file @
c90176df
...
...
@@ -170,7 +170,7 @@ Scsi_Cmnd *queue_remove_exclude(Queue_t *queue, unsigned long *exclude)
spin_lock_irqsave
(
&
queue
->
queue_lock
,
flags
);
list_for_each
(
l
,
&
queue
->
head
)
{
QE_t
*
q
=
list_entry
(
l
,
QE_t
,
list
);
if
(
!
test_bit
(
q
->
SCpnt
->
target
*
8
+
q
->
SCpnt
->
lun
,
exclude
))
{
if
(
!
test_bit
(
q
->
SCpnt
->
device
->
id
*
8
+
q
->
SCpnt
->
device
->
lun
,
exclude
))
{
SCpnt
=
__queue_remove
(
queue
,
l
);
break
;
}
...
...
@@ -217,7 +217,7 @@ Scsi_Cmnd *queue_remove_tgtluntag (Queue_t *queue, int target, int lun, int tag)
spin_lock_irqsave
(
&
queue
->
queue_lock
,
flags
);
list_for_each
(
l
,
&
queue
->
head
)
{
QE_t
*
q
=
list_entry
(
l
,
QE_t
,
list
);
if
(
q
->
SCpnt
->
target
==
target
&&
q
->
SCpnt
->
lun
==
lun
&&
if
(
q
->
SCpnt
->
device
->
id
==
target
&&
q
->
SCpnt
->
device
->
lun
==
lun
&&
q
->
SCpnt
->
tag
==
tag
)
{
SCpnt
=
__queue_remove
(
queue
,
l
);
break
;
...
...
@@ -243,7 +243,7 @@ void queue_remove_all_target(Queue_t *queue, int target)
spin_lock_irqsave
(
&
queue
->
queue_lock
,
flags
);
list_for_each
(
l
,
&
queue
->
head
)
{
QE_t
*
q
=
list_entry
(
l
,
QE_t
,
list
);
if
(
q
->
SCpnt
->
target
==
target
)
if
(
q
->
SCpnt
->
device
->
id
==
target
)
__queue_remove
(
queue
,
l
);
}
spin_unlock_irqrestore
(
&
queue
->
queue_lock
,
flags
);
...
...
@@ -267,7 +267,7 @@ int queue_probetgtlun (Queue_t *queue, int target, int lun)
spin_lock_irqsave
(
&
queue
->
queue_lock
,
flags
);
list_for_each
(
l
,
&
queue
->
head
)
{
QE_t
*
q
=
list_entry
(
l
,
QE_t
,
list
);
if
(
q
->
SCpnt
->
target
==
target
&&
q
->
SCpnt
->
lun
==
lun
)
{
if
(
q
->
SCpnt
->
device
->
id
==
target
&&
q
->
SCpnt
->
device
->
lun
==
lun
)
{
found
=
1
;
break
;
}
...
...
drivers/acorn/scsi/scsi.h
View file @
c90176df
...
...
@@ -92,8 +92,8 @@ static inline void init_SCp(Scsi_Cmnd *SCpnt)
if
(
SCpnt
->
request_bufflen
!=
len
)
printk
(
KERN_WARNING
"scsi%d.%c: bad request buffer "
"length %d, should be %ld
\n
"
,
SCpnt
->
host
->
host_no
,
'0'
+
SCpnt
->
target
,
SCpnt
->
request_bufflen
,
len
);
"length %d, should be %ld
\n
"
,
SCpnt
->
device
->
host
->
host_no
,
'0'
+
SCpnt
->
device
->
id
,
SCpnt
->
request_bufflen
,
len
);
SCpnt
->
request_bufflen
=
len
;
#endif
}
else
{
...
...
drivers/char/watchdog/wdt285.c
View file @
c90176df
...
...
@@ -37,18 +37,14 @@
*/
#undef ONLY_TESTING
#define TIMER_MARGIN 60
/* (secs) Default is 1 minute */
#define FCLK (50*1000*1000)
/* 50MHz */
static
int
soft_margin
=
TIMER_MARGIN
;
/* in seconds */
static
int
timer_alive
;
static
unsigned
int
soft_margin
=
60
;
/* in seconds */
static
unsigned
int
reload
;
static
unsigned
long
timer_alive
;
#ifdef ONLY_TESTING
/*
* If the timer expires..
*/
static
void
watchdog_fire
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
printk
(
KERN_CRIT
"Watchdog: Would Reboot.
\n
"
);
...
...
@@ -57,109 +53,134 @@ static void watchdog_fire(int irq, void *dev_id, struct pt_regs *regs)
}
#endif
/*
* Refresh the timer.
*/
static
void
watchdog_ping
(
void
)
{
/*
* Refresh the timer.
*/
*
CSR_TIMER4_LOAD
=
soft_margin
*
(
FCLK
/
256
);
*
CSR_TIMER4_LOAD
=
reload
;
}
/*
* Allow only one person to hold it open
*/
static
int
watchdog_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
if
(
timer_alive
)
int
ret
;
if
(
*
CSR_SA110_CNTL
&
(
1
<<
13
))
return
-
EBUSY
;
/*
* Ahead watchdog factor ten, Mr Sulu
*/
if
(
test_and_set_bit
(
1
,
&
timer_alive
))
return
-
EBUSY
;
reload
=
soft_margin
*
(
mem_fclk_21285
/
256
);
*
CSR_TIMER4_CLR
=
0
;
watchdog_ping
();
*
CSR_TIMER4_CNTL
=
TIMER_CNTL_ENABLE
|
TIMER_CNTL_AUTORELOAD
|
TIMER_CNTL_DIV256
;
#ifdef ONLY_TESTING
request_irq
(
IRQ_TIMER4
,
watchdog_fire
,
0
,
"watchdog"
,
NULL
);
ret
=
request_irq
(
IRQ_TIMER4
,
watchdog_fire
,
0
,
"watchdog"
,
NULL
);
if
(
ret
)
{
*
CSR_TIMER4_CNTL
=
0
;
clear_bit
(
1
,
&
timer_alive
);
}
#else
/*
* Setting this bit is irreversible; once enabled, there is
* no way to disable the watchdog.
*/
*
CSR_SA110_CNTL
|=
1
<<
13
;
MOD_INC_USE_COUNT
;
ret
=
0
;
#endif
timer_alive
=
1
;
return
0
;
return
ret
;
}
/*
* Shut off the timer.
* Note: if we really have enabled the watchdog, there
* is no way to turn off.
*/
static
int
watchdog_release
(
struct
inode
*
inode
,
struct
file
*
file
)
{
#ifdef ONLY_TESTING
free_irq
(
IRQ_TIMER4
,
NULL
);
timer_alive
=
0
;
#else
/*
* It's irreversible!
*/
clear_bit
(
1
,
&
timer_alive
);
#endif
return
0
;
}
static
ssize_t
watchdog_write
(
struct
file
*
file
,
const
char
*
data
,
size_t
len
,
loff_t
*
ppos
)
static
ssize_t
watchdog_write
(
struct
file
*
file
,
const
char
*
data
,
size_t
len
,
loff_t
*
ppos
)
{
/*
Can't seek (pwrite) on this device */
/* Can't seek (pwrite) on this device */
if
(
ppos
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
/*
* Refresh the timer.
*/
if
(
len
)
{
if
(
len
)
watchdog_ping
();
return
1
;
}
return
0
;
return
len
;
}
static
int
watchdog_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
static
struct
watchdog_info
ident
=
{
.
options
=
WDIOF_SETTIMEOUT
,
.
identity
=
"Footbridge Watchdog"
};
static
int
watchdog_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
int
i
,
new_margin
;
static
struct
watchdog_info
ident
=
{
WDIOF_SETTIMEOUT
,
0
,
"Footbridge Watchdog"
};
switch
(
cmd
)
{
default:
return
-
ENOTTY
;
case
WDIOC_GETSUPPORT
:
if
(
copy_to_user
((
struct
watchdog_info
*
)
arg
,
&
ident
,
sizeof
(
ident
)))
return
-
EFAULT
;
return
0
;
case
WDIOC_GETSTATUS
:
case
WDIOC_GETBOOTSTATUS
:
return
put_user
(
0
,(
int
*
)
arg
);
case
WDIOC_KEEPALIVE
:
watchdog_ping
();
return
0
;
case
WDIOC_SETTIMEOUT
:
if
(
get_user
(
new_margin
,
(
int
*
)
arg
))
return
-
EFAULT
;
/* Arbitrary, can't find the card's limits */
if
((
new_marg
<
0
)
||
(
new_margin
>
60
))
return
-
EINVAL
;
soft_margin
=
new_margin
;
watchdog_ping
();
/* Fall */
case
WDIOC_GETTIMEOUT
:
return
put_user
(
soft_margin
,
(
int
*
)
arg
);
unsigned
int
new_margin
;
int
ret
=
-
ENOIOCTLCMD
;
switch
(
cmd
)
{
case
WDIOC_GETSUPPORT
:
ret
=
0
;
if
(
copy_to_user
((
void
*
)
arg
,
&
ident
,
sizeof
(
ident
)))
ret
=
-
EFAULT
;
break
;
case
WDIOC_GETSTATUS
:
case
WDIOC_GETBOOTSTATUS
:
ret
=
put_user
(
0
,(
int
*
)
arg
);
break
;
case
WDIOC_KEEPALIVE
:
watchdog_ping
();
ret
=
0
;
break
;
case
WDIOC_SETTIMEOUT
:
ret
=
get_user
(
new_margin
,
(
int
*
)
arg
);
if
(
ret
)
break
;
/* Arbitrary, can't find the card's limits */
if
(
new_margin
<
0
||
new_margin
>
60
)
{
ret
=
-
EINVAL
;
break
;
}
soft_margin
=
new_margin
;
reload
=
soft_margin
*
(
mem_fclk_21285
/
256
);
watchdog_ping
();
/* Fall */
case
WDIOC_GETTIMEOUT
:
ret
=
put_user
(
soft_margin
,
(
int
*
)
arg
);
break
;
}
return
ret
;
}
static
struct
file_operations
watchdog_fops
=
{
static
struct
file_operations
watchdog_fops
=
{
.
owner
=
THIS_MODULE
,
.
write
=
watchdog_write
,
.
ioctl
=
watchdog_ioctl
,
...
...
@@ -167,11 +188,10 @@ static struct file_operations watchdog_fops=
.
release
=
watchdog_release
,
};
static
struct
miscdevice
watchdog_miscdev
=
{
WATCHDOG_MINOR
,
"watchdog"
,
&
watchdog_fops
static
struct
miscdevice
watchdog_miscdev
=
{
.
minor
=
WATCHDOG_MINOR
,
.
name
=
"watchdog"
,
.
fops
=
&
watchdog_fops
};
static
int
__init
footbridge_watchdog_init
(
void
)
...
...
@@ -182,11 +202,12 @@ static int __init footbridge_watchdog_init(void)
return
-
ENODEV
;
retval
=
misc_register
(
&
watchdog_miscdev
);
if
(
retval
<
0
)
if
(
retval
<
0
)
return
retval
;
printk
(
"Footbridge Watchdog Timer: 0.01, timer margin: %d sec
\n
"
,
soft_margin
);
if
(
machine_is_cats
())
printk
(
"Warning: Watchdog reset may not work on this machine.
\n
"
);
return
0
;
...
...
@@ -198,7 +219,7 @@ static void __exit footbridge_watchdog_exit(void)
}
MODULE_AUTHOR
(
"Phil Blundell <pb@nexus.co.uk>"
);
MODULE_DESCRIPTION
(
"
21285
watchdog driver"
);
MODULE_DESCRIPTION
(
"
Footbridge
watchdog driver"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_PARM
(
soft_margin
,
"i"
);
...
...
drivers/char/watchdog/wdt977.c
View file @
c90176df
...
...
@@ -58,7 +58,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CON
/* This is kicking the watchdog by simply re-writing the timeout to reg. 0xF2 */
int
kick_wdog
(
void
)
static
int
kick_wdog
(
void
)
{
/*
* Refresh the timer.
...
...
@@ -216,21 +216,20 @@ static int wdt977_release(struct inode *inode, struct file *file)
static
ssize_t
wdt977_write
(
struct
file
*
file
,
const
char
*
buf
,
size_t
count
,
loff_t
*
ppos
)
{
/*
Can't seek (pwrite) on this device */
/* Can't seek (pwrite) on this device */
if
(
ppos
!=
&
file
->
f_pos
)
return
-
ESPIPE
;
if
(
count
)
{
if
(
count
)
{
if
(
!
nowayout
)
{
size_t
i
;
/* In case it was set long ago */
expect_close
=
0
;
for
(
i
=
0
;
i
!=
len
;
i
++
)
{
for
(
i
=
0
;
i
!=
count
;
i
++
)
{
char
c
;
if
(
get_user
(
c
,
data
+
i
))
if
(
get_user
(
c
,
buf
+
i
))
return
-
EFAULT
;
if
(
c
==
'V'
)
expect_close
=
1
;
...
...
@@ -238,9 +237,8 @@ static ssize_t wdt977_write(struct file *file, const char *buf, size_t count, lo
}
kick_wdog
();
return
1
;
}
return
0
;
return
count
;
}
/*
...
...
@@ -254,14 +252,15 @@ static ssize_t wdt977_write(struct file *file, const char *buf, size_t count, lo
* according to their available features.
*/
static
int
wdt977_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
static
struct
watchdog_info
ident
=
{
.
identity
=
"Winbond 83977"
.
options
=
WDIOF_SETTIMEOUT
,
.
identity
=
"Winbond 83977"
};
int
temp
;
static
int
wdt977_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
int
temp
;
switch
(
cmd
)
{
...
...
@@ -337,9 +336,9 @@ static struct file_operations wdt977_fops=
static
struct
miscdevice
wdt977_miscdev
=
{
WATCHDOG_MINOR
,
"watchdog"
,
&
wdt977_fops
.
minor
=
WATCHDOG_MINOR
,
.
name
=
"watchdog"
,
.
fops
=
&
wdt977_fops
};
static
int
__init
nwwatchdog_init
(
void
)
...
...
@@ -360,4 +359,5 @@ static void __exit nwwatchdog_exit(void)
module_init
(
nwwatchdog_init
);
module_exit
(
nwwatchdog_exit
);
MODULE_DESCRIPTION
(
"W83977AF Watchdog driver"
);
MODULE_LICENSE
(
"GPL"
);
drivers/input/serio/sa1111ps2.c
View file @
c90176df
...
...
@@ -9,6 +9,7 @@
*/
#include <linux/module.h>
#include <linux/init.h>
#include <linux/input.h>
#include <linux/serio.h>
#include <linux/errno.h>
#include <linux/interrupt.h>
...
...
@@ -339,6 +340,7 @@ static struct sa1111_driver ps2_driver = {
.
drv
=
{
.
name
=
"sa1111-ps2"
,
.
bus
=
&
sa1111_bus_type
,
.
devclass
=
&
input_devclass
,
.
probe
=
ps2_probe
,
.
remove
=
ps2_remove
,
.
suspend
=
ps2_suspend
,
...
...
drivers/mtd/maps/sa1100-flash.c
View file @
c90176df
...
...
@@ -773,14 +773,15 @@ static struct mtd_partition stork_partitions[] = {
#ifdef CONFIG_SA1100_TRIZEPS
static
struct
mtd_partition
trizeps_partitions
[]
=
{
{
.
name
=
"Bootloader
& the kernel
"
,
.
size
=
0x00
2
00000
,
.
name
=
"Bootloader"
,
.
size
=
0x00
1
00000
,
.
offset
=
0
,
},
{
.
name
=
"
Data
"
,
.
size
=
0x00
4
00000
,
.
name
=
"
Kernel
"
,
.
size
=
0x00
1
00000
,
.
offset
=
MTDPART_OFS_APPEND
,
},
{
.
name
=
"root"
,
.
size
=
MTDPART_SIZ_FULL
,
.
offset
=
MTDPART_OFS_APPEND
,
}
...
...
@@ -937,7 +938,7 @@ static int __init sa1100_static_partitions(struct mtd_partition **parts)
#ifdef CONFIG_SA1100_TRIZEPS
if
(
machine_is_trizeps
())
{
*
parts
=
trizeps_partitions
;
nb_parts
=
ARRAY_SIZE
(
trizeps_par
itit
ons
);
nb_parts
=
ARRAY_SIZE
(
trizeps_par
titi
ons
);
}
#endif
#ifdef CONFIG_SA1100_YOPY
...
...
include/asm-arm/arch-iop310/serial.h
View file @
c90176df
...
...
@@ -24,8 +24,8 @@
#define STD_SERIAL_PORT_DEFNS \
/* UART CLK PORT IRQ FLAGS */
\
{ 0, BASE_BAUD,
0xfe810000
, IRQ_UART2, STD_COM_FLAGS },
/* ttyS0 */
\
{ 0, BASE_BAUD,
0xfe800000
, IRQ_UART1, STD_COM_FLAGS }
/* ttyS1 */
{ 0, BASE_BAUD,
IQ80310_UART2
, IRQ_UART2, STD_COM_FLAGS },
/* ttyS0 */
\
{ 0, BASE_BAUD,
IQ80310_UART1
, IRQ_UART1, STD_COM_FLAGS }
/* ttyS1 */
#endif // CONFIG_ARCH_IQ80310
...
...
include/asm-arm/mach/irq.h
View file @
c90176df
...
...
@@ -33,9 +33,12 @@ struct irqchip {
*/
void
(
*
unmask
)(
unsigned
int
);
/*
* Re-run the IRQ
* Ask the hardware to re-trigger the IRQ.
* Note: This method _must_ _not_ call the interrupt handler.
* If you are unable to retrigger the interrupt, do not
* provide a function, or if you do, return non-zero.
*/
void
(
*
rerun
)(
unsigned
int
);
int
(
*
retrigger
)(
unsigned
int
);
/*
* Set the type of the IRQ.
*/
...
...
@@ -50,6 +53,7 @@ struct irqdesc {
irq_handler_t
handle
;
struct
irqchip
*
chip
;
struct
irqaction
*
action
;
struct
list_head
pend
;
unsigned
int
disable_depth
;
unsigned
int
triggered
:
1
;
/* IRQ has occurred */
...
...
include/asm-arm/proc-armv/processor.h
View file @
c90176df
...
...
@@ -23,7 +23,7 @@
#define KERNEL_STACK_SIZE PAGE_SIZE
#define INIT_EXTRA_THREAD_INFO \
.cpu_domain = domain_val(DOMAIN_USER, DOMAIN_
CLIENT
) | \
.cpu_domain = domain_val(DOMAIN_USER, DOMAIN_
MANAGER
) | \
domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \
domain_val(DOMAIN_IO, DOMAIN_CLIENT)
...
...
include/asm-arm/proc-armv/system.h
View file @
c90176df
...
...
@@ -14,9 +14,14 @@
#define set_cr(x) \
__asm__ __volatile__( \
"mcr p15, 0, %0, c1, c0 @ set CR" \
"mcr p15, 0, %0, c1, c0
, 0
@ set CR" \
: : "r" (x))
#define get_cr(x) \
__asm__ __volatile__( \
"mrc p15, 0, %0, c1, c0, 0 @ get CR" \
: "=r" (x))
#define CR_M (1 << 0)
/* MMU enable */
#define CR_A (1 << 1)
/* Alignment abort enable */
#define CR_C (1 << 2)
/* Dcache enable */
...
...
@@ -24,9 +29,9 @@
#define CR_P (1 << 4)
/* 32-bit exception handler */
#define CR_D (1 << 5)
/* 32-bit data address range */
#define CR_L (1 << 6)
/* Implementation defined */
#define C
D
_B (1 << 7)
/* Big endian */
#define C
R
_B (1 << 7)
/* Big endian */
#define CR_S (1 << 8)
/* System MMU protection */
#define C
D
_R (1 << 9)
/* ROM MMU protection */
#define C
R
_R (1 << 9)
/* ROM MMU protection */
#define CR_F (1 << 10)
/* Implementation defined */
#define CR_Z (1 << 11)
/* Implementation defined */
#define CR_I (1 << 12)
/* Icache enable */
...
...
include/asm-arm/signal.h
View file @
c90176df
...
...
@@ -184,9 +184,7 @@ typedef struct sigaltstack {
#ifdef __KERNEL__
#include <asm/sigcontext.h>
#define HAVE_ARCH_GET_SIGNAL_TO_DELIVER
#define ptrace_signal_deliver(regs, cookie) do { } while (0)
#endif
#endif
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