Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci-2.6.23
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci-2.6.23
Commits
729c80c6
Commit
729c80c6
authored
19 years ago
by
Tony Luck
Browse files
Options
Browse Files
Download
Plain Diff
Auto-update from upstream
parents
4eaefb39
f6fdd7d9
No related merge requests found
Changes
76
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
76 changed files
with
714 additions
and
530 deletions
+714
-530
CREDITS
CREDITS
+1
-2
MAINTAINERS
MAINTAINERS
+2
-2
arch/i386/kernel/apic.c
arch/i386/kernel/apic.c
+0
-4
arch/i386/kernel/nmi.c
arch/i386/kernel/nmi.c
+2
-2
arch/ppc/syslib/ppc4xx_dma.c
arch/ppc/syslib/ppc4xx_dma.c
+7
-3
arch/sh/kernel/entry.S
arch/sh/kernel/entry.S
+5
-0
arch/sh64/kernel/syscalls.S
arch/sh64/kernel/syscalls.S
+5
-0
arch/sparc/kernel/sparc_ksyms.c
arch/sparc/kernel/sparc_ksyms.c
+3
-2
arch/sparc64/kernel/Makefile
arch/sparc64/kernel/Makefile
+1
-1
arch/sparc64/kernel/traps.c
arch/sparc64/kernel/traps.c
+3
-0
arch/sparc64/kernel/una_asm.S
arch/sparc64/kernel/una_asm.S
+153
-0
arch/sparc64/kernel/unaligned.c
arch/sparc64/kernel/unaligned.c
+59
-202
arch/sparc64/kernel/us2e_cpufreq.c
arch/sparc64/kernel/us2e_cpufreq.c
+27
-9
arch/sparc64/kernel/us3_cpufreq.c
arch/sparc64/kernel/us3_cpufreq.c
+25
-4
arch/um/kernel/skas/process.c
arch/um/kernel/skas/process.c
+5
-1
arch/um/os-Linux/elf_aux.c
arch/um/os-Linux/elf_aux.c
+0
-1
arch/x86_64/kernel/smpboot.c
arch/x86_64/kernel/smpboot.c
+8
-7
arch/x86_64/mm/fault.c
arch/x86_64/mm/fault.c
+1
-3
drivers/ide/Kconfig
drivers/ide/Kconfig
+1
-0
drivers/ide/ide-floppy.c
drivers/ide/ide-floppy.c
+1
-1
drivers/ide/pci/generic.c
drivers/ide/pci/generic.c
+7
-0
drivers/ide/pci/serverworks.c
drivers/ide/pci/serverworks.c
+23
-0
drivers/ide/ppc/pmac.c
drivers/ide/ppc/pmac.c
+1
-1
drivers/ide/setup-pci.c
drivers/ide/setup-pci.c
+1
-0
drivers/md/md.c
drivers/md/md.c
+3
-0
drivers/net/8139cp.c
drivers/net/8139cp.c
+7
-0
drivers/net/dm9000.c
drivers/net/dm9000.c
+26
-26
drivers/net/ioc3-eth.c
drivers/net/ioc3-eth.c
+4
-4
drivers/net/loopback.c
drivers/net/loopback.c
+1
-1
drivers/net/tg3.c
drivers/net/tg3.c
+4
-2
drivers/video/radeonfb.c
drivers/video/radeonfb.c
+1
-1
fs/afs/mntpt.c
fs/afs/mntpt.c
+4
-4
fs/autofs/symlink.c
fs/autofs/symlink.c
+3
-2
fs/autofs4/symlink.c
fs/autofs4/symlink.c
+2
-2
fs/befs/linuxvfs.c
fs/befs/linuxvfs.c
+5
-5
fs/cifs/cifsfs.h
fs/cifs/cifsfs.h
+2
-2
fs/cifs/link.c
fs/cifs/link.c
+3
-3
fs/devfs/base.c
fs/devfs/base.c
+2
-2
fs/ext2/symlink.c
fs/ext2/symlink.c
+2
-2
fs/ext3/symlink.c
fs/ext3/symlink.c
+2
-2
fs/freevxfs/vxfs_immed.c
fs/freevxfs/vxfs_immed.c
+3
-3
fs/ioprio.c
fs/ioprio.c
+2
-0
fs/jffs2/symlink.c
fs/jffs2/symlink.c
+9
-7
fs/jfs/symlink.c
fs/jfs/symlink.c
+2
-2
fs/namei.c
fs/namei.c
+21
-19
fs/nfs/dir.c
fs/nfs/dir.c
+19
-9
fs/nfs/file.c
fs/nfs/file.c
+3
-2
fs/nfs/inode.c
fs/nfs/inode.c
+105
-57
fs/nfs/nfs3acl.c
fs/nfs/nfs3acl.c
+3
-1
fs/nfs/read.c
fs/nfs/read.c
+6
-2
fs/nfs/symlink.c
fs/nfs/symlink.c
+8
-29
fs/proc/base.c
fs/proc/base.c
+4
-4
fs/proc/generic.c
fs/proc/generic.c
+2
-2
fs/reiserfs/inode.c
fs/reiserfs/inode.c
+1
-1
fs/smbfs/symlink.c
fs/smbfs/symlink.c
+3
-3
fs/sysfs/symlink.c
fs/sysfs/symlink.c
+3
-3
fs/sysv/symlink.c
fs/sysv/symlink.c
+2
-2
fs/ufs/symlink.c
fs/ufs/symlink.c
+2
-2
fs/xfs/linux-2.6/xfs_iops.c
fs/xfs/linux-2.6/xfs_iops.c
+5
-5
include/asm-ppc/ibm44x.h
include/asm-ppc/ibm44x.h
+0
-4
include/asm-ppc/ppc4xx_dma.h
include/asm-ppc/ppc4xx_dma.h
+1
-1
include/asm-sh/unistd.h
include/asm-sh/unistd.h
+7
-1
include/asm-sh64/unistd.h
include/asm-sh64/unistd.h
+6
-1
include/asm-sparc64/thread_info.h
include/asm-sparc64/thread_info.h
+5
-0
include/linux/fs.h
include/linux/fs.h
+4
-4
include/linux/nfs_fs.h
include/linux/nfs_fs.h
+23
-18
include/linux/pci_ids.h
include/linux/pci_ids.h
+5
-1
kernel/sched.c
kernel/sched.c
+2
-2
mm/shmem.c
mm/shmem.c
+6
-11
net/802/tr.c
net/802/tr.c
+12
-10
net/ipv4/icmp.c
net/ipv4/icmp.c
+6
-6
net/ipv4/ipcomp.c
net/ipv4/ipcomp.c
+1
-1
net/ipv4/netfilter/ipt_ECN.c
net/ipv4/netfilter/ipt_ECN.c
+9
-8
net/ipv4/netfilter/ipt_TCPMSS.c
net/ipv4/netfilter/ipt_TCPMSS.c
+4
-3
net/ipv6/ipcomp6.c
net/ipv6/ipcomp6.c
+1
-1
scripts/mod/modpost.c
scripts/mod/modpost.c
+7
-2
No files found.
CREDITS
View file @
729c80c6
...
...
@@ -2423,8 +2423,7 @@ S: Toronto, Ontario
S: Canada
N: Zwane Mwaikambo
E: zwane@linuxpower.ca
W: http://function.linuxpower.ca
E: zwane@arm.linux.org.uk
D: Various driver hacking
D: Lowlevel x86 kernel hacking
D: General debugging
...
...
This diff is collapsed.
Click to expand it.
MAINTAINERS
View file @
729c80c6
...
...
@@ -1739,7 +1739,7 @@ S: Maintained
OPL3-SA2, SA3, and SAx DRIVER
P: Zwane Mwaikambo
M: zwane@
commfireservices.com
M: zwane@
arm.linux.org.uk
L: linux-sound@vger.kernel.org
S: Maintained
...
...
@@ -1995,7 +1995,7 @@ S: Maintained
SC1200 WDT DRIVER
P: Zwane Mwaikambo
M: zwane@
commfireservices.com
M: zwane@
arm.linux.org.uk
S: Maintained
SCHEDULER
...
...
This diff is collapsed.
Click to expand it.
arch/i386/kernel/apic.c
View file @
729c80c6
...
...
@@ -726,15 +726,11 @@ __setup("apic=", apic_set_verbosity);
static
int
__init
detect_init_APIC
(
void
)
{
u32
h
,
l
,
features
;
extern
void
get_cpu_vendor
(
struct
cpuinfo_x86
*
);
/* Disabled by kernel option? */
if
(
enable_local_apic
<
0
)
return
-
1
;
/* Workaround for us being called before identify_cpu(). */
get_cpu_vendor
(
&
boot_cpu_data
);
switch
(
boot_cpu_data
.
x86_vendor
)
{
case
X86_VENDOR_AMD
:
if
((
boot_cpu_data
.
x86
==
6
&&
boot_cpu_data
.
x86_model
>
1
)
||
...
...
This diff is collapsed.
Click to expand it.
arch/i386/kernel/nmi.c
View file @
729c80c6
...
...
@@ -195,7 +195,7 @@ static void disable_lapic_nmi_watchdog(void)
wrmsr
(
MSR_P6_EVNTSEL0
,
0
,
0
);
break
;
case
15
:
if
(
boot_cpu_data
.
x86_model
>
0x
3
)
if
(
boot_cpu_data
.
x86_model
>
0x
4
)
break
;
wrmsr
(
MSR_P4_IQ_CCCR0
,
0
,
0
);
...
...
@@ -432,7 +432,7 @@ void setup_apic_nmi_watchdog (void)
setup_p6_watchdog
();
break
;
case
15
:
if
(
boot_cpu_data
.
x86_model
>
0x
3
)
if
(
boot_cpu_data
.
x86_model
>
0x
4
)
return
;
if
(
!
setup_p4_watchdog
())
...
...
This diff is collapsed.
Click to expand it.
arch/ppc/syslib/ppc4xx_dma.c
View file @
729c80c6
...
...
@@ -620,6 +620,7 @@ ppc4xx_clr_dma_status(unsigned int dmanr)
return
DMA_STATUS_GOOD
;
}
#ifdef CONFIG_PPC4xx_EDMA
/*
* Enables the burst on the channel (BTEN bit in the control/count register)
* Note:
...
...
@@ -685,6 +686,11 @@ ppc4xx_set_burst_size(unsigned int dmanr, unsigned int bsize)
return
DMA_STATUS_GOOD
;
}
EXPORT_SYMBOL
(
ppc4xx_enable_burst
);
EXPORT_SYMBOL
(
ppc4xx_disable_burst
);
EXPORT_SYMBOL
(
ppc4xx_set_burst_size
);
#endif
/* CONFIG_PPC4xx_EDMA */
EXPORT_SYMBOL
(
ppc4xx_init_dma_channel
);
EXPORT_SYMBOL
(
ppc4xx_get_channel_config
);
EXPORT_SYMBOL
(
ppc4xx_set_channel_priority
);
...
...
@@ -703,6 +709,4 @@ EXPORT_SYMBOL(ppc4xx_enable_dma_interrupt);
EXPORT_SYMBOL
(
ppc4xx_disable_dma_interrupt
);
EXPORT_SYMBOL
(
ppc4xx_get_dma_status
);
EXPORT_SYMBOL
(
ppc4xx_clr_dma_status
);
EXPORT_SYMBOL
(
ppc4xx_enable_burst
);
EXPORT_SYMBOL
(
ppc4xx_disable_burst
);
EXPORT_SYMBOL
(
ppc4xx_set_burst_size
);
This diff is collapsed.
Click to expand it.
arch/sh/kernel/entry.S
View file @
729c80c6
...
...
@@ -1145,5 +1145,10 @@ ENTRY(sys_call_table)
.
long
sys_add_key
/*
285
*/
.
long
sys_request_key
.
long
sys_keyctl
.
long
sys_ioprio_set
.
long
sys_ioprio_get
.
long
sys_inotify_init
/*
290
*/
.
long
sys_inotify_add_watch
.
long
sys_inotify_rm_watch
/*
End
of
entry
.
S
*/
This diff is collapsed.
Click to expand it.
arch/sh64/kernel/syscalls.S
View file @
729c80c6
...
...
@@ -342,4 +342,9 @@ sys_call_table:
.
long
sys_add_key
.
long
sys_request_key
.
long
sys_keyctl
/*
315
*/
.
long
sys_ioprio_set
.
long
sys_ioprio_get
.
long
sys_inotify_init
.
long
sys_inotify_add_watch
.
long
sys_inotify_rm_watch
/*
320
*/
This diff is collapsed.
Click to expand it.
arch/sparc/kernel/sparc_ksyms.c
View file @
729c80c6
...
...
@@ -98,8 +98,9 @@ extern void ___rw_write_enter(void);
* The module references will be fixed up by module_frob_arch_sections.
*/
#define DOT_ALIAS2(__ret, __x, __arg1, __arg2) \
extern __ret __x(__arg1, __arg2) \
__attribute__((weak, alias("." # __x)));
extern __ret __x(__arg1, __arg2); \
asm(".weak " #__x);\
asm(#__x "=." #__x);
DOT_ALIAS2
(
int
,
div
,
int
,
int
)
DOT_ALIAS2
(
int
,
mul
,
int
,
int
)
...
...
This diff is collapsed.
Click to expand it.
arch/sparc64/kernel/Makefile
View file @
729c80c6
...
...
@@ -8,7 +8,7 @@ EXTRA_CFLAGS := -Werror
extra-y
:=
head.o init_task.o vmlinux.lds
obj-y
:=
process.o setup.o cpu.o idprom.o
\
traps.o devices.o auxio.o
\
traps.o devices.o auxio.o
una_asm.o
\
irq.o ptrace.o time.o sys_sparc.o signal.o
\
unaligned.o central.o pci.o starfire.o semaphore.o
\
power.o sbus.o iommu_common.o sparc64_ksyms.o chmc.o
...
...
This diff is collapsed.
Click to expand it.
arch/sparc64/kernel/traps.c
View file @
729c80c6
...
...
@@ -2127,6 +2127,9 @@ void __init trap_init(void)
TI_PRE_COUNT
!=
offsetof
(
struct
thread_info
,
preempt_count
)
||
TI_NEW_CHILD
!=
offsetof
(
struct
thread_info
,
new_child
)
||
TI_SYS_NOERROR
!=
offsetof
(
struct
thread_info
,
syscall_noerror
)
||
TI_RESTART_BLOCK
!=
offsetof
(
struct
thread_info
,
restart_block
)
||
TI_KUNA_REGS
!=
offsetof
(
struct
thread_info
,
kern_una_regs
)
||
TI_KUNA_INSN
!=
offsetof
(
struct
thread_info
,
kern_una_insn
)
||
TI_FPREGS
!=
offsetof
(
struct
thread_info
,
fpregs
)
||
(
TI_FPREGS
&
(
64
-
1
)))
thread_info_offsets_are_bolixed_dave
();
...
...
This diff is collapsed.
Click to expand it.
arch/sparc64/kernel/una_asm.S
0 → 100644
View file @
729c80c6
/*
una_asm
.
S
:
Kernel
unaligned
trap
assembler
helpers
.
*
*
Copyright
(
C
)
1996
,
2005
David
S
.
Miller
(
davem
@
davemloft
.
net
)
*
Copyright
(
C
)
1996
,
1997
Jakub
Jelinek
(
jj
@
sunsite
.
mff
.
cuni
.
cz
)
*/
.
text
kernel_unaligned_trap_fault
:
call
kernel_mna_trap_fault
nop
retl
nop
.
size
kern_unaligned_trap_fault
,
.
-
kern_unaligned_trap_fault
.
globl
__do_int_store
__do_int_store
:
rd
%
asi
,
%
o4
wr
%
o3
,
0
,
%
asi
ldx
[%
o2
],
%
g3
cmp
%
o1
,
2
be
,
pn
%
icc
,
2
f
cmp
%
o1
,
4
be
,
pt
%
icc
,
1
f
srlx
%
g3
,
24
,
%
g2
srlx
%
g3
,
56
,
%
g1
srlx
%
g3
,
48
,
%
g7
4
:
stba
%
g1
,
[%
o0
]
%
asi
srlx
%
g3
,
40
,
%
g1
5
:
stba
%
g7
,
[%
o0
+
1
]
%
asi
srlx
%
g3
,
32
,
%
g7
6
:
stba
%
g1
,
[%
o0
+
2
]
%
asi
7
:
stba
%
g7
,
[%
o0
+
3
]
%
asi
srlx
%
g3
,
16
,
%
g1
8
:
stba
%
g2
,
[%
o0
+
4
]
%
asi
srlx
%
g3
,
8
,
%
g7
9
:
stba
%
g1
,
[%
o0
+
5
]
%
asi
10
:
stba
%
g7
,
[%
o0
+
6
]
%
asi
ba
,
pt
%
xcc
,
0
f
11
:
stba
%
g3
,
[%
o0
+
7
]
%
asi
1
:
srl
%
g3
,
16
,
%
g7
12
:
stba
%
g2
,
[%
o0
]
%
asi
srl
%
g3
,
8
,
%
g2
13
:
stba
%
g7
,
[%
o0
+
1
]
%
asi
14
:
stba
%
g2
,
[%
o0
+
2
]
%
asi
ba
,
pt
%
xcc
,
0
f
15
:
stba
%
g3
,
[%
o0
+
3
]
%
asi
2
:
srl
%
g3
,
8
,
%
g2
16
:
stba
%
g2
,
[%
o0
]
%
asi
17
:
stba
%
g3
,
[%
o0
+
1
]
%
asi
0
:
wr
%
o4
,
0x0
,
%
asi
retl
nop
.
size
__do_int_store
,
.
-
__do_int_store
.
section
__ex_table
.
word
4
b
,
kernel_unaligned_trap_fault
.
word
5
b
,
kernel_unaligned_trap_fault
.
word
6
b
,
kernel_unaligned_trap_fault
.
word
7
b
,
kernel_unaligned_trap_fault
.
word
8
b
,
kernel_unaligned_trap_fault
.
word
9
b
,
kernel_unaligned_trap_fault
.
word
10
b
,
kernel_unaligned_trap_fault
.
word
11
b
,
kernel_unaligned_trap_fault
.
word
12
b
,
kernel_unaligned_trap_fault
.
word
13
b
,
kernel_unaligned_trap_fault
.
word
14
b
,
kernel_unaligned_trap_fault
.
word
15
b
,
kernel_unaligned_trap_fault
.
word
16
b
,
kernel_unaligned_trap_fault
.
word
17
b
,
kernel_unaligned_trap_fault
.
previous
.
globl
do_int_load
do_int_load
:
rd
%
asi
,
%
o5
wr
%
o4
,
0
,
%
asi
cmp
%
o1
,
8
bge
,
pn
%
icc
,
9
f
cmp
%
o1
,
4
be
,
pt
%
icc
,
6
f
4
:
lduba
[%
o2
]
%
asi
,
%
g2
5
:
lduba
[%
o2
+
1
]
%
asi
,
%
g3
sll
%
g2
,
8
,
%
g2
brz
,
pt
%
o3
,
3
f
add
%
g2
,
%
g3
,
%
g2
sllx
%
g2
,
48
,
%
g2
srax
%
g2
,
48
,
%
g2
3
:
ba
,
pt
%
xcc
,
0
f
stx
%
g2
,
[%
o0
]
6
:
lduba
[%
o2
+
1
]
%
asi
,
%
g3
sll
%
g2
,
24
,
%
g2
7
:
lduba
[%
o2
+
2
]
%
asi
,
%
g7
sll
%
g3
,
16
,
%
g3
8
:
lduba
[%
o2
+
3
]
%
asi
,
%
g1
sll
%
g7
,
8
,
%
g7
or
%
g2
,
%
g3
,
%
g2
or
%
g7
,
%
g1
,
%
g7
or
%
g2
,
%
g7
,
%
g2
brnz
,
a
,
pt
%
o3
,
3
f
sra
%
g2
,
0
,
%
g2
3
:
ba
,
pt
%
xcc
,
0
f
stx
%
g2
,
[%
o0
]
9
:
lduba
[%
o2
]
%
asi
,
%
g2
10
:
lduba
[%
o2
+
1
]
%
asi
,
%
g3
sllx
%
g2
,
56
,
%
g2
11
:
lduba
[%
o2
+
2
]
%
asi
,
%
g7
sllx
%
g3
,
48
,
%
g3
12
:
lduba
[%
o2
+
3
]
%
asi
,
%
g1
sllx
%
g7
,
40
,
%
g7
sllx
%
g1
,
32
,
%
g1
or
%
g2
,
%
g3
,
%
g2
or
%
g7
,
%
g1
,
%
g7
13
:
lduba
[%
o2
+
4
]
%
asi
,
%
g3
or
%
g2
,
%
g7
,
%
g7
14
:
lduba
[%
o2
+
5
]
%
asi
,
%
g1
sllx
%
g3
,
24
,
%
g3
15
:
lduba
[%
o2
+
6
]
%
asi
,
%
g2
sllx
%
g1
,
16
,
%
g1
or
%
g7
,
%
g3
,
%
g7
16
:
lduba
[%
o2
+
7
]
%
asi
,
%
g3
sllx
%
g2
,
8
,
%
g2
or
%
g7
,
%
g1
,
%
g7
or
%
g2
,
%
g3
,
%
g2
or
%
g7
,
%
g2
,
%
g7
cmp
%
o1
,
8
be
,
a
,
pt
%
icc
,
0
f
stx
%
g7
,
[%
o0
]
srlx
%
g7
,
32
,
%
g2
sra
%
g7
,
0
,
%
g7
stx
%
g2
,
[%
o0
]
stx
%
g7
,
[%
o0
+
8
]
0
:
wr
%
o5
,
0x0
,
%
asi
retl
nop
.
size
__do_int_load
,
.
-
__do_int_load
.
section
__ex_table
.
word
4
b
,
kernel_unaligned_trap_fault
.
word
5
b
,
kernel_unaligned_trap_fault
.
word
6
b
,
kernel_unaligned_trap_fault
.
word
7
b
,
kernel_unaligned_trap_fault
.
word
8
b
,
kernel_unaligned_trap_fault
.
word
9
b
,
kernel_unaligned_trap_fault
.
word
10
b
,
kernel_unaligned_trap_fault
.
word
11
b
,
kernel_unaligned_trap_fault
.
word
12
b
,
kernel_unaligned_trap_fault
.
word
13
b
,
kernel_unaligned_trap_fault
.
word
14
b
,
kernel_unaligned_trap_fault
.
word
15
b
,
kernel_unaligned_trap_fault
.
word
16
b
,
kernel_unaligned_trap_fault
.
previous
This diff is collapsed.
Click to expand it.
arch/sparc64/kernel/unaligned.c
View file @
729c80c6
This diff is collapsed.
Click to expand it.
arch/sparc64/kernel/us2e_cpufreq.c
View file @
729c80c6
...
...
@@ -88,7 +88,6 @@ static void frob_mem_refresh(int cpu_slowing_down,
{
unsigned
long
old_refr_count
,
refr_count
,
mctrl
;
refr_count
=
(
clock_tick
*
MCTRL0_REFR_INTERVAL
);
refr_count
/=
(
MCTRL0_REFR_CLKS_P_CNT
*
divisor
*
1000000000UL
);
...
...
@@ -230,6 +229,25 @@ static unsigned long estar_to_divisor(unsigned long estar)
return
ret
;
}
static
unsigned
int
us2e_freq_get
(
unsigned
int
cpu
)
{
cpumask_t
cpus_allowed
;
unsigned
long
clock_tick
,
estar
;
if
(
!
cpu_online
(
cpu
))
return
0
;
cpus_allowed
=
current
->
cpus_allowed
;
set_cpus_allowed
(
current
,
cpumask_of_cpu
(
cpu
));
clock_tick
=
sparc64_get_clock_tick
(
cpu
)
/
1000
;
estar
=
read_hbreg
(
HBIRD_ESTAR_MODE_ADDR
);
set_cpus_allowed
(
current
,
cpus_allowed
);
return
clock_tick
/
estar_to_divisor
(
estar
);
}
static
void
us2e_set_cpu_divider_index
(
unsigned
int
cpu
,
unsigned
int
index
)
{
unsigned
long
new_bits
,
new_freq
;
...
...
@@ -243,7 +261,7 @@ static void us2e_set_cpu_divider_index(unsigned int cpu, unsigned int index)
cpus_allowed
=
current
->
cpus_allowed
;
set_cpus_allowed
(
current
,
cpumask_of_cpu
(
cpu
));
new_freq
=
clock_tick
=
sparc64_get_clock_tick
(
cpu
);
new_freq
=
clock_tick
=
sparc64_get_clock_tick
(
cpu
)
/
1000
;
new_bits
=
index_to_estar_mode
(
index
);
divisor
=
index_to_divisor
(
index
);
new_freq
/=
divisor
;
...
...
@@ -258,7 +276,8 @@ static void us2e_set_cpu_divider_index(unsigned int cpu, unsigned int index)
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_PRECHANGE
);
if
(
old_divisor
!=
divisor
)
us2e_transition
(
estar
,
new_bits
,
clock_tick
,
old_divisor
,
divisor
);
us2e_transition
(
estar
,
new_bits
,
clock_tick
*
1000
,
old_divisor
,
divisor
);
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_POSTCHANGE
);
...
...
@@ -272,10 +291,8 @@ static int us2e_freq_target(struct cpufreq_policy *policy,
unsigned
int
new_index
=
0
;
if
(
cpufreq_frequency_table_target
(
policy
,
&
us2e_freq_table
[
policy
->
cpu
].
table
[
0
],
target_freq
,
relation
,
&
new_index
))
&
us2e_freq_table
[
policy
->
cpu
].
table
[
0
],
target_freq
,
relation
,
&
new_index
))
return
-
EINVAL
;
us2e_set_cpu_divider_index
(
policy
->
cpu
,
new_index
);
...
...
@@ -292,7 +309,7 @@ static int us2e_freq_verify(struct cpufreq_policy *policy)
static
int
__init
us2e_freq_cpu_init
(
struct
cpufreq_policy
*
policy
)
{
unsigned
int
cpu
=
policy
->
cpu
;
unsigned
long
clock_tick
=
sparc64_get_clock_tick
(
cpu
);
unsigned
long
clock_tick
=
sparc64_get_clock_tick
(
cpu
)
/
1000
;
struct
cpufreq_frequency_table
*
table
=
&
us2e_freq_table
[
cpu
].
table
[
0
];
...
...
@@ -351,9 +368,10 @@ static int __init us2e_freq_init(void)
memset
(
us2e_freq_table
,
0
,
(
NR_CPUS
*
sizeof
(
struct
us2e_freq_percpu_info
)));
driver
->
init
=
us2e_freq_cpu_init
;
driver
->
verify
=
us2e_freq_verify
;
driver
->
target
=
us2e_freq_target
;
driver
->
init
=
us2e_freq_cpu_ini
t
;
driver
->
get
=
us2e_freq_ge
t
;
driver
->
exit
=
us2e_freq_cpu_exit
;
driver
->
owner
=
THIS_MODULE
,
strcpy
(
driver
->
name
,
"UltraSPARC-IIe"
);
...
...
This diff is collapsed.
Click to expand it.
arch/sparc64/kernel/us3_cpufreq.c
View file @
729c80c6
...
...
@@ -56,7 +56,7 @@ static void write_safari_cfg(unsigned long val)
static
unsigned
long
get_current_freq
(
unsigned
int
cpu
,
unsigned
long
safari_cfg
)
{
unsigned
long
clock_tick
=
sparc64_get_clock_tick
(
cpu
);
unsigned
long
clock_tick
=
sparc64_get_clock_tick
(
cpu
)
/
1000
;
unsigned
long
ret
;
switch
(
safari_cfg
&
SAFARI_CFG_DIV_MASK
)
{
...
...
@@ -76,6 +76,26 @@ static unsigned long get_current_freq(unsigned int cpu, unsigned long safari_cfg
return
ret
;
}
static
unsigned
int
us3_freq_get
(
unsigned
int
cpu
)
{
cpumask_t
cpus_allowed
;
unsigned
long
reg
;
unsigned
int
ret
;
if
(
!
cpu_online
(
cpu
))
return
0
;
cpus_allowed
=
current
->
cpus_allowed
;
set_cpus_allowed
(
current
,
cpumask_of_cpu
(
cpu
));
reg
=
read_safari_cfg
();
ret
=
get_current_freq
(
cpu
,
reg
);
set_cpus_allowed
(
current
,
cpus_allowed
);
return
ret
;
}
static
void
us3_set_cpu_divider_index
(
unsigned
int
cpu
,
unsigned
int
index
)
{
unsigned
long
new_bits
,
new_freq
,
reg
;
...
...
@@ -88,7 +108,7 @@ static void us3_set_cpu_divider_index(unsigned int cpu, unsigned int index)
cpus_allowed
=
current
->
cpus_allowed
;
set_cpus_allowed
(
current
,
cpumask_of_cpu
(
cpu
));
new_freq
=
sparc64_get_clock_tick
(
cpu
);
new_freq
=
sparc64_get_clock_tick
(
cpu
)
/
1000
;
switch
(
index
)
{
case
0
:
new_bits
=
SAFARI_CFG_DIV_1
;
...
...
@@ -150,7 +170,7 @@ static int us3_freq_verify(struct cpufreq_policy *policy)
static
int
__init
us3_freq_cpu_init
(
struct
cpufreq_policy
*
policy
)
{
unsigned
int
cpu
=
policy
->
cpu
;
unsigned
long
clock_tick
=
sparc64_get_clock_tick
(
cpu
);
unsigned
long
clock_tick
=
sparc64_get_clock_tick
(
cpu
)
/
1000
;
struct
cpufreq_frequency_table
*
table
=
&
us3_freq_table
[
cpu
].
table
[
0
];
...
...
@@ -206,9 +226,10 @@ static int __init us3_freq_init(void)
memset
(
us3_freq_table
,
0
,
(
NR_CPUS
*
sizeof
(
struct
us3_freq_percpu_info
)));
driver
->
init
=
us3_freq_cpu_init
;
driver
->
verify
=
us3_freq_verify
;
driver
->
target
=
us3_freq_target
;
driver
->
init
=
us3_freq_cpu_ini
t
;
driver
->
get
=
us3_freq_ge
t
;
driver
->
exit
=
us3_freq_cpu_exit
;
driver
->
owner
=
THIS_MODULE
,
strcpy
(
driver
->
name
,
"UltraSPARC-III"
);
...
...
This diff is collapsed.
Click to expand it.
arch/um/kernel/skas/process.c
View file @
729c80c6
...
...
@@ -61,7 +61,11 @@ void wait_stub_done(int pid, int sig, char * fname)
CATCH_EINTR
(
n
=
waitpid
(
pid
,
&
status
,
WUNTRACED
));
}
while
((
n
>=
0
)
&&
WIFSTOPPED
(
status
)
&&
(
WSTOPSIG
(
status
)
==
SIGVTALRM
));
((
WSTOPSIG
(
status
)
==
SIGVTALRM
)
||
/* running UML inside a detached screen can cause
* SIGWINCHes
*/
(
WSTOPSIG
(
status
)
==
SIGWINCH
)));
if
((
n
<
0
)
||
!
WIFSTOPPED
(
status
)
||
(
WSTOPSIG
(
status
)
!=
SIGUSR1
&&
WSTOPSIG
(
status
)
!=
SIGTRAP
)){
...
...
This diff is collapsed.
Click to expand it.
arch/um/os-Linux/elf_aux.c
View file @
729c80c6
...
...
@@ -9,7 +9,6 @@
*/
#include <elf.h>
#include <stddef.h>
#include <asm/elf.h>
#include "init.h"
#include "elf_user.h"
#include "mem_user.h"
...
...
This diff is collapsed.
Click to expand it.
arch/x86_64/kernel/smpboot.c
View file @
729c80c6
...
...
@@ -492,6 +492,14 @@ void __cpuinit start_secondary(void)
*/
set_cpu_sibling_map
(
smp_processor_id
());
/*
* Wait for TSC sync to not schedule things before.
* We still process interrupts, which could see an inconsistent
* time in that window unfortunately.
* Do this here because TSC sync has global unprotected state.
*/
tsc_sync_wait
();
/*
* We need to hold call_lock, so there is no inconsistency
* between the time smp_call_function() determines number of
...
...
@@ -509,13 +517,6 @@ void __cpuinit start_secondary(void)
per_cpu
(
cpu_state
,
smp_processor_id
())
=
CPU_ONLINE
;
unlock_ipi_call_lock
();
mb
();
/* Wait for TSC sync to not schedule things before.
We still process interrupts, which could see an inconsistent
time in that window unfortunately. */
tsc_sync_wait
();
cpu_idle
();
}
...
...
This diff is collapsed.
Click to expand it.
arch/x86_64/mm/fault.c
View file @
729c80c6
...
...
@@ -211,9 +211,7 @@ int unhandled_signal(struct task_struct *tsk, int sig)
{
if
(
tsk
->
pid
==
1
)
return
1
;
/* Warn for strace, but not for gdb */
if
(
!
test_ti_thread_flag
(
tsk
->
thread_info
,
TIF_SYSCALL_TRACE
)
&&
(
tsk
->
ptrace
&
PT_PTRACED
))
if
(
tsk
->
ptrace
&
PT_PTRACED
)
return
0
;
return
(
tsk
->
sighand
->
action
[
sig
-
1
].
sa
.
sa_handler
==
SIG_IGN
)
||
(
tsk
->
sighand
->
action
[
sig
-
1
].
sa
.
sa_handler
==
SIG_DFL
);
...
...
This diff is collapsed.
Click to expand it.
drivers/ide/Kconfig
View file @
729c80c6
...
...
@@ -764,6 +764,7 @@ config BLK_DEV_IDE_PMAC_ATA100FIRST
config BLK_DEV_IDEDMA_PMAC
bool "PowerMac IDE DMA support"
depends on BLK_DEV_IDE_PMAC
select BLK_DEV_IDEDMA_PCI
help
This option allows the driver for the built-in IDE controller on
Power Macintoshes and PowerBooks to use DMA (direct memory access)
...
...
This diff is collapsed.
Click to expand it.
drivers/ide/ide-floppy.c
View file @
729c80c6
...
...
@@ -317,7 +317,7 @@ typedef struct ide_floppy_obj {
unsigned
long
flags
;
}
idefloppy_floppy_t
;
#define IDEFLOPPY_TICKS_DELAY
3
/* default delay for ZIP 100
*/
#define IDEFLOPPY_TICKS_DELAY
HZ/20
/* default delay for ZIP 100 (50ms)
*/
/*
* Floppy flag bits values.
...
...
This diff is collapsed.
Click to expand it.
drivers/ide/pci/generic.c
View file @
729c80c6
...
...
@@ -173,6 +173,12 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
.
channels
=
2
,
.
autodma
=
NOAUTODMA
,
.
bootable
=
ON_BOARD
,
},{
/* 14 */
.
name
=
"Revolution"
,
.
init_hwif
=
init_hwif_generic
,
.
channels
=
2
,
.
autodma
=
AUTODMA
,
.
bootable
=
OFF_BOARD
,
}
};
...
...
@@ -231,6 +237,7 @@ static struct pci_device_id generic_pci_tbl[] = {
{
PCI_VENDOR_ID_TOSHIBA
,
PCI_DEVICE_ID_TOSHIBA_PICCOLO
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
11
},
{
PCI_VENDOR_ID_TOSHIBA
,
PCI_DEVICE_ID_TOSHIBA_PICCOLO_1
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
12
},
{
PCI_VENDOR_ID_TOSHIBA
,
PCI_DEVICE_ID_TOSHIBA_PICCOLO_2
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
13
},
{
PCI_VENDOR_ID_NETCELL
,
PCI_DEVICE_ID_REVOLUTION
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
14
},
/* Must come last. If you add entries adjust this table appropriately and the init_one code */
{
PCI_ANY_ID
,
PCI_ANY_ID
,
PCI_ANY_ID
,
PCI_ANY_ID
,
PCI_CLASS_STORAGE_IDE
<<
8
,
0xFFFFFF00UL
,
0
},
{
0
,
},
...
...
This diff is collapsed.
Click to expand it.
drivers/ide/pci/serverworks.c
View file @
729c80c6
...
...
@@ -21,6 +21,9 @@
*
* CSB6: `Champion South Bridge' IDE Interface (optional: third channel)
*
* HT1000: AKA BCM5785 - Hypertransport Southbridge for Opteron systems. IDE
* controller same as the CSB6. Single channel ATA100 only.
*
* Documentation:
* Available under NDA only. Errata info very hard to get.
*
...
...
@@ -71,6 +74,8 @@ static u8 svwks_ratemask (ide_drive_t *drive)
if
(
!
svwks_revision
)
pci_read_config_byte
(
dev
,
PCI_REVISION_ID
,
&
svwks_revision
);
if
(
dev
->
device
==
PCI_DEVICE_ID_SERVERWORKS_HT1000IDE
)
return
2
;
if
(
dev
->
device
==
PCI_DEVICE_ID_SERVERWORKS_OSB4IDE
)
{
u32
reg
=
0
;
if
(
isa_dev
)
...
...
@@ -109,6 +114,7 @@ static u8 svwks_csb_check (struct pci_dev *dev)
case
PCI_DEVICE_ID_SERVERWORKS_CSB5IDE
:
case
PCI_DEVICE_ID_SERVERWORKS_CSB6IDE
:
case
PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2
:
case
PCI_DEVICE_ID_SERVERWORKS_HT1000IDE
:
return
1
;
default:
break
;
...
...
@@ -438,6 +444,13 @@ static unsigned int __devinit init_chipset_svwks (struct pci_dev *dev, const cha
btr
|=
(
svwks_revision
>=
SVWKS_CSB5_REVISION_NEW
)
?
0x3
:
0x2
;
pci_write_config_byte
(
dev
,
0x5A
,
btr
);
}
/* Setup HT1000 SouthBridge Controller - Single Channel Only */
else
if
(
dev
->
device
==
PCI_DEVICE_ID_SERVERWORKS_HT1000IDE
)
{
pci_read_config_byte
(
dev
,
0x5A
,
&
btr
);
btr
&=
~
0x40
;
btr
|=
0x3
;
pci_write_config_byte
(
dev
,
0x5A
,
btr
);
}
return
(
dev
->
irq
)
?
dev
->
irq
:
0
;
}
...
...
@@ -629,6 +642,15 @@ static ide_pci_device_t serverworks_chipsets[] __devinitdata = {
.
channels
=
1
,
/* 2 */
.
autodma
=
AUTODMA
,
.
bootable
=
ON_BOARD
,
},{
/* 4 */
.
name
=
"SvrWks HT1000"
,
.
init_setup
=
init_setup_svwks
,
.
init_chipset
=
init_chipset_svwks
,
.
init_hwif
=
init_hwif_svwks
,
.
init_dma
=
init_dma_svwks
,
.
channels
=
1
,
/* 2 */
.
autodma
=
AUTODMA
,
.
bootable
=
ON_BOARD
,
}
};
...
...
@@ -653,6 +675,7 @@ static struct pci_device_id svwks_pci_tbl[] = {
{
PCI_VENDOR_ID_SERVERWORKS
,
PCI_DEVICE_ID_SERVERWORKS_CSB5IDE
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
1
},
{
PCI_VENDOR_ID_SERVERWORKS
,
PCI_DEVICE_ID_SERVERWORKS_CSB6IDE
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
2
},
{
PCI_VENDOR_ID_SERVERWORKS
,
PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
3
},
{
PCI_VENDOR_ID_SERVERWORKS
,
PCI_DEVICE_ID_SERVERWORKS_HT1000IDE
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
4
},
{
0
,
},
};
MODULE_DEVICE_TABLE
(
pci
,
svwks_pci_tbl
);
...
...
This diff is collapsed.
Click to expand it.
drivers/ide/ppc/pmac.c
View file @
729c80c6
...
...
@@ -1664,7 +1664,7 @@ static struct macio_driver pmac_ide_macio_driver =
};
static
struct
pci_device_id
pmac_ide_pci_match
[]
=
{
{
PCI_VENDOR_ID_APPLE
,
PCI_DEVI
EC
_ID_APPLE_UNI_N_ATA
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
},
{
PCI_VENDOR_ID_APPLE
,
PCI_DEVI
CE
_ID_APPLE_UNI_N_ATA
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
},
{
PCI_VENDOR_ID_APPLE
,
PCI_DEVICE_ID_APPLE_IPID_ATA100
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
},
{
PCI_VENDOR_ID_APPLE
,
PCI_DEVICE_ID_APPLE_K2_ATA100
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
},
{
PCI_VENDOR_ID_APPLE
,
PCI_DEVICE_ID_APPLE_SH_ATA
,
...
...
This diff is collapsed.
Click to expand it.
drivers/ide/setup-pci.c
View file @
729c80c6
...
...
@@ -229,6 +229,7 @@ second_chance_to_dma:
case
PCI_DEVICE_ID_AMD_VIPER_7409
:
case
PCI_DEVICE_ID_CMD_643
:
case
PCI_DEVICE_ID_SERVERWORKS_CSB5IDE
:
case
PCI_DEVICE_ID_REVOLUTION
:
simplex_stat
=
hwif
->
INB
(
dma_base
+
2
);
hwif
->
OUTB
((
simplex_stat
&
0x60
),(
dma_base
+
2
));
simplex_stat
=
hwif
->
INB
(
dma_base
+
2
);
...
...
This diff is collapsed.
Click to expand it.
drivers/md/md.c
View file @
729c80c6
...
...
@@ -623,6 +623,7 @@ static int super_90_validate(mddev_t *mddev, mdk_rdev_t *rdev)
mddev
->
raid_disks
=
sb
->
raid_disks
;
mddev
->
size
=
sb
->
size
;
mddev
->
events
=
md_event
(
sb
);
mddev
->
bitmap_offset
=
0
;
if
(
sb
->
state
&
(
1
<<
MD_SB_CLEAN
))
mddev
->
recovery_cp
=
MaxSector
;
...
...
@@ -938,6 +939,7 @@ static int super_1_validate(mddev_t *mddev, mdk_rdev_t *rdev)
mddev
->
raid_disks
=
le32_to_cpu
(
sb
->
raid_disks
);
mddev
->
size
=
le64_to_cpu
(
sb
->
size
)
/
2
;
mddev
->
events
=
le64_to_cpu
(
sb
->
events
);
mddev
->
bitmap_offset
=
0
;
mddev
->
recovery_cp
=
le64_to_cpu
(
sb
->
resync_offset
);
memcpy
(
mddev
->
uuid
,
sb
->
set_uuid
,
16
);
...
...
@@ -1824,6 +1826,7 @@ static int do_md_stop(mddev_t * mddev, int ro)
fput
(
mddev
->
bitmap_file
);
mddev
->
bitmap_file
=
NULL
;
}
mddev
->
bitmap_offset
=
0
;
/*
* Free resources if final stop
...
...
This diff is collapsed.
Click to expand it.
drivers/net/8139cp.c
View file @
729c80c6
...
...
@@ -1897,6 +1897,7 @@ static int cp_resume (struct pci_dev *pdev)
{
struct
net_device
*
dev
;
struct
cp_private
*
cp
;
unsigned
long
flags
;
dev
=
pci_get_drvdata
(
pdev
);
cp
=
netdev_priv
(
dev
);
...
...
@@ -1910,6 +1911,12 @@ static int cp_resume (struct pci_dev *pdev)
cp_init_hw
(
cp
);
netif_start_queue
(
dev
);
spin_lock_irqsave
(
&
cp
->
lock
,
flags
);
mii_check_media
(
&
cp
->
mii_if
,
netif_msg_link
(
cp
),
FALSE
);
spin_unlock_irqrestore
(
&
cp
->
lock
,
flags
);
return
0
;
}
...
...
This diff is collapsed.
Click to expand it.
drivers/net/dm9000.c
View file @
729c80c6
...
...
@@ -48,6 +48,10 @@
* net_device_stats
* * introduced tx_timeout function
* * reworked locking
*
* 01-Jul-2005 Ben Dooks <ben@simtec.co.uk>
* * fixed spinlock call without pointer
* * ensure spinlock is initialised
*/
#include <linux/module.h>
...
...
@@ -148,7 +152,6 @@ static int dm9000_probe(struct device *);
static
int
dm9000_open
(
struct
net_device
*
);
static
int
dm9000_start_xmit
(
struct
sk_buff
*
,
struct
net_device
*
);
static
int
dm9000_stop
(
struct
net_device
*
);
static
int
dm9000_do_ioctl
(
struct
net_device
*
,
struct
ifreq
*
,
int
);
static
void
dm9000_timer
(
unsigned
long
);
...
...
@@ -322,7 +325,7 @@ static void dm9000_timeout(struct net_device *dev)
/* Save previous register address */
reg_save
=
readb
(
db
->
io_addr
);
spin_lock_irqsave
(
db
->
lock
,
flags
);
spin_lock_irqsave
(
&
db
->
lock
,
flags
);
netif_stop_queue
(
dev
);
dm9000_reset
(
db
);
...
...
@@ -333,7 +336,7 @@ static void dm9000_timeout(struct net_device *dev)
/* Restore previous register address */
writeb
(
reg_save
,
db
->
io_addr
);
spin_unlock_irqrestore
(
db
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
db
->
lock
,
flags
);
}
...
...
@@ -387,8 +390,6 @@ dm9000_probe(struct device *dev)
int
i
;
u32
id_val
;
printk
(
KERN_INFO
"%s Ethernet Driver
\n
"
,
CARDNAME
);
/* Init network device */
ndev
=
alloc_etherdev
(
sizeof
(
struct
board_info
));
if
(
!
ndev
)
{
...
...
@@ -405,6 +406,8 @@ dm9000_probe(struct device *dev)
db
=
(
struct
board_info
*
)
ndev
->
priv
;
memset
(
db
,
0
,
sizeof
(
*
db
));
spin_lock_init
(
&
db
->
lock
);
if
(
pdev
->
num_resources
<
2
)
{
ret
=
-
ENODEV
;
goto
out
;
...
...
@@ -541,7 +544,6 @@ dm9000_probe(struct device *dev)
ndev
->
stop
=
&
dm9000_stop
;
ndev
->
get_stats
=
&
dm9000_get_stats
;
ndev
->
set_multicast_list
=
&
dm9000_hash_table
;
ndev
->
do_ioctl
=
&
dm9000_do_ioctl
;
#ifdef DM9000_PROGRAM_EEPROM
program_eeprom
(
db
);
...
...
@@ -612,7 +614,7 @@ dm9000_open(struct net_device *dev)
/* set and active a timer process */
init_timer
(
&
db
->
timer
);
db
->
timer
.
expires
=
DM9000_TIMER_WUT
*
2
;
db
->
timer
.
expires
=
DM9000_TIMER_WUT
;
db
->
timer
.
data
=
(
unsigned
long
)
dev
;
db
->
timer
.
function
=
&
dm9000_timer
;
add_timer
(
&
db
->
timer
);
...
...
@@ -845,15 +847,6 @@ dm9000_get_stats(struct net_device *dev)
return
&
db
->
stats
;
}
/*
* Process the upper socket ioctl command
*/
static
int
dm9000_do_ioctl
(
struct
net_device
*
dev
,
struct
ifreq
*
ifr
,
int
cmd
)
{
PRINTK1
(
"entering %s
\n
"
,
__FUNCTION__
);
return
0
;
}
/*
* A periodic timer routine
...
...
@@ -864,21 +857,11 @@ dm9000_timer(unsigned long data)
{
struct
net_device
*
dev
=
(
struct
net_device
*
)
data
;
board_info_t
*
db
=
(
board_info_t
*
)
dev
->
priv
;
u8
reg_save
;
unsigned
long
flags
;
PRINTK3
(
"dm9000_timer()
\n
"
);
spin_lock_irqsave
(
db
->
lock
,
flags
);
/* Save previous register address */
reg_save
=
readb
(
db
->
io_addr
);
mii_check_media
(
&
db
->
mii
,
netif_msg_link
(
db
),
0
);
/* Restore previous register address */
writeb
(
reg_save
,
db
->
io_addr
);
spin_unlock_irqrestore
(
db
->
lock
,
flags
);
/* Set timer again */
db
->
timer
.
expires
=
DM9000_TIMER_WUT
;
add_timer
(
&
db
->
timer
);
...
...
@@ -1098,9 +1081,14 @@ dm9000_phy_read(struct net_device *dev, int phy_reg_unused, int reg)
{
board_info_t
*
db
=
(
board_info_t
*
)
dev
->
priv
;
unsigned
long
flags
;
unsigned
int
reg_save
;
int
ret
;
spin_lock_irqsave
(
&
db
->
lock
,
flags
);
/* Save previous register address */
reg_save
=
readb
(
db
->
io_addr
);
/* Fill the phyxcer register into REG_0C */
iow
(
db
,
DM9000_EPAR
,
DM9000_PHY
|
reg
);
...
...
@@ -1111,6 +1099,9 @@ dm9000_phy_read(struct net_device *dev, int phy_reg_unused, int reg)
/* The read data keeps on REG_0D & REG_0E */
ret
=
(
ior
(
db
,
DM9000_EPDRH
)
<<
8
)
|
ior
(
db
,
DM9000_EPDRL
);
/* restore the previous address */
writeb
(
reg_save
,
db
->
io_addr
);
spin_unlock_irqrestore
(
&
db
->
lock
,
flags
);
return
ret
;
...
...
@@ -1124,9 +1115,13 @@ dm9000_phy_write(struct net_device *dev, int phyaddr_unused, int reg, int value)
{
board_info_t
*
db
=
(
board_info_t
*
)
dev
->
priv
;
unsigned
long
flags
;
unsigned
long
reg_save
;
spin_lock_irqsave
(
&
db
->
lock
,
flags
);
/* Save previous register address */
reg_save
=
readb
(
db
->
io_addr
);
/* Fill the phyxcer register into REG_0C */
iow
(
db
,
DM9000_EPAR
,
DM9000_PHY
|
reg
);
...
...
@@ -1138,6 +1133,9 @@ dm9000_phy_write(struct net_device *dev, int phyaddr_unused, int reg, int value)
udelay
(
500
);
/* Wait write complete */
iow
(
db
,
DM9000_EPCR
,
0x0
);
/* Clear phyxcer write command */
/* restore the previous address */
writeb
(
reg_save
,
db
->
io_addr
);
spin_unlock_irqrestore
(
&
db
->
lock
,
flags
);
}
...
...
@@ -1202,6 +1200,8 @@ static struct device_driver dm9000_driver = {
static
int
__init
dm9000_init
(
void
)
{
printk
(
KERN_INFO
"%s Ethernet Driver
\n
"
,
CARDNAME
);
return
driver_register
(
&
dm9000_driver
);
/* search board and register */
}
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ioc3-eth.c
View file @
729c80c6
...
...
@@ -499,7 +499,7 @@ static int ioc3_mdio_read(struct net_device *dev, int phy, int reg)
ioc3_w_micr
((
phy
<<
MICR_PHYADDR_SHIFT
)
|
reg
|
MICR_READTRIG
);
while
(
ioc3_r_micr
()
&
MICR_BUSY
);
return
ioc3_r_mi
c
r
()
&
MIDR_DATA_MASK
;
return
ioc3_r_mi
dr_
r
()
&
MIDR_DATA_MASK
;
}
static
void
ioc3_mdio_write
(
struct
net_device
*
dev
,
int
phy
,
int
reg
,
int
data
)
...
...
@@ -1291,7 +1291,6 @@ static int ioc3_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
dev
->
features
=
NETIF_F_IP_CSUM
;
#endif
ioc3_setup_duplex
(
ip
);
sw_physid1
=
ioc3_mdio_read
(
dev
,
ip
->
mii
.
phy_id
,
MII_PHYSID1
);
sw_physid2
=
ioc3_mdio_read
(
dev
,
ip
->
mii
.
phy_id
,
MII_PHYSID2
);
...
...
@@ -1300,6 +1299,7 @@ static int ioc3_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
goto
out_stop
;
mii_check_media
(
&
ip
->
mii
,
1
,
1
);
ioc3_setup_duplex
(
ip
);
vendor
=
(
sw_physid1
<<
12
)
|
(
sw_physid2
>>
4
);
model
=
(
sw_physid2
>>
4
)
&
0x3f
;
...
...
@@ -1524,7 +1524,7 @@ static void ioc3_get_drvinfo (struct net_device *dev,
struct
ethtool_drvinfo
*
info
)
{
struct
ioc3_private
*
ip
=
netdev_priv
(
dev
);
strcpy
(
info
->
driver
,
IOC3_NAME
);
strcpy
(
info
->
version
,
IOC3_VERSION
);
strcpy
(
info
->
bus_info
,
pci_name
(
ip
->
pdev
));
...
...
@@ -1550,7 +1550,7 @@ static int ioc3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
spin_lock_irq
(
&
ip
->
ioc3_lock
);
rc
=
mii_ethtool_sset
(
&
ip
->
mii
,
cmd
);
spin_unlock_irq
(
&
ip
->
ioc3_lock
);
return
rc
;
}
...
...
This diff is collapsed.
Click to expand it.
drivers/net/loopback.c
View file @
729c80c6
...
...
@@ -214,7 +214,7 @@ struct net_device loopback_dev = {
.
ethtool_ops
=
&
loopback_ethtool_ops
,
};
/* Setup and register the
of the LOOPBACK
device. */
/* Setup and register the
loopback
device. */
int
__init
loopback_init
(
void
)
{
struct
net_device_stats
*
stats
;
...
...
This diff is collapsed.
Click to expand it.
drivers/net/tg3.c
View file @
729c80c6
...
...
@@ -66,8 +66,8 @@
#define DRV_MODULE_NAME "tg3"
#define PFX DRV_MODULE_NAME ": "
#define DRV_MODULE_VERSION "3.3
5
"
#define DRV_MODULE_RELDATE "August
6
, 2005"
#define DRV_MODULE_VERSION "3.3
6
"
#define DRV_MODULE_RELDATE "August
19
, 2005"
#define TG3_DEF_MAC_MODE 0
#define TG3_DEF_RX_MODE 0
...
...
@@ -8970,6 +8970,8 @@ static int __devinit tg3_phy_probe(struct tg3 *tp)
tp
->
phy_id
=
hw_phy_id
;
if
(
hw_phy_id_masked
==
PHY_ID_BCM8002
)
tp
->
tg3_flags2
|=
TG3_FLG2_PHY_SERDES
;
else
tp
->
tg3_flags2
&=
~
TG3_FLG2_PHY_SERDES
;
}
else
{
if
(
tp
->
phy_id
!=
PHY_ID_INVALID
)
{
/* Do nothing, phy ID already set up in
...
...
This diff is collapsed.
Click to expand it.
drivers/video/radeonfb.c
View file @
729c80c6
...
...
@@ -80,7 +80,7 @@
#include <video/radeon.h>
#include <linux/radeonfb.h>
#define DEBUG
1
#define DEBUG
0
#if DEBUG
#define RTRACE printk
...
...
This diff is collapsed.
Click to expand it.
fs/afs/mntpt.c
View file @
729c80c6
...
...
@@ -30,7 +30,7 @@ static struct dentry *afs_mntpt_lookup(struct inode *dir,
struct
dentry
*
dentry
,
struct
nameidata
*
nd
);
static
int
afs_mntpt_open
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
afs_mntpt_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
);
static
void
*
afs_mntpt_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
);
struct
file_operations
afs_mntpt_file_operations
=
{
.
open
=
afs_mntpt_open
,
...
...
@@ -233,7 +233,7 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)
/*
* follow a link from a mountpoint directory, thus causing it to be mounted
*/
static
int
afs_mntpt_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
afs_mntpt_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
struct
vfsmount
*
newmnt
;
struct
dentry
*
old_dentry
;
...
...
@@ -249,7 +249,7 @@ static int afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd)
newmnt
=
afs_mntpt_do_automount
(
dentry
);
if
(
IS_ERR
(
newmnt
))
{
path_release
(
nd
);
return
PTR_ERR
(
newmnt
)
;
return
(
void
*
)
newmnt
;
}
old_dentry
=
nd
->
dentry
;
...
...
@@ -267,7 +267,7 @@ static int afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd)
}
kleave
(
" = %d"
,
err
);
return
err
;
return
ERR_PTR
(
err
)
;
}
/* end afs_mntpt_follow_link() */
/*****************************************************************************/
...
...
This diff is collapsed.
Click to expand it.
fs/autofs/symlink.c
View file @
729c80c6
...
...
@@ -12,11 +12,12 @@
#include "autofs_i.h"
static
int
autofs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
/* Nothing to release.. */
static
void
*
autofs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
char
*
s
=
((
struct
autofs_symlink
*
)
dentry
->
d_inode
->
u
.
generic_ip
)
->
data
;
nd_set_link
(
nd
,
s
);
return
0
;
return
NULL
;
}
struct
inode_operations
autofs_symlink_inode_operations
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/autofs4/symlink.c
View file @
729c80c6
...
...
@@ -12,11 +12,11 @@
#include "autofs_i.h"
static
int
autofs4_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
autofs4_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
struct
autofs_info
*
ino
=
autofs4_dentry_ino
(
dentry
);
nd_set_link
(
nd
,
(
char
*
)
ino
->
u
.
symlink
);
return
0
;
return
NULL
;
}
struct
inode_operations
autofs4_symlink_inode_operations
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/befs/linuxvfs.c
View file @
729c80c6
...
...
@@ -41,8 +41,8 @@ static struct inode *befs_alloc_inode(struct super_block *sb);
static
void
befs_destroy_inode
(
struct
inode
*
inode
);
static
int
befs_init_inodecache
(
void
);
static
void
befs_destroy_inodecache
(
void
);
static
int
befs_follow_link
(
struct
dentry
*
,
struct
nameidata
*
);
static
void
befs_put_link
(
struct
dentry
*
,
struct
nameidata
*
);
static
void
*
befs_follow_link
(
struct
dentry
*
,
struct
nameidata
*
);
static
void
befs_put_link
(
struct
dentry
*
,
struct
nameidata
*
,
void
*
);
static
int
befs_utf2nls
(
struct
super_block
*
sb
,
const
char
*
in
,
int
in_len
,
char
**
out
,
int
*
out_len
);
static
int
befs_nls2utf
(
struct
super_block
*
sb
,
const
char
*
in
,
int
in_len
,
...
...
@@ -461,7 +461,7 @@ befs_destroy_inodecache(void)
* The data stream become link name. Unless the LONG_SYMLINK
* flag is set.
*/
static
int
static
void
*
befs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
befs_inode_info
*
befs_ino
=
BEFS_I
(
dentry
->
d_inode
);
...
...
@@ -487,10 +487,10 @@ befs_follow_link(struct dentry *dentry, struct nameidata *nd)
}
nd_set_link
(
nd
,
link
);
return
0
;
return
NULL
;
}
static
void
befs_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
befs_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
,
void
*
p
)
{
befs_inode_info
*
befs_ino
=
BEFS_I
(
dentry
->
d_inode
);
if
(
befs_ino
->
i_flags
&
BEFS_LONG_SYMLINK
)
{
...
...
This diff is collapsed.
Click to expand it.
fs/cifs/cifsfs.h
View file @
729c80c6
...
...
@@ -83,8 +83,8 @@ extern int cifs_dir_notify(struct file *, unsigned long arg);
extern
struct
dentry_operations
cifs_dentry_ops
;
/* Functions related to symlinks */
extern
int
cifs_follow_link
(
struct
dentry
*
direntry
,
struct
nameidata
*
nd
);
extern
void
cifs_put_link
(
struct
dentry
*
direntry
,
struct
nameidata
*
nd
);
extern
void
*
cifs_follow_link
(
struct
dentry
*
direntry
,
struct
nameidata
*
nd
);
extern
void
cifs_put_link
(
struct
dentry
*
direntry
,
struct
nameidata
*
nd
,
void
*
);
extern
int
cifs_readlink
(
struct
dentry
*
direntry
,
char
__user
*
buffer
,
int
buflen
);
extern
int
cifs_symlink
(
struct
inode
*
inode
,
struct
dentry
*
direntry
,
...
...
This diff is collapsed.
Click to expand it.
fs/cifs/link.c
View file @
729c80c6
...
...
@@ -92,7 +92,7 @@ cifs_hl_exit:
return
rc
;
}
int
void
*
cifs_follow_link
(
struct
dentry
*
direntry
,
struct
nameidata
*
nd
)
{
struct
inode
*
inode
=
direntry
->
d_inode
;
...
...
@@ -148,7 +148,7 @@ out:
out_no_free:
FreeXid
(
xid
);
nd_set_link
(
nd
,
target_path
);
return
0
;
return
NULL
;
/* No cookie */
}
int
...
...
@@ -330,7 +330,7 @@ cifs_readlink(struct dentry *direntry, char __user *pBuffer, int buflen)
return
rc
;
}
void
cifs_put_link
(
struct
dentry
*
direntry
,
struct
nameidata
*
nd
)
void
cifs_put_link
(
struct
dentry
*
direntry
,
struct
nameidata
*
nd
,
void
*
cookie
)
{
char
*
p
=
nd_get_link
(
nd
);
if
(
!
IS_ERR
(
p
))
...
...
This diff is collapsed.
Click to expand it.
fs/devfs/base.c
View file @
729c80c6
...
...
@@ -2491,11 +2491,11 @@ static int devfs_mknod(struct inode *dir, struct dentry *dentry, int mode,
return
0
;
}
/* End Function devfs_mknod */
static
int
devfs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
devfs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
struct
devfs_entry
*
p
=
get_devfs_entry_from_vfs_inode
(
dentry
->
d_inode
);
nd_set_link
(
nd
,
p
?
p
->
u
.
symlink
.
linkname
:
ERR_PTR
(
-
ENODEV
));
return
0
;
return
NULL
;
}
/* End Function devfs_follow_link */
static
struct
inode_operations
devfs_iops
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/ext2/symlink.c
View file @
729c80c6
...
...
@@ -21,11 +21,11 @@
#include "xattr.h"
#include <linux/namei.h>
static
int
ext2_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
ext2_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
struct
ext2_inode_info
*
ei
=
EXT2_I
(
dentry
->
d_inode
);
nd_set_link
(
nd
,
(
char
*
)
ei
->
i_data
);
return
0
;
return
NULL
;
}
struct
inode_operations
ext2_symlink_inode_operations
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/ext3/symlink.c
View file @
729c80c6
...
...
@@ -23,11 +23,11 @@
#include <linux/namei.h>
#include "xattr.h"
static
int
ext3_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
ext3_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
struct
ext3_inode_info
*
ei
=
EXT3_I
(
dentry
->
d_inode
);
nd_set_link
(
nd
,
(
char
*
)
ei
->
i_data
);
return
0
;
return
NULL
;
}
struct
inode_operations
ext3_symlink_inode_operations
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/freevxfs/vxfs_immed.c
View file @
729c80c6
...
...
@@ -38,7 +38,7 @@
#include "vxfs_inode.h"
static
int
vxfs_immed_follow_link
(
struct
dentry
*
,
struct
nameidata
*
);
static
void
*
vxfs_immed_follow_link
(
struct
dentry
*
,
struct
nameidata
*
);
static
int
vxfs_immed_readpage
(
struct
file
*
,
struct
page
*
);
...
...
@@ -72,12 +72,12 @@ struct address_space_operations vxfs_immed_aops = {
* Returns:
* Zero on success, else a negative error code.
*/
static
int
static
void
*
vxfs_immed_follow_link
(
struct
dentry
*
dp
,
struct
nameidata
*
np
)
{
struct
vxfs_inode_info
*
vip
=
VXFS_INO
(
dp
->
d_inode
);
nd_set_link
(
np
,
vip
->
vii_immed
.
vi_immed
);
return
0
;
return
NULL
;
}
/**
...
...
This diff is collapsed.
Click to expand it.
fs/ioprio.c
View file @
729c80c6
...
...
@@ -62,6 +62,8 @@ asmlinkage long sys_ioprio_set(int which, int who, int ioprio)
break
;
case
IOPRIO_CLASS_IDLE
:
if
(
!
capable
(
CAP_SYS_ADMIN
))
return
-
EPERM
;
break
;
default:
return
-
EINVAL
;
...
...
This diff is collapsed.
Click to expand it.
fs/jffs2/symlink.c
View file @
729c80c6
...
...
@@ -18,7 +18,7 @@
#include <linux/namei.h>
#include "nodelist.h"
static
int
jffs2_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
);
static
void
*
jffs2_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
);
struct
inode_operations
jffs2_symlink_inode_operations
=
{
...
...
@@ -27,9 +27,10 @@ struct inode_operations jffs2_symlink_inode_operations =
.
setattr
=
jffs2_setattr
};
static
int
jffs2_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
jffs2_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
struct
jffs2_inode_info
*
f
=
JFFS2_INODE_INFO
(
dentry
->
d_inode
);
char
*
p
=
(
char
*
)
f
->
dents
;
/*
* We don't acquire the f->sem mutex here since the only data we
...
...
@@ -45,19 +46,20 @@ static int jffs2_follow_link(struct dentry *dentry, struct nameidata *nd)
* nd_set_link() call.
*/
if
(
!
f
->
dents
)
{
if
(
!
p
)
{
printk
(
KERN_ERR
"jffs2_follow_link(): can't find symlink taerget
\n
"
);
return
-
EIO
;
p
=
ERR_PTR
(
-
EIO
);
}
else
{
D1
(
printk
(
KERN_DEBUG
"jffs2_follow_link(): target path is '%s'
\n
"
,
(
char
*
)
f
->
dents
));
}
D1
(
printk
(
KERN_DEBUG
"jffs2_follow_link(): target path is '%s'
\n
"
,
(
char
*
)
f
->
dents
));
nd_set_link
(
nd
,
(
char
*
)
f
->
dents
);
nd_set_link
(
nd
,
p
);
/*
* We unlock the f->sem mutex but VFS will use the f->dents string. This is safe
* since the only way that may cause f->dents to be changed is iput() operation.
* But VFS will not use f->dents after iput() has been called.
*/
return
0
;
return
NULL
;
}
This diff is collapsed.
Click to expand it.
fs/jfs/symlink.c
View file @
729c80c6
...
...
@@ -22,11 +22,11 @@
#include "jfs_inode.h"
#include "jfs_xattr.h"
static
int
jfs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
jfs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
char
*
s
=
JFS_IP
(
dentry
->
d_inode
)
->
i_inline
;
nd_set_link
(
nd
,
s
);
return
0
;
return
NULL
;
}
struct
inode_operations
jfs_symlink_inode_operations
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/namei.c
View file @
729c80c6
...
...
@@ -501,6 +501,7 @@ struct path {
static
inline
int
__do_follow_link
(
struct
path
*
path
,
struct
nameidata
*
nd
)
{
int
error
;
void
*
cookie
;
struct
dentry
*
dentry
=
path
->
dentry
;
touch_atime
(
path
->
mnt
,
dentry
);
...
...
@@ -508,13 +509,15 @@ static inline int __do_follow_link(struct path *path, struct nameidata *nd)
if
(
path
->
mnt
==
nd
->
mnt
)
mntget
(
path
->
mnt
);
error
=
dentry
->
d_inode
->
i_op
->
follow_link
(
dentry
,
nd
);
if
(
!
error
)
{
cookie
=
dentry
->
d_inode
->
i_op
->
follow_link
(
dentry
,
nd
);
error
=
PTR_ERR
(
cookie
);
if
(
!
IS_ERR
(
cookie
))
{
char
*
s
=
nd_get_link
(
nd
);
error
=
0
;
if
(
s
)
error
=
__vfs_follow_link
(
nd
,
s
);
if
(
dentry
->
d_inode
->
i_op
->
put_link
)
dentry
->
d_inode
->
i_op
->
put_link
(
dentry
,
nd
);
dentry
->
d_inode
->
i_op
->
put_link
(
dentry
,
nd
,
cookie
);
}
dput
(
dentry
);
mntput
(
path
->
mnt
);
...
...
@@ -2344,15 +2347,17 @@ out:
int
generic_readlink
(
struct
dentry
*
dentry
,
char
__user
*
buffer
,
int
buflen
)
{
struct
nameidata
nd
;
int
res
;
void
*
cookie
;
nd
.
depth
=
0
;
res
=
dentry
->
d_inode
->
i_op
->
follow_link
(
dentry
,
&
nd
);
if
(
!
res
)
{
res
=
vfs_readlink
(
dentry
,
buffer
,
buflen
,
nd_get_link
(
&
nd
));
cookie
=
dentry
->
d_inode
->
i_op
->
follow_link
(
dentry
,
&
nd
);
if
(
!
IS_ERR
(
cookie
)
)
{
int
res
=
vfs_readlink
(
dentry
,
buffer
,
buflen
,
nd_get_link
(
&
nd
));
if
(
dentry
->
d_inode
->
i_op
->
put_link
)
dentry
->
d_inode
->
i_op
->
put_link
(
dentry
,
&
nd
);
dentry
->
d_inode
->
i_op
->
put_link
(
dentry
,
&
nd
,
cookie
);
cookie
=
ERR_PTR
(
res
);
}
return
res
;
return
PTR_ERR
(
cookie
)
;
}
int
vfs_follow_link
(
struct
nameidata
*
nd
,
const
char
*
link
)
...
...
@@ -2395,23 +2400,20 @@ int page_readlink(struct dentry *dentry, char __user *buffer, int buflen)
return
res
;
}
int
page_follow_link_light
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
void
*
page_follow_link_light
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
struct
page
*
page
;
struct
page
*
page
=
NULL
;
nd_set_link
(
nd
,
page_getlink
(
dentry
,
&
page
));
return
0
;
return
page
;
}
void
page_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
void
page_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
,
void
*
cookie
)
{
if
(
!
IS_ERR
(
nd_get_link
(
nd
)))
{
struct
page
*
page
;
page
=
find_get_page
(
dentry
->
d_inode
->
i_mapping
,
0
);
if
(
!
page
)
BUG
();
struct
page
*
page
=
cookie
;
if
(
page
)
{
kunmap
(
page
);
page_cache_release
(
page
);
page_cache_release
(
page
);
}
}
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/dir.c
View file @
729c80c6
...
...
@@ -182,14 +182,16 @@ int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page *page)
/* We requested READDIRPLUS, but the server doesn't grok it */
if
(
error
==
-
ENOTSUPP
&&
desc
->
plus
)
{
NFS_SERVER
(
inode
)
->
caps
&=
~
NFS_CAP_READDIRPLUS
;
NFS_FLAGS
(
inode
)
&=
~
NFS_INO_ADVISE_RDPLUS
;
clear_bit
(
NFS_INO_ADVISE_RDPLUS
,
&
NFS_FLAGS
(
inode
))
;
desc
->
plus
=
0
;
goto
again
;
}
goto
error
;
}
SetPageUptodate
(
page
);
NFS_FLAGS
(
inode
)
|=
NFS_INO_INVALID_ATIME
;
spin_lock
(
&
inode
->
i_lock
);
NFS_I
(
inode
)
->
cache_validity
|=
NFS_INO_INVALID_ATIME
;
spin_unlock
(
&
inode
->
i_lock
);
/* Ensure consistent page alignment of the data.
* Note: assumes we have exclusive access to this mapping either
* through inode->i_sem or some other mechanism.
...
...
@@ -462,7 +464,9 @@ int uncached_readdir(nfs_readdir_descriptor_t *desc, void *dirent,
page
,
NFS_SERVER
(
inode
)
->
dtsize
,
desc
->
plus
);
NFS_FLAGS
(
inode
)
|=
NFS_INO_INVALID_ATIME
;
spin_lock
(
&
inode
->
i_lock
);
NFS_I
(
inode
)
->
cache_validity
|=
NFS_INO_INVALID_ATIME
;
spin_unlock
(
&
inode
->
i_lock
);
desc
->
page
=
page
;
desc
->
ptr
=
kmap
(
page
);
/* matching kunmap in nfs_do_filldir */
if
(
desc
->
error
>=
0
)
{
...
...
@@ -545,7 +549,7 @@ static int nfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
break
;
}
if
(
res
==
-
ETOOSMALL
&&
desc
->
plus
)
{
NFS_FLAGS
(
inode
)
&=
~
NFS_INO_ADVISE_RDPLUS
;
clear_bit
(
NFS_INO_ADVISE_RDPLUS
,
&
NFS_FLAGS
(
inode
))
;
nfs_zap_caches
(
inode
);
desc
->
plus
=
0
;
desc
->
entry
->
eof
=
0
;
...
...
@@ -608,7 +612,7 @@ static inline int nfs_check_verifier(struct inode *dir, struct dentry *dentry)
{
if
(
IS_ROOT
(
dentry
))
return
1
;
if
((
NFS_
FLAGS
(
dir
)
&
NFS_INO_INVALID_ATTR
)
!=
0
if
((
NFS_
I
(
dir
)
->
cache_validity
&
NFS_INO_INVALID_ATTR
)
!=
0
||
nfs_attribute_timeout
(
dir
))
return
0
;
return
nfs_verify_change_attribute
(
dir
,
(
unsigned
long
)
dentry
->
d_fsdata
);
...
...
@@ -935,6 +939,7 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry
error
=
nfs_revalidate_inode
(
NFS_SERVER
(
dir
),
dir
);
if
(
error
<
0
)
{
res
=
ERR_PTR
(
error
);
unlock_kernel
();
goto
out
;
}
...
...
@@ -1575,11 +1580,12 @@ out:
int
nfs_access_get_cached
(
struct
inode
*
inode
,
struct
rpc_cred
*
cred
,
struct
nfs_access_entry
*
res
)
{
struct
nfs_access_entry
*
cache
=
&
NFS_I
(
inode
)
->
cache_access
;
struct
nfs_inode
*
nfsi
=
NFS_I
(
inode
);
struct
nfs_access_entry
*
cache
=
&
nfsi
->
cache_access
;
if
(
cache
->
cred
!=
cred
||
time_after
(
jiffies
,
cache
->
jiffies
+
NFS_ATTRTIMEO
(
inode
))
||
(
NFS_FLAGS
(
inode
)
&
NFS_INO_INVALID_ACCESS
))
||
(
nfsi
->
cache_validity
&
NFS_INO_INVALID_ACCESS
))
return
-
ENOENT
;
memcpy
(
res
,
cache
,
sizeof
(
*
res
));
return
0
;
...
...
@@ -1587,14 +1593,18 @@ int nfs_access_get_cached(struct inode *inode, struct rpc_cred *cred, struct nfs
void
nfs_access_add_cache
(
struct
inode
*
inode
,
struct
nfs_access_entry
*
set
)
{
struct
nfs_access_entry
*
cache
=
&
NFS_I
(
inode
)
->
cache_access
;
struct
nfs_inode
*
nfsi
=
NFS_I
(
inode
);
struct
nfs_access_entry
*
cache
=
&
nfsi
->
cache_access
;
if
(
cache
->
cred
!=
set
->
cred
)
{
if
(
cache
->
cred
)
put_rpccred
(
cache
->
cred
);
cache
->
cred
=
get_rpccred
(
set
->
cred
);
}
NFS_FLAGS
(
inode
)
&=
~
NFS_INO_INVALID_ACCESS
;
/* FIXME: replace current access_cache BKL reliance with inode->i_lock */
spin_lock
(
&
inode
->
i_lock
);
nfsi
->
cache_validity
&=
~
NFS_INO_INVALID_ACCESS
;
spin_unlock
(
&
inode
->
i_lock
);
cache
->
jiffies
=
set
->
jiffies
;
cache
->
mask
=
set
->
mask
;
}
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/file.c
View file @
729c80c6
...
...
@@ -134,9 +134,10 @@ nfs_file_release(struct inode *inode, struct file *filp)
*/
static
int
nfs_revalidate_file
(
struct
inode
*
inode
,
struct
file
*
filp
)
{
struct
nfs_inode
*
nfsi
=
NFS_I
(
inode
);
int
retval
=
0
;
if
((
NFS_FLAGS
(
inode
)
&
NFS_INO_REVAL_PAGECACHE
)
||
nfs_attribute_timeout
(
inode
))
if
((
nfsi
->
cache_validity
&
NFS_INO_REVAL_PAGECACHE
)
||
nfs_attribute_timeout
(
inode
))
retval
=
__nfs_revalidate_inode
(
NFS_SERVER
(
inode
),
inode
);
nfs_revalidate_mapping
(
inode
,
filp
->
f_mapping
);
return
0
;
...
...
@@ -164,7 +165,7 @@ static int nfs_revalidate_file_size(struct inode *inode, struct file *filp)
goto
force_reval
;
if
(
nfsi
->
npages
!=
0
)
return
0
;
if
(
!
(
NFS_FLAGS
(
inode
)
&
NFS_INO_REVAL_PAGECACHE
)
&&
!
nfs_attribute_timeout
(
inode
))
if
(
!
(
nfsi
->
cache_validity
&
NFS_INO_REVAL_PAGECACHE
)
&&
!
nfs_attribute_timeout
(
inode
))
return
0
;
force_reval:
return
__nfs_revalidate_inode
(
server
,
inode
);
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/inode.c
View file @
729c80c6
This diff is collapsed.
Click to expand it.
fs/nfs/nfs3acl.c
View file @
729c80c6
...
...
@@ -308,7 +308,9 @@ static int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
nfs_begin_data_update
(
inode
);
status
=
rpc_call
(
server
->
client_acl
,
ACLPROC3_SETACL
,
&
args
,
&
fattr
,
0
);
NFS_FLAGS
(
inode
)
|=
NFS_INO_INVALID_ACCESS
;
spin_lock
(
&
inode
->
i_lock
);
NFS_I
(
inode
)
->
cache_validity
|=
NFS_INO_INVALID_ACCESS
;
spin_unlock
(
&
inode
->
i_lock
);
nfs_end_data_update
(
inode
);
dprintk
(
"NFS reply setacl: %d
\n
"
,
status
);
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/read.c
View file @
729c80c6
...
...
@@ -140,7 +140,9 @@ static int nfs_readpage_sync(struct nfs_open_context *ctx, struct inode *inode,
if
(
rdata
->
res
.
eof
!=
0
||
result
==
0
)
break
;
}
while
(
count
);
NFS_FLAGS
(
inode
)
|=
NFS_INO_INVALID_ATIME
;
spin_lock
(
&
inode
->
i_lock
);
NFS_I
(
inode
)
->
cache_validity
|=
NFS_INO_INVALID_ATIME
;
spin_unlock
(
&
inode
->
i_lock
);
if
(
count
)
memclear_highpage_flush
(
page
,
rdata
->
args
.
pgbase
,
count
);
...
...
@@ -473,7 +475,9 @@ void nfs_readpage_result(struct rpc_task *task)
}
task
->
tk_status
=
-
EIO
;
}
NFS_FLAGS
(
data
->
inode
)
|=
NFS_INO_INVALID_ATIME
;
spin_lock
(
&
data
->
inode
->
i_lock
);
NFS_I
(
data
->
inode
)
->
cache_validity
|=
NFS_INO_INVALID_ATIME
;
spin_unlock
(
&
data
->
inode
->
i_lock
);
data
->
complete
(
data
,
status
);
}
...
...
This diff is collapsed.
Click to expand it.
fs/nfs/symlink.c
View file @
729c80c6
...
...
@@ -27,26 +27,14 @@
/* Symlink caching in the page cache is even more simplistic
* and straight-forward than readdir caching.
*
* At the beginning of the page we store pointer to struct page in question,
* simplifying nfs_put_link() (if inode got invalidated we can't find the page
* to be freed via pagecache lookup).
* The NUL-terminated string follows immediately thereafter.
*/
struct
nfs_symlink
{
struct
page
*
page
;
char
body
[
0
];
};
static
int
nfs_symlink_filler
(
struct
inode
*
inode
,
struct
page
*
page
)
{
const
unsigned
int
pgbase
=
offsetof
(
struct
nfs_symlink
,
body
);
const
unsigned
int
pglen
=
PAGE_SIZE
-
pgbase
;
int
error
;
lock_kernel
();
error
=
NFS_PROTO
(
inode
)
->
readlink
(
inode
,
page
,
pgbase
,
pglen
);
error
=
NFS_PROTO
(
inode
)
->
readlink
(
inode
,
page
,
0
,
PAGE_SIZE
);
unlock_kernel
();
if
(
error
<
0
)
goto
error
;
...
...
@@ -60,11 +48,10 @@ error:
return
-
EIO
;
}
static
int
nfs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
nfs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
struct
inode
*
inode
=
dentry
->
d_inode
;
struct
page
*
page
;
struct
nfs_symlink
*
p
;
void
*
err
=
ERR_PTR
(
nfs_revalidate_inode
(
NFS_SERVER
(
inode
),
inode
));
if
(
err
)
goto
read_failed
;
...
...
@@ -78,28 +65,20 @@ static int nfs_follow_link(struct dentry *dentry, struct nameidata *nd)
err
=
ERR_PTR
(
-
EIO
);
goto
getlink_read_error
;
}
p
=
kmap
(
page
);
p
->
page
=
page
;
nd_set_link
(
nd
,
p
->
body
);
return
0
;
nd_set_link
(
nd
,
kmap
(
page
));
return
page
;
getlink_read_error:
page_cache_release
(
page
);
read_failed:
nd_set_link
(
nd
,
err
);
return
0
;
return
NULL
;
}
static
void
nfs_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
nfs_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
,
void
*
cookie
)
{
char
*
s
=
nd_get_link
(
nd
);
if
(
!
IS_ERR
(
s
))
{
struct
nfs_symlink
*
p
;
struct
page
*
page
;
p
=
container_of
(
s
,
struct
nfs_symlink
,
body
[
0
]);
page
=
p
->
page
;
if
(
cookie
)
{
struct
page
*
page
=
cookie
;
kunmap
(
page
);
page_cache_release
(
page
);
}
...
...
This diff is collapsed.
Click to expand it.
fs/proc/base.c
View file @
729c80c6
...
...
@@ -890,7 +890,7 @@ static struct file_operations proc_seccomp_operations = {
};
#endif
/* CONFIG_SECCOMP */
static
int
proc_pid_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
proc_pid_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
struct
inode
*
inode
=
dentry
->
d_inode
;
int
error
=
-
EACCES
;
...
...
@@ -907,7 +907,7 @@ static int proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd)
error
=
PROC_I
(
inode
)
->
op
.
proc_get_link
(
inode
,
&
nd
->
dentry
,
&
nd
->
mnt
);
nd
->
last_type
=
LAST_BIND
;
out:
return
error
;
return
ERR_PTR
(
error
)
;
}
static
int
do_proc_readlink
(
struct
dentry
*
dentry
,
struct
vfsmount
*
mnt
,
...
...
@@ -1692,11 +1692,11 @@ static int proc_self_readlink(struct dentry *dentry, char __user *buffer,
return
vfs_readlink
(
dentry
,
buffer
,
buflen
,
tmp
);
}
static
int
proc_self_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
proc_self_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
char
tmp
[
30
];
sprintf
(
tmp
,
"%d"
,
current
->
tgid
);
return
vfs_follow_link
(
nd
,
tmp
);
return
ERR_PTR
(
vfs_follow_link
(
nd
,
tmp
)
);
}
static
struct
inode_operations
proc_self_inode_operations
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/proc/generic.c
View file @
729c80c6
...
...
@@ -329,10 +329,10 @@ static void release_inode_number(unsigned int inum)
spin_unlock
(
&
proc_inum_lock
);
}
static
int
proc_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
proc_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
nd_set_link
(
nd
,
PDE
(
dentry
->
d_inode
)
->
data
);
return
0
;
return
NULL
;
}
static
struct
inode_operations
proc_link_inode_operations
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/reiserfs/inode.c
View file @
729c80c6
...
...
@@ -1985,7 +1985,7 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
* iput doesn't deadlock in reiserfs_delete_xattrs. The locking
* code really needs to be reworked, but this will take care of it
* for now. -jeffm */
if
(
REISERFS_I
(
dir
)
->
i_acl_default
)
{
if
(
REISERFS_I
(
dir
)
->
i_acl_default
&&
!
IS_ERR
(
REISERFS_I
(
dir
)
->
i_acl_default
)
)
{
reiserfs_write_unlock_xattrs
(
dir
->
i_sb
);
iput
(
inode
);
reiserfs_write_lock_xattrs
(
dir
->
i_sb
);
...
...
This diff is collapsed.
Click to expand it.
fs/smbfs/symlink.c
View file @
729c80c6
...
...
@@ -34,7 +34,7 @@ int smb_symlink(struct inode *inode, struct dentry *dentry, const char *oldname)
return
smb_proc_symlink
(
server_from_dentry
(
dentry
),
dentry
,
oldname
);
}
static
int
smb_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
smb_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
char
*
link
=
__getname
();
DEBUG1
(
"followlink of %s/%s
\n
"
,
DENTRY_PATH
(
dentry
));
...
...
@@ -52,10 +52,10 @@ static int smb_follow_link(struct dentry *dentry, struct nameidata *nd)
}
}
nd_set_link
(
nd
,
link
);
return
0
;
return
NULL
;
}
static
void
smb_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
smb_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
,
void
*
p
)
{
char
*
s
=
nd_get_link
(
nd
);
if
(
!
IS_ERR
(
s
))
...
...
This diff is collapsed.
Click to expand it.
fs/sysfs/symlink.c
View file @
729c80c6
...
...
@@ -151,17 +151,17 @@ static int sysfs_getlink(struct dentry *dentry, char * path)
}
static
int
sysfs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
sysfs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
int
error
=
-
ENOMEM
;
unsigned
long
page
=
get_zeroed_page
(
GFP_KERNEL
);
if
(
page
)
error
=
sysfs_getlink
(
dentry
,
(
char
*
)
page
);
nd_set_link
(
nd
,
error
?
ERR_PTR
(
error
)
:
(
char
*
)
page
);
return
0
;
return
NULL
;
}
static
void
sysfs_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
sysfs_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
,
void
*
cookie
)
{
char
*
page
=
nd_get_link
(
nd
);
if
(
!
IS_ERR
(
page
))
...
...
This diff is collapsed.
Click to expand it.
fs/sysv/symlink.c
View file @
729c80c6
...
...
@@ -8,10 +8,10 @@
#include "sysv.h"
#include <linux/namei.h>
static
int
sysv_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
sysv_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
nd_set_link
(
nd
,
(
char
*
)
SYSV_I
(
dentry
->
d_inode
)
->
i_data
);
return
0
;
return
NULL
;
}
struct
inode_operations
sysv_fast_symlink_inode_operations
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/ufs/symlink.c
View file @
729c80c6
...
...
@@ -29,11 +29,11 @@
#include <linux/namei.h>
#include <linux/ufs_fs.h>
static
int
ufs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
ufs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
struct
ufs_inode_info
*
p
=
UFS_I
(
dentry
->
d_inode
);
nd_set_link
(
nd
,
(
char
*
)
p
->
i_u1
.
i_symlink
);
return
0
;
return
NULL
;
}
struct
inode_operations
ufs_fast_symlink_inode_operations
=
{
...
...
This diff is collapsed.
Click to expand it.
fs/xfs/linux-2.6/xfs_iops.c
View file @
729c80c6
...
...
@@ -374,7 +374,7 @@ linvfs_rename(
* we need to be very careful about how much stack we use.
* uio is kmalloced for this reason...
*/
STATIC
int
STATIC
void
*
linvfs_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
...
...
@@ -391,14 +391,14 @@ linvfs_follow_link(
link
=
(
char
*
)
kmalloc
(
MAXNAMELEN
+
1
,
GFP_KERNEL
);
if
(
!
link
)
{
nd_set_link
(
nd
,
ERR_PTR
(
-
ENOMEM
));
return
0
;
return
NULL
;
}
uio
=
(
uio_t
*
)
kmalloc
(
sizeof
(
uio_t
),
GFP_KERNEL
);
if
(
!
uio
)
{
kfree
(
link
);
nd_set_link
(
nd
,
ERR_PTR
(
-
ENOMEM
));
return
0
;
return
NULL
;
}
vp
=
LINVFS_GET_VP
(
dentry
->
d_inode
);
...
...
@@ -422,10 +422,10 @@ linvfs_follow_link(
kfree
(
uio
);
nd_set_link
(
nd
,
link
);
return
0
;
return
NULL
;
}
static
void
linvfs_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
linvfs_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
,
void
*
p
)
{
char
*
s
=
nd_get_link
(
nd
);
if
(
!
IS_ERR
(
s
))
...
...
This diff is collapsed.
Click to expand it.
include/asm-ppc/ibm44x.h
View file @
729c80c6
...
...
@@ -423,11 +423,7 @@
#define MQ0_CONFIG_SIZE_2G 0x0000c000
/* Internal SRAM Controller 440GX/440SP */
#ifdef CONFIG_440SP
#define DCRN_SRAM0_BASE 0x100
#else
/* 440GX */
#define DCRN_SRAM0_BASE 0x000
#endif
#define DCRN_SRAM0_SB0CR (DCRN_SRAM0_BASE + 0x020)
#define DCRN_SRAM0_SB1CR (DCRN_SRAM0_BASE + 0x021)
...
...
This diff is collapsed.
Click to expand it.
include/asm-ppc/ppc4xx_dma.h
View file @
729c80c6
...
...
@@ -285,7 +285,7 @@ typedef uint32_t sgl_handle_t;
#define GET_DMA_POLARITY(chan) (DMAReq_ActiveLow(chan) | DMAAck_ActiveLow(chan) | EOT_ActiveLow(chan))
#elif defined(CONFIG_STB
XXX_DMA
)
/* stb03xxx */
#elif defined(CONFIG_STB
03xxx
)
/* stb03xxx */
#define DMA_PPC4xx_SIZE 4096
...
...
This diff is collapsed.
Click to expand it.
include/asm-sh/unistd.h
View file @
729c80c6
...
...
@@ -295,8 +295,14 @@
#define __NR_add_key 285
#define __NR_request_key 286
#define __NR_keyctl 287
#define __NR_ioprio_set 288
#define __NR_ioprio_get 289
#define __NR_inotify_init 290
#define __NR_inotify_add_watch 291
#define __NR_inotify_rm_watch 292
#define NR_syscalls 288
#define NR_syscalls 293
/* user-visible error numbers are in the range -1 - -124: see <asm-sh/errno.h> */
...
...
This diff is collapsed.
Click to expand it.
include/asm-sh64/unistd.h
View file @
729c80c6
...
...
@@ -338,8 +338,13 @@
#define __NR_add_key 313
#define __NR_request_key 314
#define __NR_keyctl 315
#define __NR_ioprio_set 316
#define __NR_ioprio_get 317
#define __NR_inotify_init 318
#define __NR_inotify_add_watch 319
#define __NR_inotify_rm_watch 320
#define NR_syscalls 3
16
#define NR_syscalls 3
21
/* user-visible error numbers are in the range -1 - -125: see <asm-sh64/errno.h> */
...
...
This diff is collapsed.
Click to expand it.
include/asm-sparc64/thread_info.h
View file @
729c80c6
...
...
@@ -68,6 +68,9 @@ struct thread_info {
struct
restart_block
restart_block
;
struct
pt_regs
*
kern_una_regs
;
unsigned
int
kern_una_insn
;
unsigned
long
fpregs
[
0
]
__attribute__
((
aligned
(
64
)));
};
...
...
@@ -103,6 +106,8 @@ struct thread_info {
#define TI_PCR 0x00000490
#define TI_CEE_STUFF 0x00000498
#define TI_RESTART_BLOCK 0x000004a0
#define TI_KUNA_REGS 0x000004c8
#define TI_KUNA_INSN 0x000004d0
#define TI_FPREGS 0x00000500
/* We embed this in the uppermost byte of thread_info->flags */
...
...
This diff is collapsed.
Click to expand it.
include/linux/fs.h
View file @
729c80c6
...
...
@@ -993,8 +993,8 @@ struct inode_operations {
int
(
*
rename
)
(
struct
inode
*
,
struct
dentry
*
,
struct
inode
*
,
struct
dentry
*
);
int
(
*
readlink
)
(
struct
dentry
*
,
char
__user
*
,
int
);
int
(
*
follow_link
)
(
struct
dentry
*
,
struct
nameidata
*
);
void
(
*
put_link
)
(
struct
dentry
*
,
struct
nameidata
*
);
void
*
(
*
follow_link
)
(
struct
dentry
*
,
struct
nameidata
*
);
void
(
*
put_link
)
(
struct
dentry
*
,
struct
nameidata
*
,
void
*
);
void
(
*
truncate
)
(
struct
inode
*
);
int
(
*
permission
)
(
struct
inode
*
,
int
,
struct
nameidata
*
);
int
(
*
setattr
)
(
struct
dentry
*
,
struct
iattr
*
);
...
...
@@ -1602,8 +1602,8 @@ extern struct file_operations generic_ro_fops;
extern
int
vfs_readlink
(
struct
dentry
*
,
char
__user
*
,
int
,
const
char
*
);
extern
int
vfs_follow_link
(
struct
nameidata
*
,
const
char
*
);
extern
int
page_readlink
(
struct
dentry
*
,
char
__user
*
,
int
);
extern
int
page_follow_link_light
(
struct
dentry
*
,
struct
nameidata
*
);
extern
void
page_put_link
(
struct
dentry
*
,
struct
nameidata
*
);
extern
void
*
page_follow_link_light
(
struct
dentry
*
,
struct
nameidata
*
);
extern
void
page_put_link
(
struct
dentry
*
,
struct
nameidata
*
,
void
*
);
extern
int
page_symlink
(
struct
inode
*
inode
,
const
char
*
symname
,
int
len
);
extern
struct
inode_operations
page_symlink_inode_operations
;
extern
int
generic_readlink
(
struct
dentry
*
,
char
__user
*
,
int
);
...
...
This diff is collapsed.
Click to expand it.
include/linux/nfs_fs.h
View file @
729c80c6
...
...
@@ -112,7 +112,8 @@ struct nfs_inode {
/*
* Various flags
*/
unsigned
int
flags
;
unsigned
long
flags
;
/* atomic bit ops */
unsigned
long
cache_validity
;
/* bit mask */
/*
* read_cache_jiffies is when we started read-caching this inode,
...
...
@@ -174,8 +175,6 @@ struct nfs_inode {
/* Open contexts for shared mmap writes */
struct
list_head
open_files
;
wait_queue_head_t
nfs_i_wait
;
#ifdef CONFIG_NFS_V4
struct
nfs4_cached_acl
*
nfs4_acl
;
/* NFSv4 state */
...
...
@@ -188,17 +187,21 @@ struct nfs_inode {
};
/*
*
Legal inode flag value
s
*
Cache validity bit flag
s
*/
#define NFS_INO_STALE 0x0001
/* possible stale inode */
#define NFS_INO_ADVISE_RDPLUS 0x0002
/* advise readdirplus */
#define NFS_INO_REVALIDATING 0x0004
/* revalidating attrs */
#define NFS_INO_INVALID_ATTR 0x0008
/* cached attrs are invalid */
#define NFS_INO_INVALID_DATA 0x0010
/* cached data is invalid */
#define NFS_INO_INVALID_ATIME 0x0020
/* cached atime is invalid */
#define NFS_INO_INVALID_ACCESS 0x0040
/* cached access cred invalid */
#define NFS_INO_INVALID_ACL 0x0080
/* cached acls are invalid */
#define NFS_INO_REVAL_PAGECACHE 0x1000
/* must revalidate pagecache */
#define NFS_INO_INVALID_ATTR 0x0001
/* cached attrs are invalid */
#define NFS_INO_INVALID_DATA 0x0002
/* cached data is invalid */
#define NFS_INO_INVALID_ATIME 0x0004
/* cached atime is invalid */
#define NFS_INO_INVALID_ACCESS 0x0008
/* cached access cred invalid */
#define NFS_INO_INVALID_ACL 0x0010
/* cached acls are invalid */
#define NFS_INO_REVAL_PAGECACHE 0x0020
/* must revalidate pagecache */
/*
* Bit offsets in flags field
*/
#define NFS_INO_REVALIDATING (0)
/* revalidating attrs */
#define NFS_INO_ADVISE_RDPLUS (1)
/* advise readdirplus */
#define NFS_INO_STALE (2)
/* possible stale inode */
static
inline
struct
nfs_inode
*
NFS_I
(
struct
inode
*
inode
)
{
...
...
@@ -224,8 +227,7 @@ static inline struct nfs_inode *NFS_I(struct inode *inode)
#define NFS_ATTRTIMEO_UPDATE(inode) (NFS_I(inode)->attrtimeo_timestamp)
#define NFS_FLAGS(inode) (NFS_I(inode)->flags)
#define NFS_REVALIDATING(inode) (NFS_FLAGS(inode) & NFS_INO_REVALIDATING)
#define NFS_STALE(inode) (NFS_FLAGS(inode) & NFS_INO_STALE)
#define NFS_STALE(inode) (test_bit(NFS_INO_STALE, &NFS_FLAGS(inode)))
#define NFS_FILEID(inode) (NFS_I(inode)->fileid)
...
...
@@ -236,8 +238,11 @@ static inline int nfs_caches_unstable(struct inode *inode)
static
inline
void
NFS_CACHEINV
(
struct
inode
*
inode
)
{
if
(
!
nfs_caches_unstable
(
inode
))
NFS_FLAGS
(
inode
)
|=
NFS_INO_INVALID_ATTR
|
NFS_INO_INVALID_ACCESS
;
if
(
!
nfs_caches_unstable
(
inode
))
{
spin_lock
(
&
inode
->
i_lock
);
NFS_I
(
inode
)
->
cache_validity
|=
NFS_INO_INVALID_ATTR
|
NFS_INO_INVALID_ACCESS
;
spin_unlock
(
&
inode
->
i_lock
);
}
}
static
inline
int
nfs_server_capable
(
struct
inode
*
inode
,
int
cap
)
...
...
@@ -247,7 +252,7 @@ static inline int nfs_server_capable(struct inode *inode, int cap)
static
inline
int
NFS_USE_READDIRPLUS
(
struct
inode
*
inode
)
{
return
NFS_FLAGS
(
inode
)
&
NFS_INO_ADVISE_RDPLUS
;
return
test_bit
(
NFS_INO_ADVISE_RDPLUS
,
&
NFS_FLAGS
(
inode
))
;
}
/**
...
...
This diff is collapsed.
Click to expand it.
include/linux/pci_ids.h
View file @
729c80c6
...
...
@@ -881,7 +881,7 @@
#define PCI_DEVICE_ID_APPLE_UNI_N_PCI15 0x002e
#define PCI_DEVICE_ID_APPLE_UNI_N_FW2 0x0030
#define PCI_DEVICE_ID_APPLE_UNI_N_GMAC2 0x0032
#define PCI_DEVI
EC
_ID_APPLE_UNI_N_ATA 0x0033
#define PCI_DEVI
CE
_ID_APPLE_UNI_N_ATA 0x0033
#define PCI_DEVICE_ID_APPLE_UNI_N_AGP2 0x0034
#define PCI_DEVICE_ID_APPLE_IPID_ATA100 0x003b
#define PCI_DEVICE_ID_APPLE_KEYLARGO_I 0x003e
...
...
@@ -1580,6 +1580,7 @@
#define PCI_DEVICE_ID_SERVERWORKS_OSB4IDE 0x0211
#define PCI_DEVICE_ID_SERVERWORKS_CSB5IDE 0x0212
#define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE 0x0213
#define PCI_DEVICE_ID_SERVERWORKS_HT1000IDE 0x0214
#define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2 0x0217
#define PCI_DEVICE_ID_SERVERWORKS_OSB4USB 0x0220
#define PCI_DEVICE_ID_SERVERWORKS_CSB5USB PCI_DEVICE_ID_SERVERWORKS_OSB4USB
...
...
@@ -2184,6 +2185,9 @@
#define PCI_VENDOR_ID_SIBYTE 0x166d
#define PCI_DEVICE_ID_BCM1250_HT 0x0002
#define PCI_VENDOR_ID_NETCELL 0x169c
#define PCI_DEVICE_ID_REVOLUTION 0x0044
#define PCI_VENDOR_ID_LINKSYS 0x1737
#define PCI_DEVICE_ID_LINKSYS_EG1032 0x1032
#define PCI_DEVICE_ID_LINKSYS_EG1064 0x1064
...
...
This diff is collapsed.
Click to expand it.
kernel/sched.c
View file @
729c80c6
...
...
@@ -3378,8 +3378,8 @@ EXPORT_SYMBOL(set_user_nice);
*/
int
can_nice
(
const
task_t
*
p
,
const
int
nice
)
{
/* convert nice value [19,-20] to rlimit style value [
0,39
] */
int
nice_rlim
=
19
-
nice
;
/* convert nice value [19,-20] to rlimit style value [
1,40
] */
int
nice_rlim
=
20
-
nice
;
return
(
nice_rlim
<=
p
->
signal
->
rlim
[
RLIMIT_NICE
].
rlim_cur
||
capable
(
CAP_SYS_NICE
));
}
...
...
This diff is collapsed.
Click to expand it.
mm/shmem.c
View file @
729c80c6
...
...
@@ -1773,32 +1773,27 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s
return
0
;
}
static
int
shmem_follow_link_inline
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
shmem_follow_link_inline
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
nd_set_link
(
nd
,
(
char
*
)
SHMEM_I
(
dentry
->
d_inode
));
return
0
;
return
NULL
;
}
static
int
shmem_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
*
shmem_follow_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
{
struct
page
*
page
=
NULL
;
int
res
=
shmem_getpage
(
dentry
->
d_inode
,
0
,
&
page
,
SGP_READ
,
NULL
);
nd_set_link
(
nd
,
res
?
ERR_PTR
(
res
)
:
kmap
(
page
));
return
0
;
return
page
;
}
static
void
shmem_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
)
static
void
shmem_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*
nd
,
void
*
cookie
)
{
if
(
!
IS_ERR
(
nd_get_link
(
nd
)))
{
struct
page
*
page
;
page
=
find_get_page
(
dentry
->
d_inode
->
i_mapping
,
0
);
if
(
!
page
)
BUG
();
struct
page
*
page
=
cookie
;
kunmap
(
page
);
mark_page_accessed
(
page
);
page_cache_release
(
page
);
page_cache_release
(
page
);
}
}
...
...
This diff is collapsed.
Click to expand it.
net/802/tr.c
View file @
729c80c6
...
...
@@ -251,10 +251,11 @@ void tr_source_route(struct sk_buff *skb,struct trh_hdr *trh,struct net_device *
unsigned
int
hash
;
struct
rif_cache
*
entry
;
unsigned
char
*
olddata
;
unsigned
long
flags
;
static
const
unsigned
char
mcast_func_addr
[]
=
{
0xC0
,
0x00
,
0x00
,
0x04
,
0x00
,
0x00
};
spin_lock_
bh
(
&
rif_lock
);
spin_lock_
irqsave
(
&
rif_lock
,
flags
);
/*
* Broadcasts are single route as stated in RFC 1042
...
...
@@ -323,7 +324,7 @@ printk("source routing for %02X:%02X:%02X:%02X:%02X:%02X\n",trh->daddr[0],
else
slack
=
18
-
((
ntohs
(
trh
->
rcf
)
&
TR_RCF_LEN_MASK
)
>>
8
);
olddata
=
skb
->
data
;
spin_unlock_
bh
(
&
rif_lock
);
spin_unlock_
irqrestore
(
&
rif_lock
,
flags
);
skb_pull
(
skb
,
slack
);
memmove
(
skb
->
data
,
olddata
,
sizeof
(
struct
trh_hdr
)
-
slack
);
...
...
@@ -337,10 +338,11 @@ printk("source routing for %02X:%02X:%02X:%02X:%02X:%02X\n",trh->daddr[0],
static
void
tr_add_rif_info
(
struct
trh_hdr
*
trh
,
struct
net_device
*
dev
)
{
unsigned
int
hash
,
rii_p
=
0
;
unsigned
long
flags
;
struct
rif_cache
*
entry
;
spin_lock_
bh
(
&
rif_lock
);
spin_lock_
irqsave
(
&
rif_lock
,
flags
);
/*
* Firstly see if the entry exists
...
...
@@ -378,7 +380,7 @@ printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
if
(
!
entry
)
{
printk
(
KERN_DEBUG
"tr.c: Couldn't malloc rif cache entry !
\n
"
);
spin_unlock_
bh
(
&
rif_lock
);
spin_unlock_
irqrestore
(
&
rif_lock
,
flags
);
return
;
}
...
...
@@ -420,7 +422,7 @@ printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
}
entry
->
last_used
=
jiffies
;
}
spin_unlock_
bh
(
&
rif_lock
);
spin_unlock_
irqrestore
(
&
rif_lock
,
flags
);
}
/*
...
...
@@ -430,9 +432,9 @@ printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
static
void
rif_check_expire
(
unsigned
long
dummy
)
{
int
i
;
unsigned
long
next_interval
=
jiffies
+
sysctl_tr_rif_timeout
/
2
;
unsigned
long
flags
,
next_interval
=
jiffies
+
sysctl_tr_rif_timeout
/
2
;
spin_lock_
bh
(
&
rif_lock
);
spin_lock_
irqsave
(
&
rif_lock
,
flags
);
for
(
i
=
0
;
i
<
RIF_TABLE_SIZE
;
i
++
)
{
struct
rif_cache
*
entry
,
**
pentry
;
...
...
@@ -454,7 +456,7 @@ static void rif_check_expire(unsigned long dummy)
}
}
spin_unlock_
bh
(
&
rif_lock
);
spin_unlock_
irqrestore
(
&
rif_lock
,
flags
);
mod_timer
(
&
rif_timer
,
next_interval
);
...
...
@@ -485,7 +487,7 @@ static struct rif_cache *rif_get_idx(loff_t pos)
static
void
*
rif_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
{
spin_lock_
bh
(
&
rif_lock
);
spin_lock_
irq
(
&
rif_lock
);
return
*
pos
?
rif_get_idx
(
*
pos
-
1
)
:
SEQ_START_TOKEN
;
}
...
...
@@ -516,7 +518,7 @@ static void *rif_seq_next(struct seq_file *seq, void *v, loff_t *pos)
static
void
rif_seq_stop
(
struct
seq_file
*
seq
,
void
*
v
)
{
spin_unlock_
bh
(
&
rif_lock
);
spin_unlock_
irq
(
&
rif_lock
);
}
static
int
rif_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
...
...
This diff is collapsed.
Click to expand it.
net/ipv4/icmp.c
View file @
729c80c6
...
...
@@ -349,12 +349,12 @@ static void icmp_push_reply(struct icmp_bxm *icmp_param,
{
struct
sk_buff
*
skb
;
ip_append_data
(
icmp_socket
->
sk
,
icmp_glue_bits
,
icmp_param
,
icmp_param
->
data_len
+
icmp_param
->
head_len
,
icmp_param
->
head_len
,
ipc
,
rt
,
MSG_DONTWAIT
);
if
((
skb
=
skb_peek
(
&
icmp_socket
->
sk
->
sk_write_queue
))
!=
NULL
)
{
i
f
(
i
p_append_data
(
icmp_socket
->
sk
,
icmp_glue_bits
,
icmp_param
,
icmp_param
->
data_len
+
icmp_param
->
head_len
,
icmp_param
->
head_len
,
ipc
,
rt
,
MSG_DONTWAIT
)
<
0
)
ip_flush_pending_frames
(
icmp_socket
->
sk
);
else
if
((
skb
=
skb_peek
(
&
icmp_socket
->
sk
->
sk_write_queue
))
!=
NULL
)
{
struct
icmphdr
*
icmph
=
skb
->
h
.
icmph
;
unsigned
int
csum
=
0
;
struct
sk_buff
*
skb1
;
...
...
This diff is collapsed.
Click to expand it.
net/ipv4/ipcomp.c
View file @
729c80c6
...
...
@@ -358,7 +358,7 @@ static struct crypto_tfm **ipcomp_alloc_tfms(const char *alg_name)
int
cpu
;
/* This can be any valid CPU ID so we don't need locking. */
cpu
=
smp_processor_id
();
cpu
=
raw_
smp_processor_id
();
list_for_each_entry
(
pos
,
&
ipcomp_tfms_list
,
list
)
{
struct
crypto_tfm
*
tfm
;
...
...
This diff is collapsed.
Click to expand it.
net/ipv4/netfilter/ipt_ECN.c
View file @
729c80c6
...
...
@@ -61,16 +61,20 @@ set_ect_tcp(struct sk_buff **pskb, const struct ipt_ECN_info *einfo, int inward)
if
(
!
tcph
)
return
0
;
if
(
!
(
einfo
->
operation
&
IPT_ECN_OP_SET_ECE
||
tcph
->
ece
==
einfo
->
proto
.
tcp
.
ece
)
&&
(
!
(
einfo
->
operation
&
IPT_ECN_OP_SET_CWR
||
tcph
->
cwr
==
einfo
->
proto
.
tcp
.
cwr
)))
if
(
(
!
(
einfo
->
operation
&
IPT_ECN_OP_SET_ECE
)
||
tcph
->
ece
==
einfo
->
proto
.
tcp
.
ece
)
&&
((
!
(
einfo
->
operation
&
IPT_ECN_OP_SET_CWR
)
||
tcph
->
cwr
==
einfo
->
proto
.
tcp
.
cwr
)))
return
1
;
if
(
!
skb_ip_make_writable
(
pskb
,
(
*
pskb
)
->
nh
.
iph
->
ihl
*
4
+
sizeof
(
*
tcph
)))
return
0
;
tcph
=
(
void
*
)(
*
pskb
)
->
nh
.
iph
+
(
*
pskb
)
->
nh
.
iph
->
ihl
*
4
;
if
((
*
pskb
)
->
ip_summed
==
CHECKSUM_HW
&&
skb_checksum_help
(
*
pskb
,
inward
))
return
0
;
diffs
[
0
]
=
((
u_int16_t
*
)
tcph
)[
6
];
if
(
einfo
->
operation
&
IPT_ECN_OP_SET_ECE
)
tcph
->
ece
=
einfo
->
proto
.
tcp
.
ece
;
...
...
@@ -79,13 +83,10 @@ set_ect_tcp(struct sk_buff **pskb, const struct ipt_ECN_info *einfo, int inward)
diffs
[
1
]
=
((
u_int16_t
*
)
tcph
)[
6
];
diffs
[
0
]
=
diffs
[
0
]
^
0xFFFF
;
if
((
*
pskb
)
->
ip_summed
!=
CHECKSUM_
HW
)
if
((
*
pskb
)
->
ip_summed
!=
CHECKSUM_
UNNECESSARY
)
tcph
->
check
=
csum_fold
(
csum_partial
((
char
*
)
diffs
,
sizeof
(
diffs
),
tcph
->
check
^
0xFFFF
));
else
if
(
skb_checksum_help
(
*
pskb
,
inward
))
return
0
;
(
*
pskb
)
->
nfcache
|=
NFC_ALTERED
;
return
1
;
}
...
...
This diff is collapsed.
Click to expand it.
net/ipv4/netfilter/ipt_TCPMSS.c
View file @
729c80c6
...
...
@@ -61,6 +61,10 @@ ipt_tcpmss_target(struct sk_buff **pskb,
if
(
!
skb_ip_make_writable
(
pskb
,
(
*
pskb
)
->
len
))
return
NF_DROP
;
if
((
*
pskb
)
->
ip_summed
==
CHECKSUM_HW
&&
skb_checksum_help
(
*
pskb
,
out
==
NULL
))
return
NF_DROP
;
iph
=
(
*
pskb
)
->
nh
.
iph
;
tcplen
=
(
*
pskb
)
->
len
-
iph
->
ihl
*
4
;
...
...
@@ -186,9 +190,6 @@ ipt_tcpmss_target(struct sk_buff **pskb,
newmss
);
retmodified:
/* We never hw checksum SYN packets. */
BUG_ON
((
*
pskb
)
->
ip_summed
==
CHECKSUM_HW
);
(
*
pskb
)
->
nfcache
|=
NFC_UNKNOWN
|
NFC_ALTERED
;
return
IPT_CONTINUE
;
}
...
...
This diff is collapsed.
Click to expand it.
net/ipv6/ipcomp6.c
View file @
729c80c6
...
...
@@ -354,7 +354,7 @@ static struct crypto_tfm **ipcomp6_alloc_tfms(const char *alg_name)
int
cpu
;
/* This can be any valid CPU ID so we don't need locking. */
cpu
=
smp_processor_id
();
cpu
=
raw_
smp_processor_id
();
list_for_each_entry
(
pos
,
&
ipcomp6_tfms_list
,
list
)
{
struct
crypto_tfm
*
tfm
;
...
...
This diff is collapsed.
Click to expand it.
scripts/mod/modpost.c
View file @
729c80c6
...
...
@@ -359,11 +359,16 @@ handle_modversions(struct module *mod, struct elf_info *info,
/* ignore __this_module, it will be resolved shortly */
if
(
strcmp
(
symname
,
MODULE_SYMBOL_PREFIX
"__this_module"
)
==
0
)
break
;
#ifdef STT_REGISTER
/* cope with newer glibc (2.3.4 or higher) STT_ definition in elf.h */
#if defined(STT_REGISTER) || defined(STT_SPARC_REGISTER)
/* add compatibility with older glibc */
#ifndef STT_SPARC_REGISTER
#define STT_SPARC_REGISTER STT_REGISTER
#endif
if
(
info
->
hdr
->
e_machine
==
EM_SPARC
||
info
->
hdr
->
e_machine
==
EM_SPARCV9
)
{
/* Ignore register directives. */
if
(
ELF_ST_TYPE
(
sym
->
st_info
)
==
STT_REGISTER
)
if
(
ELF_ST_TYPE
(
sym
->
st_info
)
==
STT_
SPARC_
REGISTER
)
break
;
}
#endif
...
...
This diff is collapsed.
Click to expand it.
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