Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
37b5d10a
Commit
37b5d10a
authored
Jan 22, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.phunnypharm.org/linux-2.6
into home.osdl.org:/home/torvalds/v2.5/linux
parents
7a272c66
d1ca66cc
Changes
26
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
190 additions
and
134 deletions
+190
-134
Makefile
Makefile
+1
-1
arch/i386/Kconfig
arch/i386/Kconfig
+1
-6
arch/i386/defconfig
arch/i386/defconfig
+0
-1
arch/i386/kernel/apm.c
arch/i386/kernel/apm.c
+2
-0
arch/i386/kernel/cpu/mtrr/if.c
arch/i386/kernel/cpu/mtrr/if.c
+8
-0
arch/i386/kernel/dmi_scan.c
arch/i386/kernel/dmi_scan.c
+69
-7
arch/i386/pci/direct.c
arch/i386/pci/direct.c
+1
-1
arch/ppc/kernel/signal.c
arch/ppc/kernel/signal.c
+20
-8
drivers/atm/he.c
drivers/atm/he.c
+1
-6
drivers/md/md.c
drivers/md/md.c
+2
-1
drivers/md/raid6algos.c
drivers/md/raid6algos.c
+1
-0
drivers/md/raid6int.uc
drivers/md/raid6int.uc
+1
-1
drivers/media/dvb/ttusb-dec/ttusb_dec.c
drivers/media/dvb/ttusb-dec/ttusb_dec.c
+7
-1
drivers/media/video/w9966.c
drivers/media/video/w9966.c
+16
-7
drivers/scsi/megaraid.c
drivers/scsi/megaraid.c
+1
-1
drivers/video/aty/aty128fb.c
drivers/video/aty/aty128fb.c
+1
-1
drivers/video/radeonfb.c
drivers/video/radeonfb.c
+1
-1
fs/xfs/linux/xfs_aops.c
fs/xfs/linux/xfs_aops.c
+17
-4
fs/xfs/xfs_iomap.h
fs/xfs/xfs_iomap.h
+13
-14
fs/xfs/xfs_itable.c
fs/xfs/xfs_itable.c
+3
-3
fs/xfs/xfs_log_recover.c
fs/xfs/xfs_log_recover.c
+1
-1
include/linux/apm_bios.h
include/linux/apm_bios.h
+1
-0
include/linux/blkdev.h
include/linux/blkdev.h
+1
-1
init/main.c
init/main.c
+3
-2
net/core/flow.c
net/core/flow.c
+15
-66
net/ipv6/addrconf.c
net/ipv6/addrconf.c
+3
-0
No files found.
Makefile
View file @
37b5d10a
...
...
@@ -690,7 +690,7 @@ modules_install: _modinst_ _modinst_post
_modinst_
:
@
if
[
-z
"
`
$(DEPMOD)
-V
|
grep
module-init-tools
`
"
]
;
then
\
echo
"Warning: you may need to install module-init-tools"
;
\
echo
"See http://www.codemonkey.org.uk/
post-halloween-2.5
.txt"
;
\
echo
"See http://www.codemonkey.org.uk/
docs/post-halloween-2.6
.txt"
;
\
sleep
1
;
\
fi
@
rm
-rf
$(MODLIB)
/kernel
...
...
arch/i386/Kconfig
View file @
37b5d10a
...
...
@@ -399,7 +399,7 @@ config X86_USE_3DNOW
config X86_OOSTORE
bool
depends on
MWINCHIP3D || MWINCHIP2 || MWINCHIPC6
depends on
(MWINCHIP3D || MWINCHIP2 || MWINCHIPC6) && MTRR
default y
config HPET_TIMER
...
...
@@ -1261,11 +1261,6 @@ config FRAME_POINTER
If you don't debug the kernel, you can say N, but we may not be able
to solve problems without frame pointers.
config X86_EXTRA_IRQS
bool
depends on X86_LOCAL_APIC || X86_VOYAGER
default y
config X86_FIND_SMP_CONFIG
bool
depends on X86_LOCAL_APIC || X86_VOYAGER
...
...
arch/i386/defconfig
View file @
37b5d10a
...
...
@@ -1101,7 +1101,6 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_DEBUG_KERNEL is not set
CONFIG_DEBUG_SPINLOCK_SLEEP=y
CONFIG_FRAME_POINTER=y
CONFIG_X86_EXTRA_IRQS=y
CONFIG_X86_FIND_SMP_CONFIG=y
CONFIG_X86_MPPARSE=y
...
...
arch/i386/kernel/apm.c
View file @
37b5d10a
...
...
@@ -844,6 +844,8 @@ static void apm_cpu_idle(void)
idle_percentage
*=
100
;
idle_percentage
/=
jiffies_since_last_check
;
use_apm_idle
=
(
idle_percentage
>
idle_threshold
);
if
(
apm_info
.
forbid_idle
)
use_apm_idle
=
0
;
last_jiffies
=
jiffies
;
last_stime
=
current
->
stime
;
}
...
...
arch/i386/kernel/cpu/mtrr/if.c
View file @
37b5d10a
...
...
@@ -352,6 +352,14 @@ static int mtrr_seq_show(struct seq_file *seq, void *offset)
static
int
__init
mtrr_if_init
(
void
)
{
struct
cpuinfo_x86
*
c
=
&
boot_cpu_data
;
if
((
!
cpu_has
(
c
,
X86_FEATURE_MTRR
))
&&
(
!
cpu_has
(
c
,
X86_FEATURE_K6_MTRR
))
&&
(
!
cpu_has
(
c
,
X86_FEATURE_CYRIX_ARR
))
&&
(
!
cpu_has
(
c
,
X86_FEATURE_CENTAUR_MCR
)))
return
-
ENODEV
;
proc_root_mtrr
=
create_proc_entry
(
"mtrr"
,
S_IWUSR
|
S_IRUGO
,
&
proc_root
);
if
(
proc_root_mtrr
)
{
...
...
arch/i386/kernel/dmi_scan.c
View file @
37b5d10a
...
...
@@ -283,6 +283,30 @@ static __init int apm_is_horked(struct dmi_blacklist *d)
return
0
;
}
static
__init
int
apm_is_horked_d850md
(
struct
dmi_blacklist
*
d
)
{
if
(
apm_info
.
disabled
==
0
)
{
apm_info
.
disabled
=
1
;
printk
(
KERN_INFO
"%s machine detected. Disabling APM.
\n
"
,
d
->
ident
);
printk
(
KERN_INFO
"This bug is fixed in bios P15 which is available for
\n
"
);
printk
(
KERN_INFO
"download from support.intel.com
\n
"
);
}
return
0
;
}
/*
* Some APM bioses hang on APM idle calls
*/
static
__init
int
apm_likes_to_melt
(
struct
dmi_blacklist
*
d
)
{
if
(
apm_info
.
forbid_idle
==
0
)
{
apm_info
.
forbid_idle
=
1
;
printk
(
KERN_INFO
"%s machine detected. Disabling APM idle calls.
\n
"
,
d
->
ident
);
}
return
0
;
}
/*
* Some machines, usually laptops, can't handle an enabled local APIC.
* The symptoms include hangs or reboots when suspending or resuming,
...
...
@@ -558,6 +582,22 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH
(
DMI_PRODUCT_NAME
,
"Latitude C600"
),
NO_MATCH
,
NO_MATCH
}
},
{
set_apm_ints
,
"Dell Latitude"
,
{
/* Allow interrupts during suspend on Dell Latitude laptops*/
MATCH
(
DMI_SYS_VENDOR
,
"Dell Computer Corporation"
),
MATCH
(
DMI_PRODUCT_NAME
,
"Latitude C510"
),
NO_MATCH
,
NO_MATCH
}
},
{
apm_is_horked
,
"Dell Inspiron 2500"
,
{
/* APM crashes */
MATCH
(
DMI_SYS_VENDOR
,
"Dell Computer Corporation"
),
MATCH
(
DMI_PRODUCT_NAME
,
"Inspiron 2500"
),
MATCH
(
DMI_BIOS_VENDOR
,
"Phoenix Technologies LTD"
),
MATCH
(
DMI_BIOS_VERSION
,
"A11"
)
}
},
{
set_apm_ints
,
"Dell Inspiron"
,
{
/* Allow interrupts during suspend on Dell Inspiron laptops*/
MATCH
(
DMI_SYS_VENDOR
,
"Dell Computer Corporation"
),
MATCH
(
DMI_PRODUCT_NAME
,
"Inspiron 4000"
),
NO_MATCH
,
NO_MATCH
}
},
{
broken_apm_power
,
"Dell Inspiron 5000e"
,
{
/* Handle problems with APM on Inspiron 5000e */
MATCH
(
DMI_BIOS_VENDOR
,
"Phoenix Technologies LTD"
),
MATCH
(
DMI_BIOS_VERSION
,
"A04"
),
...
...
@@ -568,6 +608,12 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH
(
DMI_BIOS_VERSION
,
"A12"
),
MATCH
(
DMI_BIOS_DATE
,
"02/04/2002"
),
NO_MATCH
}
},
{
apm_is_horked
,
"Dell Dimension 4100"
,
{
/* APM crashes */
MATCH
(
DMI_SYS_VENDOR
,
"Dell Computer Corporation"
),
MATCH
(
DMI_PRODUCT_NAME
,
"XPS-Z"
),
MATCH
(
DMI_BIOS_VENDOR
,
"Intel Corp."
),
MATCH
(
DMI_BIOS_VERSION
,
"A11"
)
}
},
{
set_realmode_power_off
,
"Award Software v4.60 PGMA"
,
{
/* broken PM poweroff bios */
MATCH
(
DMI_BIOS_VENDOR
,
"Award Software International, Inc."
),
MATCH
(
DMI_BIOS_VERSION
,
"4.60 PGMA"
),
...
...
@@ -578,21 +624,16 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH
(
DMI_PRODUCT_NAME
,
"PowerEdge 1300/"
),
NO_MATCH
,
NO_MATCH
}
},
{
set_bios_reboot
,
"Dell PowerEdge 300"
,
{
/* Handle problems with rebooting on Dell
1
300's */
{
set_bios_reboot
,
"Dell PowerEdge 300"
,
{
/* Handle problems with rebooting on Dell 300's */
MATCH
(
DMI_SYS_VENDOR
,
"Dell Computer Corporation"
),
MATCH
(
DMI_PRODUCT_NAME
,
"PowerEdge 300/"
),
NO_MATCH
,
NO_MATCH
}
},
{
set_bios_reboot
,
"Dell PowerEdge 2400"
,
{
/* Handle problems with rebooting on Dell
300/8
00's */
{
set_bios_reboot
,
"Dell PowerEdge 2400"
,
{
/* Handle problems with rebooting on Dell
24
00's */
MATCH
(
DMI_SYS_VENDOR
,
"Dell Computer Corporation"
),
MATCH
(
DMI_PRODUCT_NAME
,
"PowerEdge 2400"
),
NO_MATCH
,
NO_MATCH
}
},
{
set_apm_ints
,
"Dell Inspiron"
,
{
/* Allow interrupts during suspend on Dell Inspiron laptops*/
MATCH
(
DMI_SYS_VENDOR
,
"Dell Computer Corporation"
),
MATCH
(
DMI_PRODUCT_NAME
,
"Inspiron 4000"
),
NO_MATCH
,
NO_MATCH
}
},
{
set_apm_ints
,
"Compaq 12XL125"
,
{
/* Allow interrupts during suspend on Compaq Laptops*/
MATCH
(
DMI_SYS_VENDOR
,
"Compaq"
),
MATCH
(
DMI_PRODUCT_NAME
,
"Compaq PC"
),
...
...
@@ -647,6 +688,16 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH
(
DMI_BIOS_VENDOR
,
"Phoenix Technologies LTD"
),
MATCH
(
DMI_BIOS_VERSION
,
"A11"
)
}
},
{
apm_likes_to_melt
,
"Jabil AMD"
,
{
/* APM idle hangs */
MATCH
(
DMI_BIOS_VENDOR
,
"American Megatrends Inc."
),
MATCH
(
DMI_BIOS_VERSION
,
"0AASNP06"
),
NO_MATCH
,
NO_MATCH
,
}
},
{
apm_likes_to_melt
,
"AMI Bios"
,
{
/* APM idle hangs */
MATCH
(
DMI_BIOS_VENDOR
,
"American Megatrends Inc."
),
MATCH
(
DMI_BIOS_VERSION
,
"0AASNP05"
),
NO_MATCH
,
NO_MATCH
,
}
},
{
sony_vaio_laptop
,
"Sony Vaio"
,
{
/* This is a Sony Vaio laptop */
MATCH
(
DMI_SYS_VENDOR
,
"Sony Corporation"
),
MATCH
(
DMI_PRODUCT_NAME
,
"PCG-"
),
...
...
@@ -775,6 +826,11 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH
(
DMI_BIOS_VERSION
,
"L440GX0.86B.0094.P10"
),
NO_MATCH
,
NO_MATCH
}
},
{
broken_pirq
,
"l44GX Bios"
,
{
/* Bad $PIR */
MATCH
(
DMI_BIOS_VENDOR
,
"Intel Corporation"
),
MATCH
(
DMI_BIOS_VERSION
,
"L440GX0.86B.0115.P12"
),
NO_MATCH
,
NO_MATCH
}
},
{
broken_pirq
,
"l44GX Bios"
,
{
/* Bad $PIR */
MATCH
(
DMI_BIOS_VENDOR
,
"Intel Corporation"
),
MATCH
(
DMI_BIOS_VERSION
,
"L440GX0.86B.0120.P12"
),
...
...
@@ -790,6 +846,12 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH
(
DMI_BIOS_VERSION
,
"L440GX0.86B.0066.P07.9906041405"
),
NO_MATCH
,
NO_MATCH
}
},
{
broken_pirq
,
"IBM xseries 370"
,
{
/* Bad $PIR */
MATCH
(
DMI_BIOS_VENDOR
,
"IBM"
),
MATCH
(
DMI_BIOS_VERSION
,
"MMKT33AUS"
),
NO_MATCH
,
NO_MATCH
}
},
/* Intel in disguise - In this case they can't hide and they don't run
too well either... */
...
...
arch/i386/pci/direct.c
View file @
37b5d10a
...
...
@@ -259,7 +259,7 @@ static int __init pci_direct_init(void)
release_resource
(
region
);
type2:
if
((
!
pci_probe
&
PCI_PROBE_CONF2
)
==
0
)
if
((
pci_probe
&
PCI_PROBE_CONF2
)
==
0
)
goto
out
;
region
=
request_region
(
0xCF8
,
4
,
"PCI conf2"
);
if
(
!
region
)
...
...
arch/ppc/kernel/signal.c
View file @
37b5d10a
...
...
@@ -241,12 +241,16 @@ save_user_regs(struct pt_regs *regs, struct mcontext *frame, int sigret)
* (except for MSR).
*/
static
int
restore_user_regs
(
struct
pt_regs
*
regs
,
struct
mcontext
__user
*
sr
)
restore_user_regs
(
struct
pt_regs
*
regs
,
struct
mcontext
__user
*
sr
,
int
sig
)
{
unsigned
long
save_r2
;
#ifdef CONFIG_ALTIVEC
unsigned
long
msr
;
#endif
/* backup/restore the TLS as we don't want it to be modified */
if
(
!
sig
)
save_r2
=
regs
->
gpr
[
2
];
/* copy up to but not including MSR */
if
(
__copy_from_user
(
regs
,
&
sr
->
mc_gregs
,
PT_MSR
*
sizeof
(
elf_greg_t
)))
return
1
;
...
...
@@ -254,6 +258,8 @@ restore_user_regs(struct pt_regs *regs, struct mcontext __user *sr)
if
(
__copy_from_user
(
&
regs
->
orig_gpr3
,
&
sr
->
mc_gregs
[
PT_ORIG_R3
],
GP_REGS_SIZE
-
PT_ORIG_R3
*
sizeof
(
elf_greg_t
)))
return
1
;
if
(
!
sig
)
regs
->
gpr
[
2
]
=
save_r2
;
/* force the process to reload the FP registers from
current->thread when it next does FP instructions */
...
...
@@ -359,7 +365,7 @@ handle_rt_signal(unsigned long sig, struct k_sigaction *ka,
force_sig
(
SIGSEGV
,
current
);
}
static
int
do_setcontext
(
struct
ucontext
__user
*
ucp
,
struct
pt_regs
*
regs
)
static
int
do_setcontext
(
struct
ucontext
__user
*
ucp
,
struct
pt_regs
*
regs
,
int
sig
)
{
sigset_t
set
;
struct
mcontext
*
mcp
;
...
...
@@ -368,7 +374,7 @@ static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs)
||
__get_user
(
mcp
,
&
ucp
->
uc_regs
))
return
-
EFAULT
;
restore_sigmask
(
&
set
);
if
(
restore_user_regs
(
regs
,
mcp
))
if
(
restore_user_regs
(
regs
,
mcp
,
sig
))
return
-
EFAULT
;
return
0
;
...
...
@@ -376,10 +382,16 @@ static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs)
int
sys_swapcontext
(
struct
ucontext
__user
*
old_ctx
,
struct
ucontext
__user
*
new_ctx
,
int
r5
,
int
r6
,
int
r7
,
int
r8
,
struct
pt_regs
*
regs
)
int
ctx_size
,
int
r6
,
int
r7
,
int
r8
,
struct
pt_regs
*
regs
)
{
unsigned
char
tmp
;
/* Context size is for future use. Right now, we only make sure
* we are passed something we understand
*/
if
(
ctx_size
<
sizeof
(
struct
ucontext
))
return
-
EINVAL
;
if
(
old_ctx
!=
NULL
)
{
if
(
verify_area
(
VERIFY_WRITE
,
old_ctx
,
sizeof
(
*
old_ctx
))
||
save_user_regs
(
regs
,
&
old_ctx
->
uc_mcontext
,
0
)
...
...
@@ -406,7 +418,7 @@ int sys_swapcontext(struct ucontext __user *old_ctx,
* or if another thread unmaps the region containing the context.
* We kill the task with a SIGSEGV in this situation.
*/
if
(
do_setcontext
(
new_ctx
,
regs
))
if
(
do_setcontext
(
new_ctx
,
regs
,
0
))
do_exit
(
SIGSEGV
);
sigreturn_exit
(
regs
);
/* doesn't actually return back to here */
...
...
@@ -425,7 +437,7 @@ int sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
(
regs
->
gpr
[
1
]
+
__SIGNAL_FRAMESIZE
+
16
);
if
(
verify_area
(
VERIFY_READ
,
rt_sf
,
sizeof
(
struct
rt_sigframe
)))
goto
bad
;
if
(
do_setcontext
(
&
rt_sf
->
uc
,
regs
))
if
(
do_setcontext
(
&
rt_sf
->
uc
,
regs
,
1
))
goto
bad
;
/*
...
...
@@ -484,7 +496,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
if
(
save_user_regs
(
regs
,
&
frame
->
mctx
,
__NR_sigreturn
))
goto
badframe
;
if
(
put_user
(
regs
->
gpr
[
1
],
(
unsigned
long
*
)
newsp
))
if
(
put_user
(
regs
->
gpr
[
1
],
(
unsigned
long
__user
*
)
newsp
))
goto
badframe
;
regs
->
gpr
[
1
]
=
newsp
;
regs
->
gpr
[
3
]
=
sig
;
...
...
@@ -529,7 +541,7 @@ int sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
sr
=
(
struct
mcontext
*
)
sigctx
.
regs
;
if
(
verify_area
(
VERIFY_READ
,
sr
,
sizeof
(
*
sr
))
||
restore_user_regs
(
regs
,
sr
))
||
restore_user_regs
(
regs
,
sr
,
1
))
goto
badframe
;
sigreturn_exit
(
regs
);
/* doesn't return */
...
...
drivers/atm/he.c
View file @
37b5d10a
...
...
@@ -109,10 +109,6 @@ typedef void irqreturn_t;
#define pci_get_drvdata(pci_dev) (pci_dev)->driver_data
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,44)
#define pci_pool_create(a, b, c, d, e) pci_pool_create(a, b, c, d, e, SLAB_KERNEL)
#endif
#include "he.h"
#include "suni.h"
...
...
@@ -1986,8 +1982,7 @@ he_service_tbrq(struct he_dev *he_dev, int group)
TBRQ_MULTIPLE
(
he_dev
->
tbrq_head
)
?
" MULTIPLE"
:
""
);
#ifdef USE_TPD_POOL
tpd
=
NULL
;
p
=
&
he_dev
->
outstanding_tpds
;
while
((
p
=
p
->
next
)
!=
&
he_dev
->
outstanding_tpds
)
{
list_for_each
(
p
,
&
he_dev
->
outstanding_tpds
)
{
struct
he_tpd
*
__tpd
=
list_entry
(
p
,
struct
he_tpd
,
entry
);
if
(
TPD_ADDR
(
__tpd
->
status
)
==
TBRQ_TPD
(
he_dev
->
tbrq_head
))
{
tpd
=
__tpd
;
...
...
drivers/md/md.c
View file @
37b5d10a
...
...
@@ -3106,7 +3106,8 @@ static inline void md_enter_safemode(mddev_t *mddev)
{
if
(
!
mddev
->
safemode
)
return
;
if
(
mddev
->
safemode
==
2
&&
(
atomic_read
(
&
mddev
->
writes_pending
)
||
mddev
->
in_sync
))
(
atomic_read
(
&
mddev
->
writes_pending
)
||
mddev
->
in_sync
||
mddev
->
recovery_cp
!=
MaxSector
))
return
;
/* avoid the lock */
mddev_lock_uninterruptible
(
mddev
);
if
(
mddev
->
safemode
&&
!
atomic_read
(
&
mddev
->
writes_pending
)
&&
...
...
drivers/md/raid6algos.c
View file @
37b5d10a
...
...
@@ -29,6 +29,7 @@ extern const struct raid6_calls raid6_intx2;
extern
const
struct
raid6_calls
raid6_intx4
;
extern
const
struct
raid6_calls
raid6_intx8
;
extern
const
struct
raid6_calls
raid6_intx16
;
extern
const
struct
raid6_calls
raid6_intx32
;
extern
const
struct
raid6_calls
raid6_mmxx1
;
extern
const
struct
raid6_calls
raid6_mmxx2
;
extern
const
struct
raid6_calls
raid6_sse1x1
;
...
...
drivers/md/raid6int.uc
View file @
37b5d10a
...
...
@@ -15,7 +15,7 @@
*
* $#-way unrolled portable integer math RAID-6 instruction set
*
* This file is postprocessed using unroll
er
.pl
* This file is postprocessed using unroll.pl
*/
#include "raid6.h"
...
...
drivers/media/dvb/ttusb-dec/ttusb_dec.c
View file @
37b5d10a
...
...
@@ -1146,7 +1146,7 @@ static int ttusb_dec_boot_dsp(struct ttusb_dec *dec)
0x00
,
0x00
,
0x00
,
0x00
,
0x61
,
0x00
};
u8
b1
[]
=
{
0x61
};
u8
b
[
ARM_PACKET_SIZE
]
;
u8
*
b
;
char
idstring
[
21
];
u8
*
firmware
=
NULL
;
size_t
firmware_size
=
0
;
...
...
@@ -1203,6 +1203,10 @@ static int ttusb_dec_boot_dsp(struct ttusb_dec *dec)
trans_count
=
0
;
j
=
0
;
b
=
kmalloc
(
ARM_PACKET_SIZE
,
GFP_KERNEL
);
if
(
b
==
NULL
)
return
-
ENOMEM
;
for
(
i
=
0
;
i
<
firmware_size
;
i
+=
COMMAND_PACKET_SIZE
)
{
size
=
firmware_size
-
i
;
if
(
size
>
COMMAND_PACKET_SIZE
)
...
...
@@ -1230,6 +1234,8 @@ static int ttusb_dec_boot_dsp(struct ttusb_dec *dec)
result
=
ttusb_dec_send_command
(
dec
,
0x43
,
sizeof
(
b1
),
b1
,
NULL
,
NULL
);
kfree
(
b
);
return
result
;
}
...
...
drivers/media/video/w9966.c
View file @
37b5d10a
...
...
@@ -875,6 +875,7 @@ static ssize_t w9966_v4l_read(struct file *file, char *buf,
unsigned
char
addr
=
0xa0
;
// ECP, read, CCD-transfer, 00000
unsigned
char
*
dest
=
(
unsigned
char
*
)
buf
;
unsigned
long
dleft
=
count
;
unsigned
char
*
tbuf
;
// Why would anyone want more than this??
if
(
count
>
cam
->
width
*
cam
->
height
*
2
)
...
...
@@ -894,25 +895,33 @@ static ssize_t w9966_v4l_read(struct file *file, char *buf,
w9966_pdev_release
(
cam
);
return
-
EFAULT
;
}
tbuf
=
kmalloc
(
W9966_RBUFFER
,
GFP_KERNEL
);
if
(
tbuf
==
NULL
)
{
count
=
-
ENOMEM
;
goto
out
;
}
while
(
dleft
>
0
)
{
unsigned
long
tsize
=
(
dleft
>
W9966_RBUFFER
)
?
W9966_RBUFFER
:
dleft
;
unsigned
char
tbuf
[
W9966_RBUFFER
];
if
(
parport_read
(
cam
->
pport
,
tbuf
,
tsize
)
<
tsize
)
{
w9966_pdev_release
(
cam
)
;
return
-
EFAULT
;
count
=
-
EFAULT
;
goto
out
;
}
if
(
copy_to_user
(
dest
,
tbuf
,
tsize
)
!=
0
)
{
w9966_pdev_release
(
cam
)
;
return
-
EFAULT
;
count
=
-
EFAULT
;
goto
out
;
}
dest
+=
tsize
;
dleft
-=
tsize
;
}
w9966_wReg
(
cam
,
0x01
,
0x18
);
// Disable capture
out:
kfree
(
tbuf
);
w9966_pdev_release
(
cam
);
return
count
;
...
...
drivers/scsi/megaraid.c
View file @
37b5d10a
...
...
@@ -5093,7 +5093,7 @@ static struct pci_device_id megaraid_pci_tbl[] = {
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
},
{
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_AMI_MEGARAID3
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
},
{
PCI_VENDOR_ID_LSI_LOGIC
,
PCI_DEVICE_ID_AMI_MEGARAID
,
{
PCI_VENDOR_ID_LSI_LOGIC
,
PCI_DEVICE_ID_AMI_MEGARAID
3
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
},
{
0
,}
};
...
...
drivers/video/aty/aty128fb.c
View file @
37b5d10a
...
...
@@ -2102,7 +2102,7 @@ aty128_set_backlight_enable(int on, int level, void *data)
reg
|=
LVDS_BL_MOD_EN
|
LVDS_BLON
;
if
(
on
&&
level
>
BACKLIGHT_OFF
)
{
reg
|=
LVDS_DIGION
;
if
(
!
reg
&
LVDS_ON
)
{
if
(
!
(
reg
&
LVDS_ON
)
)
{
reg
&=
~
LVDS_BLON
;
aty_st_le32
(
LVDS_GEN_CNTL
,
reg
);
(
void
)
aty_ld_le32
(
LVDS_GEN_CNTL
);
...
...
drivers/video/radeonfb.c
View file @
37b5d10a
...
...
@@ -2319,7 +2319,7 @@ static int radeon_set_backlight_enable(int on, int level, void *data)
lvds_gen_cntl
|=
(
LVDS_BL_MOD_EN
|
LVDS_BLON
);
if
(
on
&&
(
level
>
BACKLIGHT_OFF
))
{
lvds_gen_cntl
|=
LVDS_DIGON
;
if
(
!
lvds_gen_cntl
&
LVDS_ON
)
{
if
(
!
(
lvds_gen_cntl
&
LVDS_ON
)
)
{
lvds_gen_cntl
&=
~
LVDS_BLON
;
OUTREG
(
LVDS_GEN_CNTL
,
lvds_gen_cntl
);
(
void
)
INREG
(
LVDS_GEN_CNTL
);
...
...
fs/xfs/linux/xfs_aops.c
View file @
37b5d10a
...
...
@@ -407,8 +407,10 @@ map_unwritten(
offset
<<=
PAGE_CACHE_SHIFT
;
offset
+=
p_offset
;
pb
=
pagebuf_lookup
(
iomapp
->
iomap_target
,
iomapp
->
iomap_offset
,
iomapp
->
iomap_bsize
,
0
);
/* get an "empty" pagebuf to manage IO completion
* Proper values will be set before returning */
pb
=
pagebuf_lookup
(
iomapp
->
iomap_target
,
0
,
0
,
0
);
if
(
!
pb
)
return
-
EAGAIN
;
...
...
@@ -471,6 +473,11 @@ map_unwritten(
nblocks
+=
bs
;
atomic_add
(
bs
,
&
pb
->
pb_io_remaining
);
convert_page
(
inode
,
page
,
iomapp
,
pb
,
startio
,
all_bh
);
/* stop if converting the next page might add
* enough blocks that the corresponding byte
* count won't fit in our ulong page buf length */
if
(
nblocks
>=
((
ULONG_MAX
-
PAGE_SIZE
)
>>
block_bits
))
goto
enough
;
}
if
(
tindex
==
tlast
&&
...
...
@@ -481,16 +488,20 @@ map_unwritten(
nblocks
+=
bs
;
atomic_add
(
bs
,
&
pb
->
pb_io_remaining
);
convert_page
(
inode
,
page
,
iomapp
,
pb
,
startio
,
all_bh
);
if
(
nblocks
>=
((
ULONG_MAX
-
PAGE_SIZE
)
>>
block_bits
))
goto
enough
;
}
}
}
enough:
size
=
nblocks
;
/* NB: using 64bit number here */
size
<<=
block_bits
;
/* convert fsb's to byte range */
XFS_BUF_DATAIO
(
pb
);
XFS_BUF_ASYNC
(
pb
);
XFS_BUF_SET_SIZE
(
pb
,
size
);
XFS_BUF_SET_COUNT
(
pb
,
size
);
XFS_BUF_SET_OFFSET
(
pb
,
offset
);
XFS_BUF_SET_FSPRIVATE
(
pb
,
LINVFS_GET_VP
(
inode
));
XFS_BUF_SET_IODONE_FUNC
(
pb
,
linvfs_unwritten_convert
);
...
...
@@ -925,8 +936,10 @@ linvfs_get_block_core(
}
if
(
blocks
)
{
size
=
(
iomap
.
iomap_bsize
-
iomap
.
iomap_delta
);
bh_result
->
b_size
=
min_t
(
ssize_t
,
size
,
blocks
<<
inode
->
i_blkbits
);
loff_t
iosize
;
iosize
=
(
iomap
.
iomap_bsize
-
iomap
.
iomap_delta
);
bh_result
->
b_size
=
(
ssize_t
)
min
(
iosize
,
(
loff_t
)(
blocks
<<
inode
->
i_blkbits
));
}
return
0
;
...
...
fs/xfs/xfs_iomap.h
View file @
37b5d10a
...
...
@@ -66,27 +66,26 @@ typedef enum {
/*
* xfs_iomap_t: File system I/O map
*
* The iomap_bn, iomap_offset and iomap_length fields are expressed in disk blocks.
* The iomap_length field specifies the size of the underlying backing store
* for the particular mapping.
* The iomap_bn field is expressed in 512-byte blocks, and is where the
* mapping starts on disk.
*
* The iomap_
bsize, iomap_size and iomap_delta fields are in bytes and indicate
*
the size of the mapping, the number of bytes that are valid to access
*
(read or write), and the offset into the mapping, given the offset
*
supplied to the file I/O map routine. iomap_delta is the offset of the
*
desired data from the beginning of the mapping
.
* The iomap_
offset, iomap_bsize and iomap_delta fields are in bytes.
*
iomap_offset is the offset of the mapping in the file itself.
*
iomap_bsize is the size of the mapping, iomap_delta is the
*
desired data's offset into the mapping, given the offset supplied
*
to the file I/O map routine
.
*
* When a request is made to read beyond the logical end of the object,
* iomap_size may be set to 0, but iomap_offset and iomap_length should be set
to
* the actual amount of underlying storage that has been allocated, if any.
* iomap_size may be set to 0, but iomap_offset and iomap_length should be set
* t
o t
he actual amount of underlying storage that has been allocated, if any.
*/
typedef
struct
xfs_iomap
{
xfs_daddr_t
iomap_bn
;
xfs_daddr_t
iomap_bn
;
/* first 512b blk of mapping */
xfs_buftarg_t
*
iomap_target
;
loff_t
iomap_offset
;
size_t
iomap_delta
;
size_t
iomap_
bsize
;
loff_t
iomap_offset
;
/* offset of mapping, bytes */
loff_t
iomap_bsize
;
/* size of mapping, bytes */
size_t
iomap_
delta
;
/* offset into mapping, bytes */
iomap_flags_t
iomap_flags
;
}
xfs_iomap_t
;
...
...
fs/xfs/xfs_itable.c
View file @
37b5d10a
...
...
@@ -330,7 +330,7 @@ xfs_bulkstat(
* inode returned; 0 means start of the allocation group.
*/
rval
=
0
;
while
(
(
ubleft
/
statstruct_size
)
>
0
&&
agno
<
mp
->
m_sb
.
sb_agcount
)
{
while
(
ubleft
>=
statstruct_size
&&
agno
<
mp
->
m_sb
.
sb_agcount
)
{
bp
=
NULL
;
down_read
(
&
mp
->
m_peraglock
);
error
=
xfs_ialloc_read_agi
(
mp
,
tp
,
agno
,
&
agbp
);
...
...
@@ -415,7 +415,7 @@ xfs_bulkstat(
* Loop through inode btree records in this ag,
* until we run out of inodes or space in the buffer.
*/
while
(
irbp
<
irbufend
&&
icount
<
(
ubleft
/
statstruct_size
)
)
{
while
(
irbp
<
irbufend
&&
icount
<
ubcount
)
{
/*
* Loop as long as we're unable to read the
* inode btree.
...
...
@@ -467,7 +467,7 @@ xfs_bulkstat(
*/
irbufend
=
irbp
;
for
(
irbp
=
irbuf
;
irbp
<
irbufend
&&
(
ubleft
/
statstruct_size
)
>
0
;
irbp
++
)
{
irbp
<
irbufend
&&
ubleft
>=
statstruct_size
;
irbp
++
)
{
/*
* Read-ahead the next chunk's worth of inodes.
*/
...
...
fs/xfs/xfs_log_recover.c
View file @
37b5d10a
...
...
@@ -1553,7 +1553,7 @@ xlog_recover_reorder_trans(
case
XFS_LI_BUF
:
case
XFS_LI_6_1_BUF
:
case
XFS_LI_5_3_BUF
:
if
(
(
!
flags
&
XFS_BLI_CANCEL
))
{
if
(
!
(
flags
&
XFS_BLI_CANCEL
))
{
xlog_recover_insert_item_frontq
(
&
trans
->
r_itemq
,
itemq
);
break
;
...
...
include/linux/apm_bios.h
View file @
37b5d10a
...
...
@@ -53,6 +53,7 @@ struct apm_info {
int
get_power_status_broken
;
int
get_power_status_swabinminutes
;
int
allow_ints
;
int
forbid_idle
;
int
realmode_power_off
;
int
disabled
;
};
...
...
include/linux/blkdev.h
View file @
37b5d10a
...
...
@@ -485,7 +485,7 @@ static inline void blk_queue_bounce(request_queue_t *q, struct bio **bio)
#define rq_for_each_bio(_bio, rq) \
if ((rq->bio)) \
for (_bio = (rq)->bio; _bio; _bio = bio->bi_next)
for (_bio = (rq)->bio; _bio; _bio =
_
bio->bi_next)
struct
sec_size
{
unsigned
block_size
;
...
...
init/main.c
View file @
37b5d10a
...
...
@@ -339,7 +339,7 @@ static void __init setup_per_cpu_areas(void)
/* Called by boot processor to activate the rest. */
static
void
__init
smp_init
(
void
)
{
unsigned
int
i
;
unsigned
int
i
,
j
=
0
;
/* FIXME: This should be done in userspace --RR */
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
{
...
...
@@ -348,11 +348,12 @@ static void __init smp_init(void)
if
(
cpu_possible
(
i
)
&&
!
cpu_online
(
i
))
{
printk
(
"Bringing up %i
\n
"
,
i
);
cpu_up
(
i
);
j
++
;
}
}
/* Any cleanup work */
printk
(
"CPUS done %u
\n
"
,
max_cpus
);
printk
(
"CPUS done %u
\n
"
,
j
);
smp_cpus_done
(
max_cpus
);
#if 0
/* Get other processors into their bootup holding patterns. */
...
...
net/core/flow.c
View file @
37b5d10a
...
...
@@ -66,24 +66,18 @@ static struct timer_list flow_hash_rnd_timer;
struct
flow_flush_info
{
atomic_t
cpuleft
;
cpumask_t
cpumap
;
struct
completion
completion
;
};
static
DEFINE_PER_CPU
(
struct
tasklet_struct
,
flow_flush_tasklets
)
=
{
NULL
};
#define flow_flush_tasklet(cpu) (&per_cpu(flow_flush_tasklets, cpu))
static
DECLARE_MUTEX
(
flow_cache_cpu_sem
);
static
cpumask_t
flow_cache_cpu_map
;
static
unsigned
int
flow_cache_cpu_count
;
static
void
flow_cache_new_hashrnd
(
unsigned
long
arg
)
{
int
i
;
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
if
(
cpu_isset
(
i
,
flow_cache_cpu_map
))
flow_hash_rnd_recalc
(
i
)
=
1
;
for_each_cpu
(
i
)
flow_hash_rnd_recalc
(
i
)
=
1
;
flow_hash_rnd_timer
.
expires
=
jiffies
+
FLOW_HASH_RND_PERIOD
;
add_timer
(
&
flow_hash_rnd_timer
);
...
...
@@ -179,7 +173,9 @@ void *flow_cache_lookup(struct flowi *key, u16 family, u8 dir,
cpu
=
smp_processor_id
();
fle
=
NULL
;
if
(
!
cpu_isset
(
cpu
,
flow_cache_cpu_map
))
/* Packet really early in init? Making flow_cache_init a
* pre-smp initcall would solve this. --RR */
if
(
!
flow_table
(
cpu
))
goto
nocache
;
if
(
flow_hash_rnd_recalc
(
cpu
))
...
...
@@ -278,8 +274,6 @@ static void flow_cache_flush_per_cpu(void *data)
struct
tasklet_struct
*
tasklet
;
cpu
=
smp_processor_id
();
if
(
!
cpu_isset
(
cpu
,
info
->
cpumap
))
return
;
tasklet
=
flow_flush_tasklet
(
cpu
);
tasklet
->
data
=
(
unsigned
long
)
info
;
...
...
@@ -289,29 +283,23 @@ static void flow_cache_flush_per_cpu(void *data)
void
flow_cache_flush
(
void
)
{
struct
flow_flush_info
info
;
static
DECLARE_MUTEX
(
flow_flush_sem
);
down
(
&
flow_cache_cpu_sem
);
info
.
cpumap
=
flow_cache_cpu_map
;
atomic_set
(
&
info
.
cpuleft
,
flow_cache_cpu_count
);
up
(
&
flow_cache_cpu_sem
);
/* Don't want cpus going down or up during this, also protects
* against multiple callers. */
down
(
&
cpucontrol
);
atomic_set
(
&
info
.
cpuleft
,
num_online_cpus
());
init_completion
(
&
info
.
completion
);
down
(
&
flow_flush_sem
);
local_bh_disable
();
smp_call_function
(
flow_cache_flush_per_cpu
,
&
info
,
1
,
0
);
if
(
cpu_isset
(
smp_processor_id
(),
info
.
cpumap
))
flow_cache_flush_tasklet
((
unsigned
long
)
&
info
);
flow_cache_flush_tasklet
((
unsigned
long
)
&
info
);
local_bh_enable
();
wait_for_completion
(
&
info
.
completion
);
up
(
&
flow_flush_sem
);
up
(
&
cpucontrol
);
}
static
int
__devinit
flow_cache_cpu_prepare
(
int
cpu
)
static
void
__devinit
flow_cache_cpu_prepare
(
int
cpu
)
{
struct
tasklet_struct
*
tasklet
;
unsigned
long
order
;
...
...
@@ -324,9 +312,8 @@ static int __devinit flow_cache_cpu_prepare(int cpu)
flow_table
(
cpu
)
=
(
struct
flow_cache_entry
**
)
__get_free_pages
(
GFP_KERNEL
,
order
);
if
(
!
flow_table
(
cpu
))
return
NOTIFY_BAD
;
panic
(
"NET: failed to allocate flow cache order %lu
\n
"
,
order
)
;
memset
(
flow_table
(
cpu
),
0
,
PAGE_SIZE
<<
order
);
...
...
@@ -335,39 +322,8 @@ static int __devinit flow_cache_cpu_prepare(int cpu)
tasklet
=
flow_flush_tasklet
(
cpu
);
tasklet_init
(
tasklet
,
flow_cache_flush_tasklet
,
0
);
return
NOTIFY_OK
;
}
static
int
__devinit
flow_cache_cpu_online
(
int
cpu
)
{
down
(
&
flow_cache_cpu_sem
);
cpu_set
(
cpu
,
flow_cache_cpu_map
);
flow_cache_cpu_count
++
;
up
(
&
flow_cache_cpu_sem
);
return
NOTIFY_OK
;
}
static
int
__devinit
flow_cache_cpu_notify
(
struct
notifier_block
*
self
,
unsigned
long
action
,
void
*
hcpu
)
{
unsigned
long
cpu
=
(
unsigned
long
)
cpu
;
switch
(
action
)
{
case
CPU_UP_PREPARE
:
return
flow_cache_cpu_prepare
(
cpu
);
break
;
case
CPU_ONLINE
:
return
flow_cache_cpu_online
(
cpu
);
break
;
}
return
NOTIFY_OK
;
}
static
struct
notifier_block
__devinitdata
flow_cache_cpu_nb
=
{
.
notifier_call
=
flow_cache_cpu_notify
,
};
static
int
__init
flow_cache_init
(
void
)
{
int
i
;
...
...
@@ -389,15 +345,8 @@ static int __init flow_cache_init(void)
flow_hash_rnd_timer
.
expires
=
jiffies
+
FLOW_HASH_RND_PERIOD
;
add_timer
(
&
flow_hash_rnd_timer
);
register_cpu_notifier
(
&
flow_cache_cpu_nb
);
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
{
if
(
!
cpu_online
(
i
))
continue
;
if
(
flow_cache_cpu_prepare
(
i
)
==
NOTIFY_OK
&&
flow_cache_cpu_online
(
i
)
==
NOTIFY_OK
)
continue
;
panic
(
"NET: failed to initialise flow cache hash table
\n
"
);
}
for_each_cpu
(
i
)
flow_cache_cpu_prepare
(
i
);
return
0
;
}
...
...
net/ipv6/addrconf.c
View file @
37b5d10a
...
...
@@ -3030,6 +3030,9 @@ static int addrconf_sysctl_forward_strategy(ctl_table *table,
idev
=
NULL
;
*
valp
=
new
;
addrconf_forward_change
(
idev
);
if
(
*
valp
)
rt6_purge_dflt_routers
(
0
);
}
else
*
valp
=
new
;
...
...
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